Skip to content

Commit

Permalink
chore: remove file hash and use file name instead as unique identifier
Browse files Browse the repository at this point in the history
  • Loading branch information
zackpollard committed Aug 21, 2024
1 parent db678ab commit e81446a
Show file tree
Hide file tree
Showing 9 changed files with 13 additions and 33 deletions.
3 changes: 1 addition & 2 deletions tiles/src/env.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
interface WorkerEnv extends Omit<Env, 'ENVIRONMENT' | 'PMTILES_FILE_NAME' | 'PMTILES_FILE_HASH'> {
interface WorkerEnv extends Omit<Env, 'ENVIRONMENT' | 'PMTILES_FILE_NAME'> {
ENVIRONMENT: string;
PMTILES_FILE_NAME: string;
PMTILES_FILE_HASH: string;
VMETRICS_API_TOKEN: string;
}
6 changes: 3 additions & 3 deletions tiles/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ async function handleRequest(
const cached = await metrics.monitorAsyncFunction({ name: 'match_request_from_cdn' }, (url) => cache.match(url))(
request.url,
);
if (cached && cached.headers.get(Header.PMTILES_FILE_IDENTIFIER) === env.PMTILES_FILE_HASH) {
if (cached && cached.headers.get(Header.PMTILES_FILE_IDENTIFIER) === env.PMTILES_FILE_NAME) {
const cacheHeaders = new Headers(cached.headers);
const encodeBody = cacheHeaders.has('content-encoding') ? 'manual' : 'automatic';
return new Response(cached.body, {
Expand All @@ -117,7 +117,7 @@ async function handleRequest(

const memCacheRepository = new MemCacheRepository(globalThis.memCache);
const kvRepository = new CloudflareKVRepository(env.KV);
const storageRepository = new R2StorageRepository(env.BUCKET, env.PMTILES_FILE_NAME, env.PMTILES_FILE_HASH);
const storageRepository = new R2StorageRepository(env.BUCKET, env.PMTILES_FILE_NAME);
const pmTilesService = await metrics.monitorAsyncFunction({ name: 'pmtiles_init' }, PMTilesService.init)(
storageRepository,
memCacheRepository,
Expand All @@ -129,7 +129,7 @@ async function handleRequest(
respHeaders.set(Header.CACHE_CONTROL, `public, max-age=${60 * 60 * 24 * 31}`);
respHeaders.set(Header.ACCESS_CONTROL_ALLOW_ORIGIN, '*');
respHeaders.set(Header.VARY, 'Origin');
respHeaders.set(Header.PMTILES_FILE_IDENTIFIER, env.PMTILES_FILE_HASH);
respHeaders.set(Header.PMTILES_FILE_IDENTIFIER, env.PMTILES_FILE_NAME);

const pmTilesParams = parseUrl(request);

Expand Down
1 change: 0 additions & 1 deletion tiles/src/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ export interface IStorageRepository {
get(range: { length: number; offset: number }): Promise<ArrayBuffer>;
getAsStream(range: { length: number; offset: number }): Promise<ReadableStream>;
getFileName(): string;
getFileHash(): string;
}

export interface IDeferredRepository {
Expand Down
8 changes: 3 additions & 5 deletions tiles/src/kv-warmer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ const handler = async () => {
KV_NAMESPACE_ID,
BUCKET_KEY,
FILE_NAME,
FILE_HASH,
} = process.env;
if (
!S3_ACCESS_KEY ||
Expand All @@ -69,8 +68,7 @@ const handler = async () => {
!CLOUDFLARE_ACCOUNT_ID ||
!KV_NAMESPACE_ID ||
!BUCKET_KEY ||
!FILE_NAME ||
!FILE_HASH
!FILE_NAME
) {
throw new Error('Missing environment variables');
}
Expand All @@ -84,7 +82,7 @@ const handler = async () => {
},
});

const storageRepository = new S3StorageRepository(client, BUCKET_KEY, FILE_NAME, FILE_HASH);
const storageRepository = new S3StorageRepository(client, BUCKET_KEY, FILE_NAME);
const memCacheRepository = new MemCacheRepository(new Map());
const kvRepository = new FakeKVRepository();
const metricsRepository = new FakeMetricsRepository();
Expand Down Expand Up @@ -143,7 +141,7 @@ const handler = async () => {
header,
);
const stream = DirectoryStream.fromDirectory(directory);
const cacheKey = getDirectoryCacheKey('v1.pmtiles', 'prodv1', {
const cacheKey = getDirectoryCacheKey(FILE_NAME, {
offset: entry.offset + header.leafDirectoryOffset,
length: entry.length,
});
Expand Down
6 changes: 3 additions & 3 deletions tiles/src/pmtiles/pmtiles.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ export class PMTilesService {
const [header, root] = await p.getHeaderAndRootFromSource();
memCache.set(headerCacheKey, header);
memCache.set(
getDirectoryCacheKey(source.getFileName(), source.getFileHash(), {
getDirectoryCacheKey(source.getFileName(), {
offset: header.rootDirectoryOffset,
length: header.rootDirectoryLength,
}),
Expand All @@ -148,7 +148,7 @@ export class PMTilesService {
}

private getRootDirectory(header: Header): Directory {
const key = getDirectoryCacheKey(this.source.getFileName(), this.source.getFileHash(), {
const key = getDirectoryCacheKey(this.source.getFileName(), {
offset: header.rootDirectoryOffset,
length: header.rootDirectoryLength,
});
Expand Down Expand Up @@ -181,7 +181,7 @@ export class PMTilesService {
}

private async getDirectory(offset: number, length: number): Promise<DirectoryStream> {
const cacheKey = getDirectoryCacheKey(this.source.getFileName(), this.source.getFileHash(), { offset, length });
const cacheKey = getDirectoryCacheKey(this.source.getFileName(), { offset, length });
console.log(cacheKey);
const kvValueStream = await this.kvCache.getAsStream(cacheKey);
if (kvValueStream) {
Expand Down
8 changes: 2 additions & 6 deletions tiles/src/pmtiles/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,10 +268,6 @@ export function getHeaderCacheKey(archiveName: string): string {
return archiveName;
}

export function getDirectoryCacheKey(
fileName: string,
fileHash: string,
range: { offset: number; length: number },
): string {
return `${fileName}|${fileHash}|${range.offset}|${range.length}`;
export function getDirectoryCacheKey(fileName: string, range: { offset: number; length: number }): string {
return `${fileName}|${range.offset}|${range.length}`;
}
10 changes: 0 additions & 10 deletions tiles/src/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,8 @@ export class R2StorageRepository implements IStorageRepository {
constructor(
private bucket: R2Bucket,
private fileName: string,
private fileHash: string,
) {}

getFileHash(): string {
return this.fileHash;
}

getFileName(): string {
return this.fileName;
}
Expand Down Expand Up @@ -79,7 +74,6 @@ export class S3StorageRepository implements IStorageRepository {
private client: S3Client,
private bucketKey: string,
private fileName: string,
private fileHash: string,
) {}

private async getS3Object(range: { offset: number; length: number }) {
Expand Down Expand Up @@ -109,10 +103,6 @@ export class S3StorageRepository implements IStorageRepository {
getFileName(): string {
return this.fileName;
}

getFileHash(): string {
return this.fileHash;
}
}

export class CloudflareDeferredRepository implements IDeferredRepository {
Expand Down
3 changes: 1 addition & 2 deletions tiles/worker-configuration.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
// Generated by Wrangler on Wed Aug 21 2024 18:15:03 GMT+0100 (British Summer Time)
// Generated by Wrangler on Wed Aug 21 2024 18:17:58 GMT+0100 (British Summer Time)
// by running `wrangler types`

interface Env {
KV: KVNamespace;
PMTILES_FILE_NAME: "v1.pmtiles";
PMTILES_FILE_HASH: "prodv1";
ENVIRONMENT: "production";
BUCKET: R2Bucket;
}
1 change: 0 additions & 1 deletion tiles/wrangler.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,4 @@ preview_bucket_name = "tiles"
# Define environment variables for your Workers script
[vars]
PMTILES_FILE_NAME = "v1.pmtiles"
PMTILES_FILE_HASH = "prodv1"
ENVIRONMENT = "production"

0 comments on commit e81446a

Please sign in to comment.