From e81446a822ac23be99cd13d621111b6ecc543836 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Wed, 21 Aug 2024 18:21:56 +0100 Subject: [PATCH] chore: remove file hash and use file name instead as unique identifier --- tiles/src/env.d.ts | 3 +-- tiles/src/index.ts | 6 +++--- tiles/src/interface.ts | 1 - tiles/src/kv-warmer.ts | 8 +++----- tiles/src/pmtiles/pmtiles.service.ts | 6 +++--- tiles/src/pmtiles/utils.ts | 8 ++------ tiles/src/repository.ts | 10 ---------- tiles/worker-configuration.d.ts | 3 +-- tiles/wrangler.toml | 1 - 9 files changed, 13 insertions(+), 33 deletions(-) diff --git a/tiles/src/env.d.ts b/tiles/src/env.d.ts index d2bc536..20b2763 100644 --- a/tiles/src/env.d.ts +++ b/tiles/src/env.d.ts @@ -1,6 +1,5 @@ -interface WorkerEnv extends Omit { +interface WorkerEnv extends Omit { ENVIRONMENT: string; PMTILES_FILE_NAME: string; - PMTILES_FILE_HASH: string; VMETRICS_API_TOKEN: string; } diff --git a/tiles/src/index.ts b/tiles/src/index.ts index 7c29f79..e12ac25 100644 --- a/tiles/src/index.ts +++ b/tiles/src/index.ts @@ -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, { @@ -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, @@ -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); diff --git a/tiles/src/interface.ts b/tiles/src/interface.ts index efbdd69..b91f189 100644 --- a/tiles/src/interface.ts +++ b/tiles/src/interface.ts @@ -14,7 +14,6 @@ export interface IStorageRepository { get(range: { length: number; offset: number }): Promise; getAsStream(range: { length: number; offset: number }): Promise; getFileName(): string; - getFileHash(): string; } export interface IDeferredRepository { diff --git a/tiles/src/kv-warmer.ts b/tiles/src/kv-warmer.ts index 9dcbffc..edcd690 100644 --- a/tiles/src/kv-warmer.ts +++ b/tiles/src/kv-warmer.ts @@ -59,7 +59,6 @@ const handler = async () => { KV_NAMESPACE_ID, BUCKET_KEY, FILE_NAME, - FILE_HASH, } = process.env; if ( !S3_ACCESS_KEY || @@ -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'); } @@ -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(); @@ -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, }); diff --git a/tiles/src/pmtiles/pmtiles.service.ts b/tiles/src/pmtiles/pmtiles.service.ts index 92cd906..16347f6 100644 --- a/tiles/src/pmtiles/pmtiles.service.ts +++ b/tiles/src/pmtiles/pmtiles.service.ts @@ -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, }), @@ -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, }); @@ -181,7 +181,7 @@ export class PMTilesService { } private async getDirectory(offset: number, length: number): Promise { - 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) { diff --git a/tiles/src/pmtiles/utils.ts b/tiles/src/pmtiles/utils.ts index 68e4060..3c55af0 100644 --- a/tiles/src/pmtiles/utils.ts +++ b/tiles/src/pmtiles/utils.ts @@ -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}`; } diff --git a/tiles/src/repository.ts b/tiles/src/repository.ts index f20db04..671526b 100644 --- a/tiles/src/repository.ts +++ b/tiles/src/repository.ts @@ -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; } @@ -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 }) { @@ -109,10 +103,6 @@ export class S3StorageRepository implements IStorageRepository { getFileName(): string { return this.fileName; } - - getFileHash(): string { - return this.fileHash; - } } export class CloudflareDeferredRepository implements IDeferredRepository { diff --git a/tiles/worker-configuration.d.ts b/tiles/worker-configuration.d.ts index 1367b8a..5b4dcb9 100644 --- a/tiles/worker-configuration.d.ts +++ b/tiles/worker-configuration.d.ts @@ -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; } diff --git a/tiles/wrangler.toml b/tiles/wrangler.toml index 21dae10..53150a8 100644 --- a/tiles/wrangler.toml +++ b/tiles/wrangler.toml @@ -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"