Merge pull request #3682 from backstage/freben/batch-markers

catalog-backend: batch the writing of statuses after refreshes
This commit is contained in:
Fredrik Adelöw
2020-12-11 15:00:56 +01:00
committed by GitHub
7 changed files with 32 additions and 21 deletions
@@ -70,7 +70,7 @@ export class DatabaseLocationsCatalog implements LocationsCatalog {
async logUpdateSuccess(
locationId: string,
entityName?: string,
entityName?: string | string[],
): Promise<void> {
await this.database.addLocationUpdateLogEvent(
locationId,
+4 -1
View File
@@ -80,7 +80,10 @@ export type LocationsCatalog = {
locations(): Promise<LocationResponse[]>;
location(id: string): Promise<LocationResponse>;
locationHistory(id: string): Promise<LocationUpdateLogEvent[]>;
logUpdateSuccess(locationId: string, entityName?: string): Promise<void>;
logUpdateSuccess(
locationId: string,
entityName?: string | string[],
): Promise<void>;
logUpdateFailure(
locationId: string,
error?: Error,
@@ -432,7 +432,7 @@ export class CommonDatabase implements Database {
async addLocationUpdateLogEvent(
locationId: string,
status: DatabaseLocationUpdateLogStatus,
entityName?: string,
entityName?: string | string[],
message?: string,
): Promise<void> {
// Remove log entries older than a day
@@ -442,14 +442,20 @@ export class CommonDatabase implements Database {
.where('created_at', '<', cutoff.toISOString())
.del();
await this.database<DatabaseLocationUpdateLogEvent>(
'location_update_log',
).insert({
status,
location_id: locationId,
entity_name: entityName,
message,
});
const items: Partial<DatabaseLocationUpdateLogEvent>[] = [entityName]
.flat()
.map(n => ({
status,
location_id: locationId,
entity_name: n,
message,
}));
for (const chunk of lodash.chunk(items, BATCH_SIZE)) {
await this.database<DatabaseLocationUpdateLogEvent>(
'location_update_log',
).insert(chunk);
}
}
private async updateEntitiesSearch(
@@ -208,7 +208,7 @@ export type Database = {
addLocationUpdateLogEvent(
locationId: string,
status: DatabaseLocationUpdateLogStatus,
entityName?: string,
entityName?: string | string[],
message?: string,
): Promise<void>;
};
@@ -372,10 +372,9 @@ describe('HigherOrderOperations', () => {
'123',
undefined,
);
expect(locationsCatalog.logUpdateSuccess).toHaveBeenCalledWith(
'123',
expect(locationsCatalog.logUpdateSuccess).toHaveBeenCalledWith('123', [
'c1',
);
]);
});
it('logs unsuccessful updates when reader fails', async () => {
@@ -188,12 +188,10 @@ export class HigherOrderOperations implements HigherOrderOperation {
this.logger.info(`Posting update success markers`);
for (const entity of readerOutput.entities) {
await this.locationsCatalog.logUpdateSuccess(
location.id,
entity.entity.metadata.name,
);
}
await this.locationsCatalog.logUpdateSuccess(
location.id,
readerOutput.entities.map(e => e.entity.metadata.name),
);
this.logger.info(
`Wrote ${readerOutput.entities.length} entities from location ${