From 8aec4a02cb79a68f1d00c5250555ba097e7a6f62 Mon Sep 17 00:00:00 2001 From: Arne-Christian Rundereim Date: Tue, 1 Aug 2023 23:59:09 +0200 Subject: [PATCH] fix: EventStore#getMaxRevisionId can return null (#4384) In a new fresh Unleash instance with cache enabled this can cause feature toggles to never get updated. We saw in our client that the ETag was ETag: "60e35fba:null" Which looked incorrect for us. I also did manual testing and if the andWhere had a value of largerThan higher than whatever the id was then we would get back { max: null }. This should fix that issue. --- src/lib/db/event-store.ts | 2 +- .../features/feature-toggle/configuration-revision-service.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/db/event-store.ts b/src/lib/db/event-store.ts index 9cb1c2739c..f413e1f4ca 100644 --- a/src/lib/db/event-store.ts +++ b/src/lib/db/event-store.ts @@ -162,7 +162,7 @@ class EventStore implements IEventStore { ) .andWhere('id', '>=', largerThan) .first(); - return row ? row.max : -1; + return row?.max ?? 0; } async delete(key: number): Promise { diff --git a/src/lib/features/feature-toggle/configuration-revision-service.ts b/src/lib/features/feature-toggle/configuration-revision-service.ts index b3b229f2cc..3c145bc60a 100644 --- a/src/lib/features/feature-toggle/configuration-revision-service.ts +++ b/src/lib/features/feature-toggle/configuration-revision-service.ts @@ -18,10 +18,11 @@ export default class ConfigurationRevisionService extends EventEmitter { super(); this.logger = getLogger('configuration-revision-service.ts'); this.eventStore = eventStore; + this.revisionId = 0; } async getMaxRevisionId(): Promise { - if (this.revisionId) { + if (this.revisionId > 0) { return this.revisionId; } else { return this.updateMaxRevisionId();