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
5 changes: 0 additions & 5 deletions acceptance/specs/admin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ interface TenantFeatures {
interface TenantDetailResponse {
anonKey?: string
capabilities?: Record<string, unknown>
databasePoolMode?: string | null
databasePoolUrl?: string | null
databaseUrl?: string
fileSizeLimit?: number
Expand Down Expand Up @@ -574,10 +573,6 @@ function buildTenantProvisionBody(
serviceKey: requireString(sourceTenant?.serviceKey, 'serviceKey'),
}

if (typeof sourceTenant?.databasePoolMode === 'string') {
body.databasePoolMode = sourceTenant.databasePoolMode
}

if (typeof sourceTenant?.databasePoolUrl === 'string') {
body.databasePoolUrl = sourceTenant.databasePoolUrl
}
Expand Down
4 changes: 2 additions & 2 deletions src/http/routes/admin/tenants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,8 @@ export default async function routes(fastify: FastifyInstance) {
tenantInfo.feature_s3_protocol = features?.s3Protocol?.enabled
}

if (databasePoolUrl) {
tenantInfo.database_pool_url = encrypt(databasePoolUrl)
if (databasePoolUrl !== undefined) {
tenantInfo.database_pool_url = databasePoolUrl === null ? null : encrypt(databasePoolUrl)
}

if (maxConnections) {
Expand Down
56 changes: 31 additions & 25 deletions src/test/tenant.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,31 +298,6 @@ describe('Tenant configs', () => {
await expect(getFeatures('abc')).resolves.toEqual(payload.features)
})

test('Ignores legacy database pool mode fields on tenant writes', async () => {
const response = await adminApp.inject({
method: 'POST',
url: `/tenants/abc`,
payload: {
...payload,
databasePoolMode: 'single_use',
},
headers: {
apikey: process.env.ADMIN_API_KEYS,
},
})
expect(response.statusCode).toBe(201)

const getResponse = await adminApp.inject({
method: 'GET',
url: `/tenants/abc`,
headers: {
apikey: process.env.ADMIN_API_KEYS,
},
})
expect(getResponse.statusCode).toBe(200)
expect(JSON.parse(getResponse.body)).toEqual(payload)
})

test('PATCH refreshes local tenant config changes before the notify cache path', async () => {
const createResponse = await adminApp.inject({
method: 'POST',
Expand Down Expand Up @@ -819,6 +794,37 @@ describe('Tenant configs', () => {
expect(getResponseJSON.databasePoolUrl).toBeNull()
})

test('PUT clears tenant databasePoolUrl when set to null', async () => {
await adminApp.inject({
method: 'POST',
url: `/tenants/abc`,
payload,
headers: {
apikey: process.env.ADMIN_API_KEYS,
},
})

const putResponse = await adminApp.inject({
method: 'PUT',
url: `/tenants/abc`,
payload: { ...payload, databasePoolUrl: null },
headers: {
apikey: process.env.ADMIN_API_KEYS,
},
})
expect(putResponse.statusCode).toBe(204)

const getResponse = await adminApp.inject({
method: 'GET',
url: `/tenants/abc`,
headers: {
apikey: process.env.ADMIN_API_KEYS,
},
})
expect(getResponse.statusCode).toBe(200)
expect(JSON.parse(getResponse.body).databasePoolUrl).toBeNull()
})

test('Upsert tenant config updates iceberg/vector limits when enabled is omitted', async () => {
await adminApp.inject({
method: 'POST',
Expand Down