Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/snapshot-fork-benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ jobs:
- azure-blob
- tensorlake
- archil
- neon
# vercel-blob is disabled pending an adapter fix: its manifest-based
# snapshot/fork emulation is unreliable on Vercel Blob's eventually-
# consistent overwrites (stale reads + lost deletes). See providers.ts.
Expand All @@ -82,7 +83,7 @@ jobs:
run: rm -rf results/snapshot-fork/
- name: Run snapshot/fork test
run: |
. benchmarks/scripts/load-vault-secrets.sh '^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_REGION|S3_BUCKET|S3_SNAPSHOT_ACCESS_KEY_ID|S3_SNAPSHOT_SECRET_ACCESS_KEY|S3_SNAPSHOT_BUCKET|R2_ACCESS_KEY_ID|R2_SECRET_ACCESS_KEY|R2_BUCKET|R2_ACCOUNT_ID|R2_SNAPSHOT_ACCESS_KEY_ID|R2_SNAPSHOT_SECRET_ACCESS_KEY|R2_SNAPSHOT_BUCKET|TIGRIS_STORAGE_ACCESS_KEY_ID|TIGRIS_STORAGE_SECRET_ACCESS_KEY|TIGRIS_STORAGE_BUCKET|TIGRIS_SNAPSHOT_ACCESS_KEY|TIGRIS_SNAPSHOT_SECRET_KEY|TIGRIS_SNAPSHOT_STORAGE_BUCKET|BLOB_READ_WRITE_TOKEN|VERCEL_BLOB_BUCKET|GCS_PROJECT_ID|GCS_BUCKET|GCS_CLIENT_EMAIL|GCS_PRIVATE_KEY|AZURE_ACCOUNT_NAME|AZURE_ACCOUNT_KEY|AZURE_CONTAINER|AZURE_SNAPSHOT_ACCOUNT_NAME|AZURE_SNAPSHOT_ACCOUNT_KEY|AZURE_SNAPSHOT_CONTAINER|TENSORLAKE_API_KEY|TENSORLAKE_API_URL|TENSORLAKE_ORGANIZATION_ID|TENSORLAKE_PROJECT_ID|TENSORLAKE_FILESYSTEM|ARCHIL_S3_ACCESS_KEY_ID|ARCHIL_S3_SECRET_ACCESS_KEY|ARCHIL_BUCKET|ARCHIL_REGION|ARCHIL_BRANCH|COMPUTESDK_ADMIN_API_KEY|BENCHMARKS_PLATFORM_API_KEY)'
. benchmarks/scripts/load-vault-secrets.sh '^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_REGION|S3_BUCKET|S3_SNAPSHOT_ACCESS_KEY_ID|S3_SNAPSHOT_SECRET_ACCESS_KEY|S3_SNAPSHOT_BUCKET|R2_ACCESS_KEY_ID|R2_SECRET_ACCESS_KEY|R2_BUCKET|R2_ACCOUNT_ID|R2_SNAPSHOT_ACCESS_KEY_ID|R2_SNAPSHOT_SECRET_ACCESS_KEY|R2_SNAPSHOT_BUCKET|TIGRIS_STORAGE_ACCESS_KEY_ID|TIGRIS_STORAGE_SECRET_ACCESS_KEY|TIGRIS_STORAGE_BUCKET|TIGRIS_SNAPSHOT_ACCESS_KEY|TIGRIS_SNAPSHOT_SECRET_KEY|TIGRIS_SNAPSHOT_STORAGE_BUCKET|BLOB_READ_WRITE_TOKEN|VERCEL_BLOB_BUCKET|GCS_PROJECT_ID|GCS_BUCKET|GCS_CLIENT_EMAIL|GCS_PRIVATE_KEY|AZURE_ACCOUNT_NAME|AZURE_ACCOUNT_KEY|AZURE_CONTAINER|AZURE_SNAPSHOT_ACCOUNT_NAME|AZURE_SNAPSHOT_ACCOUNT_KEY|AZURE_SNAPSHOT_CONTAINER|TENSORLAKE_API_KEY|TENSORLAKE_API_URL|TENSORLAKE_ORGANIZATION_ID|TENSORLAKE_PROJECT_ID|TENSORLAKE_FILESYSTEM|ARCHIL_S3_ACCESS_KEY_ID|ARCHIL_S3_SECRET_ACCESS_KEY|ARCHIL_BUCKET|ARCHIL_REGION|ARCHIL_BRANCH|NEON_BUCKET|NEON_ENDPOINT|NEON_ACCESS_KEY_ID|NEON_SECRET_ACCESS_KEY|NEON_REGION|NEON_SNAPSHOT_BUCKET|NEON_SNAPSHOT_ENDPOINT|NEON_SNAPSHOT_ACCESS_KEY_ID|NEON_SNAPSHOT_SECRET_ACCESS_KEY|NEON_SNAPSHOT_REGION|COMPUTESDK_ADMIN_API_KEY|BENCHMARKS_PLATFORM_API_KEY)'

