Skip to content

Commit 65338c1

Browse files
authored
Persist priority config (#52)
* Persist priority config * Remove override values
1 parent 7bd3553 commit 65338c1

File tree

3 files changed

+130
-19
lines changed

3 files changed

+130
-19
lines changed

backend/src/db/schema.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,16 @@ export const balanceVerification = sqliteTable('balance_verification', {
102102

103103
export type BalanceVerification = typeof balanceVerification.$inferSelect;
104104
export type NewBalanceVerification = typeof balanceVerification.$inferInsert;
105+
106+
// Queue Priority Configs - stores the latest priority configuration for UMP and DMP queues
107+
export const queuePriorityConfigs = sqliteTable('queue_priority_configs', {
108+
id: integer('id').primaryKey({ autoIncrement: true }),
109+
queueType: text('queue_type').notNull().unique(), // 'ump' or 'dmp'
110+
priorityType: text('priority_type').notNull(), // 'Config', 'OverrideConfig', or 'Disabled'
111+
lastUpdated: integer('last_updated', { mode: 'timestamp' })
112+
.notNull()
113+
.$defaultFn(() => new Date()),
114+
});
115+
116+
export type QueuePriorityConfig = typeof queuePriorityConfigs.$inferSelect;
117+
export type NewQueuePriorityConfig = typeof queuePriorityConfigs.$inferInsert;

backend/src/routes/updates.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { desc, eq, and } from 'drizzle-orm';
22
import { Request, Response, RequestHandler } from 'express';
33

44
import { db } from '../db';
5-
import { migrationStages, xcmMessageCounters, balanceVerification } from '../db/schema';
5+
import { migrationStages, xcmMessageCounters, balanceVerification, queuePriorityConfigs } from '../db/schema';
66
import { Log } from '../logging/Log';
77
import { PalletMigrationCache } from '../services/cache/PalletMigrationCache';
88
import { TimeInStageCache } from '../services/cache/TimeInStageCache';
@@ -230,6 +230,32 @@ export const updatesHandler: RequestHandler = async (req: Request, res: Response
230230
}
231231
}
232232
}
233+
234+
// Handle UMP queue priority initial state
235+
if (requestedEvents.includes('umpQueuePriority')) {
236+
const umpPriority = await db.query.queuePriorityConfigs.findFirst({
237+
where: eq(queuePriorityConfigs.queueType, 'ump'),
238+
});
239+
if (umpPriority) {
240+
sendEvent('umpQueuePriority', {
241+
type: umpPriority.priorityType,
242+
timestamp: umpPriority.lastUpdated.toISOString(),
243+
});
244+
}
245+
}
246+
247+
// Handle DMP queue priority initial state
248+
if (requestedEvents.includes('dmpQueuePriority')) {
249+
const dmpPriority = await db.query.queuePriorityConfigs.findFirst({
250+
where: eq(queuePriorityConfigs.queueType, 'dmp'),
251+
});
252+
if (dmpPriority) {
253+
sendEvent('dmpQueuePriority', {
254+
type: dmpPriority.priorityType,
255+
timestamp: dmpPriority.lastUpdated.toISOString(),
256+
});
257+
}
258+
}
233259
} catch (error) {
234260
logger.error('Error sending initial state:', error);
235261
}

backend/src/services/BlockProcessor.ts

Lines changed: 90 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ type AhEventEnum = AhSystemEvent['event'];
1515
type AhMigratorEvents = Extract<AhEventEnum, { type: 'AhMigrator' }>['value'];
1616
type BatchProcessedEvent = Extract<AhMigratorEvents, { type: 'BatchProcessed' }>['value'];
1717

18+
// Queue priority config types
19+
type QueuePriorityConfig = Awaited<ReturnType<RelayChainApi['query']['RcMigrator']['AhUmpQueuePriorityConfig']['getValue']>>;
20+
1821
import { eq, desc, and } from 'drizzle-orm';
1922

2023
import { sql } from 'drizzle-orm';
@@ -27,6 +30,7 @@ import {
2730
dmpQueueEvents,
2831
umpQueueEvents,
2932
balanceVerification,
33+
queuePriorityConfigs,
3034
} from '../db/schema';
3135
import { Log } from '../logging/Log';
3236
import { getCurrentStageForPallet, getPalletFromStage, normalizeEventPalletName } from '../util/stageToPalletMapping';
@@ -1022,22 +1026,56 @@ export class BlockProcessor {
10221026
}
10231027

10241028
private async handleUmpQueuePriority(
1025-
queuePriority: any,
1029+
queuePriority: QueuePriorityConfig,
10261030
item: QueueItem
10271031
): Promise<void> {
10281032
try {
10291033
const priorityType = queuePriority.type;
10301034

1031-
eventService.emit('umpQueuePriority', {
1032-
type: priorityType,
1033-
timestamp: new Date(item.timestamp!).toISOString(),
1035+
const existing = await db.query.queuePriorityConfigs.findFirst({
1036+
where: eq(queuePriorityConfigs.queueType, 'ump'),
10341037
});
10351038

1036-
Log.service({
1037-
service: 'UMP Queue Priority',
1038-
action: 'UMP queue priority config retrieved',
1039-
details: { type: priorityType },
1040-
});
1039+
// Only update if this is the first time, or if the priority type has actually changed
1040+
if (!existing) {
1041+
// First time - insert new record
1042+
await db.insert(queuePriorityConfigs).values({
1043+
queueType: 'ump',
1044+
priorityType,
1045+
lastUpdated: new Date(item.timestamp!),
1046+
});
1047+
1048+
eventService.emit('umpQueuePriority', {
1049+
type: priorityType,
1050+
timestamp: new Date(item.timestamp!).toISOString(),
1051+
});
1052+
1053+
Log.service({
1054+
service: 'UMP Queue Priority',
1055+
action: 'UMP queue priority config initialized',
1056+
details: { type: priorityType },
1057+
});
1058+
} else if (existing.priorityType !== priorityType) {
1059+
// Priority type has changed - update existing record
1060+
await db.update(queuePriorityConfigs)
1061+
.set({
1062+
priorityType,
1063+
lastUpdated: new Date(item.timestamp!),
1064+
})
1065+
.where(eq(queuePriorityConfigs.queueType, 'ump'));
1066+
1067+
eventService.emit('umpQueuePriority', {
1068+
type: priorityType,
1069+
timestamp: new Date(item.timestamp!).toISOString(),
1070+
});
1071+
1072+
Log.service({
1073+
service: 'UMP Queue Priority',
1074+
action: 'UMP queue priority config changed',
1075+
details: { type: priorityType },
1076+
});
1077+
}
1078+
// else: priority type hasn't changed, do nothing
10411079
} catch (error) {
10421080
Log.service({
10431081
service: 'UMP Queue Priority',
@@ -1048,22 +1086,56 @@ export class BlockProcessor {
10481086
}
10491087

10501088
private async handleDmpQueuePriority(
1051-
queuePriority: any,
1089+
queuePriority: QueuePriorityConfig,
10521090
item: QueueItem
10531091
): Promise<void> {
10541092
try {
10551093
const priorityType = queuePriority.type;
10561094

1057-
eventService.emit('dmpQueuePriority', {
1058-
type: priorityType,
1059-
timestamp: new Date(item.timestamp!).toISOString(),
1095+
const existing = await db.query.queuePriorityConfigs.findFirst({
1096+
where: eq(queuePriorityConfigs.queueType, 'dmp'),
10601097
});
10611098

1062-
Log.service({
1063-
service: 'DMP Queue Priority',
1064-
action: 'DMP queue priority config retrieved',
1065-
details: { type: priorityType },
1066-
});
1099+
// Only update if this is the first time, or if the priority type has actually changed
1100+
if (!existing) {
1101+
// First time - insert new record
1102+
await db.insert(queuePriorityConfigs).values({
1103+
queueType: 'dmp',
1104+
priorityType,
1105+
lastUpdated: new Date(item.timestamp!),
1106+
});
1107+
1108+
eventService.emit('dmpQueuePriority', {
1109+
type: priorityType,
1110+
timestamp: new Date(item.timestamp!).toISOString(),
1111+
});
1112+
1113+
Log.service({
1114+
service: 'DMP Queue Priority',
1115+
action: 'DMP queue priority config initialized',
1116+
details: { type: priorityType },
1117+
});
1118+
} else if (existing.priorityType !== priorityType) {
1119+
// Priority type has changed - update existing record
1120+
await db.update(queuePriorityConfigs)
1121+
.set({
1122+
priorityType,
1123+
lastUpdated: new Date(item.timestamp!),
1124+
})
1125+
.where(eq(queuePriorityConfigs.queueType, 'dmp'));
1126+
1127+
eventService.emit('dmpQueuePriority', {
1128+
type: priorityType,
1129+
timestamp: new Date(item.timestamp!).toISOString(),
1130+
});
1131+
1132+
Log.service({
1133+
service: 'DMP Queue Priority',
1134+
action: 'DMP queue priority config changed',
1135+
details: { type: priorityType },
1136+
});
1137+
}
1138+
// else: priority type hasn't changed, do nothing
10671139
} catch (error) {
10681140
Log.service({
10691141
service: 'DMP Queue Priority',

0 commit comments

Comments
 (0)