mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 00:57:45 +00:00
chore(relay): move Asia cell c35 to the general same-cap lists after promotion (#27761)
This commit is contained in:
@@ -97,9 +97,9 @@ describe('production Relay capacity cell admission', () => {
|
||||
it('admits the same-cap Asia and migration-only cells only under the same-cap allowlist', () => {
|
||||
for (const cellId of [
|
||||
'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30',
|
||||
'production-gce-c31', 'production-gce-c34',
|
||||
'production-gce-c31', 'production-gce-c34', 'production-gce-c35',
|
||||
// Migration-only canaries: the US-only capacity rollout never touches them either.
|
||||
'production-gce-c17', 'production-gce-c18', 'production-gce-c35',
|
||||
'production-gce-c17', 'production-gce-c18',
|
||||
// US cells at the Asia shape: the 1,000-cap capacity rollout never touches them.
|
||||
'production-gce-c32', 'production-gce-c33'
|
||||
]) {
|
||||
|
||||
@@ -4,10 +4,7 @@ import { requireSameEvidenceCode } from './relay-evidence-code-provenance.mjs'
|
||||
|
||||
// Migration-only by policy: zero hosts and no reservation, so a wave rolls one without
|
||||
// displacing anybody. It enters and must leave migration-only, never general.
|
||||
// C35 is an Asia spare that stays migration-only until a reviewed change promotes it.
|
||||
export const SAME_CAP_MIGRATION_ONLY_CELLS = [
|
||||
'production-gce-c17', 'production-gce-c18', 'production-gce-c35'
|
||||
]
|
||||
export const SAME_CAP_MIGRATION_ONLY_CELLS = ['production-gce-c17', 'production-gce-c18']
|
||||
|
||||
export const SAME_CAP_CELLS = [
|
||||
'production-gce-c7', 'production-gce-c8', 'production-gce-c9', 'production-gce-c10',
|
||||
@@ -16,6 +13,7 @@ export const SAME_CAP_CELLS = [
|
||||
'production-gce-c23', 'production-gce-c24', 'production-gce-c25', 'production-gce-c26',
|
||||
'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30',
|
||||
'production-gce-c31', 'production-gce-c32', 'production-gce-c33', 'production-gce-c34',
|
||||
'production-gce-c35',
|
||||
...SAME_CAP_MIGRATION_ONLY_CELLS
|
||||
]
|
||||
|
||||
|
||||
@@ -136,14 +136,11 @@ test('the wave workflow chains exactly ten serial cell jobs', () => {
|
||||
assert.doesNotMatch(dispatch, /\n cell_11:/)
|
||||
})
|
||||
|
||||
test('lists the C35 spare as migration-only beside C17 and C18, and C30-C34 as general', () => {
|
||||
assert.deepEqual(
|
||||
SAME_CAP_MIGRATION_ONLY_CELLS,
|
||||
['production-gce-c17', 'production-gce-c18', 'production-gce-c35']
|
||||
)
|
||||
test('lists only C17 and C18 as migration-only now that C35 is promoted, and C30-C35 as general', () => {
|
||||
assert.deepEqual(SAME_CAP_MIGRATION_ONLY_CELLS, ['production-gce-c17', 'production-gce-c18'])
|
||||
for (const cellId of [
|
||||
'production-gce-c30', 'production-gce-c31', 'production-gce-c32', 'production-gce-c33',
|
||||
'production-gce-c34'
|
||||
'production-gce-c34', 'production-gce-c35'
|
||||
]) {
|
||||
assert.equal(SAME_CAP_CELLS.includes(cellId), true, cellId)
|
||||
}
|
||||
@@ -221,6 +218,19 @@ test('rolls the migration-only cells but never mixes the two classes in one wave
|
||||
confirmation: `ROLL_RELAY_SAME_CAP ${targetDigest} ${c34Mixed}`,
|
||||
canaryRunId: '42'
|
||||
}), /all general or all migration-only/)
|
||||
// C35 is general once its Asia canary promotes it, so a rollback restores it general.
|
||||
assert.equal(entryAdmission('production-gce-c35'), 'general')
|
||||
assert.equal(selectorWaveDelta('production-gce-c35'), 2)
|
||||
const c35Mixed = 'production-gce-c35,production-gce-c17'
|
||||
assert.throws(() => validateSameCapWave({
|
||||
mode: 'batch-apply',
|
||||
cellIds: c35Mixed,
|
||||
targetDigest,
|
||||
rollbackDigest,
|
||||
drainPaceWindowMs: '300000',
|
||||
confirmation: `ROLL_RELAY_SAME_CAP ${targetDigest} ${c35Mixed}`,
|
||||
canaryRunId: '42'
|
||||
}), /all general or all migration-only/)
|
||||
const c31Mixed = 'production-gce-c31,production-gce-c18'
|
||||
assert.throws(() => validateSameCapWave({
|
||||
mode: 'batch-apply',
|
||||
@@ -669,7 +679,7 @@ test('keeps Asia and migration-only cells on the default pace', () => {
|
||||
)
|
||||
for (const cellId of SAME_CAP_CELLS) {
|
||||
const fast = SAME_CAP_FAST_DRAIN_PACE_CELLS.includes(cellId)
|
||||
const asia = ['c27', 'c28', 'c29', 'c30', 'c31', 'c34'].some(
|
||||
const asia = ['c27', 'c28', 'c29', 'c30', 'c31', 'c34', 'c35'].some(
|
||||
(cell) => cellId === `production-gce-${cell}`
|
||||
)
|
||||
assert.equal(fast, entryAdmission(cellId) === 'general' && !asia, cellId)
|
||||
|
||||
@@ -279,10 +279,9 @@ describe('same-cap roll scripts accept every same-cap cell', () => {
|
||||
const trusted = SAME_CAP_CELLS.filter((cell) => REHOME_SOURCE_CELLS.has(cell))
|
||||
// Only a declared rehome source may roll at a trusted protocol at all; the job refuses
|
||||
// the rest before it plans, and the next test covers them at protocol 0.
|
||||
// The C35 spare is a rehome source that stays migration-only.
|
||||
assert.deepEqual(
|
||||
SAME_CAP_CELLS.filter((cell) => !REHOME_SOURCE_CELLS.has(cell)),
|
||||
SAME_CAP_MIGRATION_ONLY_CELLS.filter((cell) => cell !== 'production-gce-c35')
|
||||
SAME_CAP_MIGRATION_ONLY_CELLS
|
||||
)
|
||||
for (const [cellId, protocol] of trusted.flatMap((cell) => [[cell, 1], [cell, 3]])) {
|
||||
const { cap, pool } = cellShape(cellId)
|
||||
|
||||
@@ -29,7 +29,8 @@ export const FLEET_POOL_CELL_IDS = [
|
||||
'production-gce-c29',
|
||||
'production-gce-c30',
|
||||
'production-gce-c31',
|
||||
'production-gce-c34'
|
||||
'production-gce-c34',
|
||||
'production-gce-c35'
|
||||
]
|
||||
|
||||
export const SHADOW_GATE_THRESHOLDS = {
|
||||
|
||||
@@ -279,6 +279,7 @@ function productionLikeEntries() {
|
||||
...metricSamples({ cellId: 'production-gce-c30', from: '2026-09-20T20:20:00Z', count: 20 }),
|
||||
...metricSamples({ cellId: 'production-gce-c31', from: '2026-09-20T20:20:00Z', count: 20 }),
|
||||
...metricSamples({ cellId: 'production-gce-c34', from: '2026-09-20T20:20:00Z', count: 20 }),
|
||||
...metricSamples({ cellId: 'production-gce-c35', from: '2026-09-20T20:20:00Z', count: 20 }),
|
||||
// One director instance's samples from ten minutes before the drain to the window's end.
|
||||
...directorSamples({ from: '2026-09-20T19:50:00Z', count: 80, payload: {} })
|
||||
]
|
||||
@@ -340,10 +341,10 @@ function gcloudSeam(entries = productionLikeEntries()) {
|
||||
}
|
||||
}
|
||||
|
||||
test('reads every promoted asia-east2 cell as fleet pool, C34 included', () => {
|
||||
test('reads every promoted asia-east2 cell as fleet pool, C35 included', () => {
|
||||
assert.deepEqual(FLEET_POOL_CELL_IDS, [
|
||||
'production-gce-c27', 'production-gce-c28', 'production-gce-c29', 'production-gce-c30',
|
||||
'production-gce-c31', 'production-gce-c34'
|
||||
'production-gce-c31', 'production-gce-c34', 'production-gce-c35'
|
||||
])
|
||||
})
|
||||
|
||||
@@ -365,6 +366,7 @@ test('a healthy roll reads as PASS and names the instance it proved serving', as
|
||||
'fleetPool:production-gce-c30',
|
||||
'fleetPool:production-gce-c31',
|
||||
'fleetPool:production-gce-c34',
|
||||
'fleetPool:production-gce-c35',
|
||||
'nonDrain503Budget'
|
||||
])
|
||||
assert.deepEqual(report.drain, {
|
||||
|
||||
Reference in New Issue
Block a user