# All matrix jobs for this workflow run share a single platform run. The
# attempt number is included so re-runs do not rejoin completed runs.
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/storage-benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ jobs:
- azure-blob
- tensorlake
- archil
- neon
file_size: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.file_size != '' && fromJson(format('["{0}"]', github.event.inputs.file_size))) || (github.event_name == 'push' && fromJson('["1MB"]')) || fromJson('["1MB","4MB","10MB","16MB"]') }}
steps:
- uses: actions/checkout@v4
Expand All @@ -81,7 +82,7 @@ jobs:
run: rm -rf results/storage/
- name: Run storage benchmark
run: |
. benchmarks/scripts/load-vault-secrets.sh '^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_REGION|S3_BUCKET|R2_ACCESS_KEY_ID|R2_SECRET_ACCESS_KEY|R2_BUCKET|R2_ACCOUNT_ID|TIGRIS_STORAGE_ACCESS_KEY_ID|TIGRIS_STORAGE_SECRET_ACCESS_KEY|TIGRIS_STORAGE_BUCKET|BLOB_READ_WRITE_TOKEN|VERCEL_BLOB_BUCKET|GCS_PROJECT_ID|GCS_BUCKET|GCS_CLIENT_EMAIL|GCS_PRIVATE_KEY|AZURE_ACCOUNT_NAME|AZURE_ACCOUNT_KEY|AZURE_CONTAINER|TENSORLAKE_API_KEY|TENSORLAKE_API_URL|TENSORLAKE_ORGANIZATION_ID|TENSORLAKE_PROJECT_ID|TENSORLAKE_FILESYSTEM|ARCHIL_S3_ACCESS_KEY_ID|ARCHIL_S3_SECRET_ACCESS_KEY|ARCHIL_BUCKET|ARCHIL_REGION|ARCHIL_BRANCH|COMPUTESDK_ADMIN_API_KEY|BENCHMARKS_PLATFORM_API_KEY)'
. benchmarks/scripts/load-vault-secrets.sh '^(AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_REGION|S3_BUCKET|R2_ACCESS_KEY_ID|R2_SECRET_ACCESS_KEY|R2_BUCKET|R2_ACCOUNT_ID|TIGRIS_STORAGE_ACCESS_KEY_ID|TIGRIS_STORAGE_SECRET_ACCESS_KEY|TIGRIS_STORAGE_BUCKET|BLOB_READ_WRITE_TOKEN|VERCEL_BLOB_BUCKET|GCS_PROJECT_ID|GCS_BUCKET|GCS_CLIENT_EMAIL|GCS_PRIVATE_KEY|AZURE_ACCOUNT_NAME|AZURE_ACCOUNT_KEY|AZURE_CONTAINER|TENSORLAKE_API_KEY|TENSORLAKE_API_URL|TENSORLAKE_ORGANIZATION_ID|TENSORLAKE_PROJECT_ID|TENSORLAKE_FILESYSTEM|ARCHIL_S3_ACCESS_KEY_ID|ARCHIL_S3_SECRET_ACCESS_KEY|ARCHIL_BUCKET|ARCHIL_REGION|ARCHIL_BRANCH|NEON_BUCKET|NEON_ENDPOINT|NEON_ACCESS_KEY_ID|NEON_SECRET_ACCESS_KEY|NEON_REGION|COMPUTESDK_ADMIN_API_KEY|BENCHMARKS_PLATFORM_API_KEY)'

FILE_SIZE="${{ matrix.file_size }}"
# Matrix jobs for the same file size share one platform run (the benchmark
Expand Down
12 changes: 12 additions & 0 deletions benchmarks/scripts/provider-vars.json
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,12 @@
"ARCHIL_S3_SECRET_ACCESS_KEY",
"ARCHIL_BUCKET",
"ARCHIL_REGION"
],
"neon": [
"NEON_BUCKET",
"NEON_ENDPOINT",
"NEON_ACCESS_KEY_ID",
"NEON_SECRET_ACCESS_KEY"
]
},
"scale": {
Expand Down Expand Up @@ -297,6 +303,12 @@
"ARCHIL_S3_SECRET_ACCESS_KEY",
"ARCHIL_BUCKET",
"ARCHIL_REGION"
],
"neon": [
"NEON_BUCKET",
"NEON_ENDPOINT",
"NEON_ACCESS_KEY_ID",
"NEON_SECRET_ACCESS_KEY"
]
}
}
36 changes: 36 additions & 0 deletions benchmarks/storage/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { gcs } from '@storagesdk/adapters/gcs';
import { azure } from '@storagesdk/adapters/azure';
import { tensorlake } from '@storagesdk/adapters/tensorlake';
import { archil } from '@storagesdk/adapters/archil';
import { neon } from '@storagesdk/adapters/neon';
import type { StorageProviderConfig } from './types.js';

