mirror of
https://github.com/saltbo/zpan.git
synced 2026-09-01 15:49:00 +08:00
fix(stats): validate snapshot rollup markers by scope (#511)
This commit is contained in:
@@ -866,11 +866,15 @@ export function buildValidationSql(now = new Date()): string {
|
||||
AND json_extract(metadata, '$.quality') IN ('exact', 'lower_bound')
|
||||
ELSE 0 END = 1
|
||||
),
|
||||
counter_markers AS MATERIALIZED (
|
||||
SELECT bucket_start
|
||||
completion_markers AS MATERIALIZED (
|
||||
SELECT bucket_start, json_extract(metadata, '$.scope') AS scope
|
||||
FROM valid_rollups
|
||||
WHERE metric_key = 'stats.rollup_run' AND org_id = '' AND dimension_key = '' AND dimension_value = ''
|
||||
AND json_extract(metadata, '$.scope') IN ('counters', 'full')
|
||||
),
|
||||
counter_markers AS MATERIALIZED (
|
||||
SELECT bucket_start
|
||||
FROM completion_markers
|
||||
WHERE scope IN ('counters', 'full')
|
||||
),
|
||||
counter_rows AS MATERIALIZED (
|
||||
SELECT result.*
|
||||
@@ -903,7 +907,16 @@ SELECT json_object(
|
||||
SELECT COUNT(DISTINCT r.bucket_start)
|
||||
FROM valid_rollups r
|
||||
WHERE r.metric_key <> 'stats.rollup_run'
|
||||
AND NOT EXISTS (SELECT 1 FROM counter_markers marker WHERE marker.bucket_start = r.bucket_start)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM completion_markers marker
|
||||
WHERE marker.bucket_start = r.bucket_start
|
||||
AND (
|
||||
(json_extract(r.metadata, '$.scope') = 'counters' AND marker.scope IN ('counters', 'full'))
|
||||
OR (json_extract(r.metadata, '$.scope') = 'snapshots' AND marker.scope IN ('snapshots', 'full'))
|
||||
OR (json_extract(r.metadata, '$.scope') = 'full' AND marker.scope = 'full')
|
||||
)
|
||||
)
|
||||
),
|
||||
'lowerBoundRollups', (
|
||||
SELECT COUNT(*) FROM valid_rollups WHERE json_extract(metadata, '$.quality') = 'lower_bound'
|
||||
|
||||
@@ -225,6 +225,30 @@ describe('admin stats backfill', () => {
|
||||
{ outcome: 'completed', bytes: 512, value: 1 },
|
||||
{ outcome: 'failed', bytes: 0, value: 1 },
|
||||
])
|
||||
|
||||
db.exec(`
|
||||
INSERT INTO stats_rollups_hourly VALUES
|
||||
('current-snapshot-marker', ${currentHourMs}, '', 'stats.rollup_run', '', '', 1, 0, 0,
|
||||
'{"version":3,"scope":"snapshots","quality":"exact"}', ${currentHourMs}),
|
||||
('current-snapshot-gauge', ${currentHourMs}, '', 'storage.used', '', '', 0, 1024, 0,
|
||||
'{"version":3,"scope":"snapshots","quality":"exact"}', ${currentHourMs});
|
||||
`)
|
||||
const snapshotSummary = Object.assign(
|
||||
{},
|
||||
...splitSqlStatements(validationSql).map((statement) =>
|
||||
JSON.parse((db.prepare(statement).get() as { summary: string }).summary),
|
||||
),
|
||||
) as Record<string, number>
|
||||
expect(snapshotSummary.orphanRollupBuckets).toBe(0)
|
||||
|
||||
db.prepare("DELETE FROM stats_rollups_hourly WHERE id = 'current-snapshot-marker'").run()
|
||||
const missingMarkerSummary = Object.assign(
|
||||
{},
|
||||
...splitSqlStatements(validationSql).map((statement) =>
|
||||
JSON.parse((db.prepare(statement).get() as { summary: string }).summary),
|
||||
),
|
||||
) as Record<string, number>
|
||||
expect(missingMarkerSummary.orphanRollupBuckets).toBe(1)
|
||||
db.close()
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user