From 0872c8c253d2f61934b7b64267b50883b7387591 Mon Sep 17 00:00:00 2001 From: "Marvel.Codes" Date: Thu, 26 Mar 2026 09:29:05 +0100 Subject: [PATCH 1/2] refactor: remove redundant initialized flag from DatabaseSessionService The initPromise field already tracks initialization state, making the separate boolean flag unnecessary. Simplifies the deduplication logic. --- .../src/sessions/database-session-service.ts | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/packages/adk/src/sessions/database-session-service.ts b/packages/adk/src/sessions/database-session-service.ts index 9f609b21..f5e99bf9 100644 --- a/packages/adk/src/sessions/database-session-service.ts +++ b/packages/adk/src/sessions/database-session-service.ts @@ -75,7 +75,6 @@ export interface DatabaseSessionServiceConfig { export class DatabaseSessionService extends BaseSessionService { private db: Kysely; - private initialized = false; private initPromise: Promise | null = null; constructor(config: DatabaseSessionServiceConfig) { @@ -95,25 +94,18 @@ export class DatabaseSessionService extends BaseSessionService { * Uses promise deduplication so concurrent callers share a single initialization. */ private initializeDatabase(): Promise { - if (this.initialized) { - return Promise.resolve(); - } if (this.initPromise) { return this.initPromise; } - const promise = this._doInitialize(); - this.initPromise = promise; + this.initPromise = this._doInitialize(); // Clear the promise on failure to allow retries. - promise.catch(() => { - // Avoid race conditions if a new initialization has started. - if (this.initPromise === promise) { - this.initPromise = null; - } + this.initPromise.catch(() => { + this.initPromise = null; }); - return promise; + return this.initPromise; } private async _doInitialize(): Promise { @@ -204,7 +196,6 @@ export class DatabaseSessionService extends BaseSessionService { .column("user_id") .execute(); - this.initialized = true; } catch (error) { console.error("Error initializing database:", error); throw error; @@ -215,9 +206,7 @@ export class DatabaseSessionService extends BaseSessionService { * Ensure database is initialized before any operation */ private async ensureInitialized(): Promise { - if (!this.initialized) { - await this.initializeDatabase(); - } + await this.initializeDatabase(); } private generateSessionId(): string { From a8d7163525864b910db881561fb1da371b3f3789 Mon Sep 17 00:00:00 2001 From: "Marvel.Codes" Date: Thu, 26 Mar 2026 09:32:41 +0100 Subject: [PATCH 2/2] fix: restore defensive guard in catch handler, add changeset Restore the identity check in the .catch() handler to guard against theoretical race conditions. Add missing changeset for the PR. --- .changeset/remove-initialized-flag.md | 5 +++++ packages/adk/src/sessions/database-session-service.ts | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 .changeset/remove-initialized-flag.md diff --git a/.changeset/remove-initialized-flag.md b/.changeset/remove-initialized-flag.md new file mode 100644 index 00000000..70a88327 --- /dev/null +++ b/.changeset/remove-initialized-flag.md @@ -0,0 +1,5 @@ +--- +"@iqai/adk": patch +--- + +refactor: remove redundant initialized flag from DatabaseSessionService diff --git a/packages/adk/src/sessions/database-session-service.ts b/packages/adk/src/sessions/database-session-service.ts index f5e99bf9..7f033261 100644 --- a/packages/adk/src/sessions/database-session-service.ts +++ b/packages/adk/src/sessions/database-session-service.ts @@ -98,14 +98,17 @@ export class DatabaseSessionService extends BaseSessionService { return this.initPromise; } - this.initPromise = this._doInitialize(); + const promise = this._doInitialize(); + this.initPromise = promise; // Clear the promise on failure to allow retries. - this.initPromise.catch(() => { - this.initPromise = null; + promise.catch(() => { + if (this.initPromise === promise) { + this.initPromise = null; + } }); - return this.initPromise; + return promise; } private async _doInitialize(): Promise {