/**
Expand Down Expand Up @@ -254,6 +255,41 @@ export const storageProviders: StorageProviderConfig[] = [
}),
},
},
{
name: 'neon',
requiredEnvVars: ['NEON_BUCKET', 'NEON_ENDPOINT', 'NEON_ACCESS_KEY_ID', 'NEON_SECRET_ACCESS_KEY'],
bucket: process.env.NEON_BUCKET!,
createStorage: () => new Storage({
adapter: neon({
bucket: process.env.NEON_BUCKET!,
endpoint: process.env.NEON_ENDPOINT!,
accessKeyId: process.env.NEON_ACCESS_KEY_ID!,
secretAccessKey: process.env.NEON_SECRET_ACCESS_KEY!,
...(process.env.NEON_REGION ? { region: process.env.NEON_REGION } : {}),
}),
}),
fileSizes: [1 * 1024 * 1024, 4 * 1024 * 1024, 10 * 1024 * 1024, 16 * 1024 * 1024],
// Neon Object Storage is S3-compatible and uses sibling buckets for
// snapshot/fork emulation. The same branch endpoint/credentials can be
// reused; set NEON_SNAPSHOT_* vars to point snapshot/fork operations at a
// dedicated bucket if the upload/download credential lacks bucket
// create/delete permission.
snapshotFork: {
requiredEnvVars: ['NEON_BUCKET', 'NEON_ENDPOINT', 'NEON_ACCESS_KEY_ID', 'NEON_SECRET_ACCESS_KEY'],
bucket: process.env.NEON_SNAPSHOT_BUCKET || process.env.NEON_BUCKET!,
createStorage: () => new Storage({
adapter: neon({
bucket: process.env.NEON_SNAPSHOT_BUCKET || process.env.NEON_BUCKET!,
endpoint: process.env.NEON_SNAPSHOT_ENDPOINT || process.env.NEON_ENDPOINT!,
accessKeyId: process.env.NEON_SNAPSHOT_ACCESS_KEY_ID || process.env.NEON_ACCESS_KEY_ID!,
secretAccessKey: process.env.NEON_SNAPSHOT_SECRET_ACCESS_KEY || process.env.NEON_SECRET_ACCESS_KEY!,
...(process.env.NEON_SNAPSHOT_REGION || process.env.NEON_REGION
? { region: process.env.NEON_SNAPSHOT_REGION || process.env.NEON_REGION }
: {}),
}),
}),
},
},
//
// add providers above
];
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,15 @@
"bench:storage:r2": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --provider cloudflare-r2",
"bench:storage:tigris": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --provider tigris",
"bench:storage:tensorlake": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --provider tensorlake",
"bench:storage:neon": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --provider neon",
"bench:storage:1mb": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --file-size 1MB",
"bench:storage:4mb": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --file-size 4MB",
"bench:storage:10mb": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --file-size 10MB",
"bench:storage:16mb": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/storage.bench.ts --file-size 16MB",
"bench:snapshot-fork": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts",
"bench:snapshot-fork:tigris": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --provider tigris",
"bench:snapshot-fork:tensorlake": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --provider tensorlake",
"bench:snapshot-fork:neon": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --provider neon",
"bench:snapshot-fork:s3": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --provider aws-s3",
"bench:snapshot-fork:wide": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --dataset wide",
"bench:snapshot-fork:deep": "tsx packages/benchsdk-runner/dist/bin.js run benchmarks/storage/snapshot-fork.bench.ts --dataset deep",
Expand Down Expand Up @@ -143,7 +145,7 @@
"@computesdk/vercel": "^1.7.31",
"@electric-sql/pglite": "^0.2.14",
"@google-cloud/storage": "^7.21.0",
"@storagesdk/adapters": "^0.10.0",
"@storagesdk/adapters": "^0.11.0",
"@storagesdk/core": "^0.5.0",
"@superserve/sdk": "^0.8.1",
"@tigrisdata/storage": "^3.16.0",
Expand Down
10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading