feat(plugins): handle granular disk and partition invalidation in Mercure listener
parent
fb437fd8a9
commit
0cba5933e4
|
|
@ -143,16 +143,49 @@ export class PluginService {
|
|||
const disk = data.disk ?? data.disk_number ?? data.diskNumber;
|
||||
const part = data.partition ?? data.partition_number ?? data.partitionNumber;
|
||||
|
||||
if (data.clientId !== undefined && data.clientId !== null) {
|
||||
this.setPluginStatus(data.plugin, String(data.clientId), data.status);
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.setPartitionPluginStatus(data.plugin, String(data.clientId), Number(disk), Number(part), data.status);
|
||||
const clearEntriesForPrefix = (prefix: string) => {
|
||||
for (const key of Array.from(this.clientPluginStatusMap.keys())) {
|
||||
if (key.startsWith(prefix)) {
|
||||
this.clientPluginStatusMap.delete(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data.clientUuid) {
|
||||
this.setPluginStatus(data.plugin, data.clientUuid, data.status);
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.setPartitionPluginStatus(data.plugin, data.clientUuid, Number(disk), Number(part), data.status);
|
||||
};
|
||||
|
||||
if (data.status === 'NONE') {
|
||||
if (data.clientId !== undefined && data.clientId !== null) {
|
||||
const idStr = String(data.clientId);
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.clientPluginStatusMap.delete(this.getPartitionStatusKey(data.plugin, idStr, Number(disk), Number(part)));
|
||||
} else if (disk !== undefined && disk !== null) {
|
||||
clearEntriesForPrefix(`${data.plugin}:${idStr}:${disk}:`);
|
||||
} else {
|
||||
this.clientPluginStatusMap.delete(this.getStatusKey(data.plugin, idStr));
|
||||
clearEntriesForPrefix(`${data.plugin}:${idStr}:`);
|
||||
}
|
||||
}
|
||||
if (data.clientUuid) {
|
||||
const uuidStr = data.clientUuid;
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.clientPluginStatusMap.delete(this.getPartitionStatusKey(data.plugin, uuidStr, Number(disk), Number(part)));
|
||||
} else if (disk !== undefined && disk !== null) {
|
||||
clearEntriesForPrefix(`${data.plugin}:${uuidStr}:${disk}:`);
|
||||
} else {
|
||||
this.clientPluginStatusMap.delete(this.getStatusKey(data.plugin, uuidStr));
|
||||
clearEntriesForPrefix(`${data.plugin}:${uuidStr}:`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (data.clientId !== undefined && data.clientId !== null) {
|
||||
this.setPluginStatus(data.plugin, String(data.clientId), data.status);
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.setPartitionPluginStatus(data.plugin, String(data.clientId), Number(disk), Number(part), data.status);
|
||||
}
|
||||
}
|
||||
if (data.clientUuid) {
|
||||
this.setPluginStatus(data.plugin, data.clientUuid, data.status);
|
||||
if (disk !== undefined && disk !== null && part !== undefined && part !== null) {
|
||||
this.setPartitionPluginStatus(data.plugin, data.clientUuid, Number(disk), Number(part), data.status);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue