Skip to content

Commit 1ffc614

Browse files
committed
fix(db): cover dev size cutover
1 parent f79afbf commit 1ffc614

5 files changed

Lines changed: 53 additions & 2 deletions

File tree

.github/workflows/migrations.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ jobs:
8080
echo "ERROR: db:push needs an interactive rename decision; land it as a versioned migration instead of relying on push." >&2
8181
exit 1
8282
fi
83+
bun run ./scripts/apply-dev-workspace-file-size-cutover.ts
8384
else
8485
echo "Applying versioned migrations (db:migrate)"
8586
bun run ./scripts/migrate.ts

packages/db/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"scripts": {
2626
"db:push": "bunx drizzle-kit push --config=./drizzle.config.ts",
2727
"db:migrate": "bun --env-file=.env run ./scripts/migrate.ts",
28+
"db:apply-dev-workspace-file-size-cutover": "bun --env-file=.env run ./scripts/apply-dev-workspace-file-size-cutover.ts",
2829
"db:reconcile-fork-kb-file-ownership": "bun --env-file=.env run ./scripts/reconcile-fork-kb-file-ownership.ts",
2930
"db:reconcile-workspace-storage": "bun --env-file=.env run ./scripts/reconcile-workspace-storage.ts",
3031
"db:studio": "bunx drizzle-kit studio --config=./drizzle.config.ts",

packages/db/schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2105,7 +2105,7 @@ export const workspaceFiles = pgTable(
21052105
*/
21062106
displayName: text('display_name'),
21072107
contentType: text('content_type').notNull(),
2108-
// contract-pending(after #7112 is fully deployed): drop size and workspace_files_sync_size_columns the compatibility trigger is then the only remaining consumer
2108+
/** contract-pending(after #7112 is fully deployed): drop size, workspace_files_sync_size_columns, and the temporary dev cutover runner */
21092109
size: integer('size').notNull().default(0),
21102110
/** Exact byte size. The deploy migration backfills existing rows before this release serves traffic. */
21112111
sizeBytes: bigint('size_bytes', { mode: 'number' }),

packages/db/script-migrations/0008_backfill_workspace_file_size_bytes.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import { createLogger } from '@sim/logger'
12
import type { Sql } from 'postgres'
23
import type { ScriptMigration } from './types'
34

5+
const logger = createLogger('WorkspaceFileSizeBytesBackfill')
6+
47
export const WORKSPACE_FILE_SIZE_BYTES_BATCH_SIZE = 1000
58

69
export interface WorkspaceFileSizeBytesBackfillStore {
@@ -78,6 +81,6 @@ export const backfillWorkspaceFileSizeBytesMigration: ScriptMigration = {
7881
const backfilled = await backfillWorkspaceFileSizeBytes(
7982
createPostgresWorkspaceFileSizeBytesBackfillStore(sql)
8083
)
81-
console.log(`Workspace file size_bytes backfill complete: ${backfilled} file(s) updated.`)
84+
logger.info(`Workspace file size_bytes backfill complete: ${backfilled} file(s) updated.`)
8285
},
8386
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { createLogger } from '@sim/logger'
2+
import postgres from 'postgres'
3+
import {
4+
backfillWorkspaceFileSizeBytes,
5+
createPostgresWorkspaceFileSizeBytesBackfillStore,
6+
} from '../script-migrations/0008_backfill_workspace_file_size_bytes'
7+
8+
const logger = createLogger('DevWorkspaceFileSizeCutover')
9+
const MIGRATION_NAME = '0008_backfill_workspace_file_size_bytes'
10+
const MIGRATION_SQL_URL = new URL(
11+
'../migrations/0308_workspace_file_size_cutover.sql',
12+
import.meta.url
13+
)
14+
const url = process.env.MIGRATION_DATABASE_URL || process.env.DATABASE_URL
15+
16+
if (!url) {
17+
throw new Error('Missing MIGRATION_DATABASE_URL or DATABASE_URL')
18+
}
19+
20+
const sql = postgres(url, {
21+
max: 1,
22+
connect_timeout: 10,
23+
max_lifetime: null,
24+
connection: { application_name: 'sim-dev-workspace-file-size-cutover' },
25+
})
26+
27+
try {
28+
const migrationSql = await Bun.file(MIGRATION_SQL_URL).text()
29+
await sql.unsafe(migrationSql)
30+
const backfilled = await backfillWorkspaceFileSizeBytes(
31+
createPostgresWorkspaceFileSizeBytesBackfillStore(sql)
32+
)
33+
await sql`
34+
CREATE TABLE IF NOT EXISTS script_migrations (
35+
name text PRIMARY KEY,
36+
applied_at timestamptz NOT NULL DEFAULT now()
37+
)
38+
`
39+
await sql`
40+
INSERT INTO script_migrations (name) VALUES (${MIGRATION_NAME})
41+
ON CONFLICT (name) DO NOTHING
42+
`
43+
logger.info('Dev workspace file size cutover completed', { backfilled })
44+
} finally {
45+
await sql.end()
46+
}

0 commit comments

Comments
 (0)