mem0ai/mem0 · warning · Error

Baidu Mochow table '${this.tableName}' was not ${what} after

Error message

Baidu Mochow table '${this.tableName}' was not ${what} after ${(TABLE_POLL_ATTEMPTS * TABLE_POLL_INTERVAL_MS) / 1000}s.

What it means

After creating or dropping the Mochow table, pollTable repeatedly calls descTable until a caller-supplied settled() predicate confirms the target state, sleeping TABLE_POLL_INTERVAL_MS between attempts. If the table has not reached the state after TABLE_POLL_ATTEMPTS attempts, it throws, naming the table, the expected state ('created'/'dropped'), and the total wait in seconds. This handles Mochow's eventually-consistent table lifecycle.

Source

Thrown at mem0-ts/src/oss/src/vector_stores/baidu.ts:305

  private filterOf(filters?: SearchFilters): string | undefined {
    return filters && Object.keys(filters).length > 0
      ? this.buildFilter(filters)
      : undefined;
  }

  private async pollTable(
    client: MochowClient,
    settled: (response: DescTableResponse) => boolean,
    what: string,
  ): Promise<void> {
    for (let attempt = 0; attempt < TABLE_POLL_ATTEMPTS; attempt++) {
      if (settled(await client.descTable(this.databaseName, this.tableName))) {
        return;
      }
      await sleep(TABLE_POLL_INTERVAL_MS);
    }

    throw new Error(
      `Baidu Mochow table '${this.tableName}' was not ${what} after ${(TABLE_POLL_ATTEMPTS * TABLE_POLL_INTERVAL_MS) / 1000}s.`,
    );
  }

  private async ensureTable(): Promise<void> {
    const sdk = await this.loadSdk();
    const client = await this.ensureClient();
    const { ServerErrCode, TableState } = sdk;

    check(
      await client.createDatabase(this.databaseName),
      `createDatabase '${this.databaseName}'`,
      ServerErrCode.DBAlreadyExist,
    );

    const created = check(
      await client.createTable({
        ...this.ns,

View on GitHub (pinned to 001c235229)

Solutions

  1. Simply retry constructing Memory / re-running the operation: the table usually settles shortly after the timeout.
  2. If it persists, inspect the table state in the Baidu console and let provisioning finish or clear a stuck state manually.
  3. Avoid drop/recreate churn of the same table name in quick succession.
Defensive patterns

Strategy: retry

Try / catch

async function withTablePollRetry(init: () => Promise<void>, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    try { await init(); return; }
    catch (e) {
      if (e instanceof Error && /was not .* after \d+s/.test(e.message)) { await new Promise(r => setTimeout(r, 5000)); continue; }
      throw e;
    }
  }
  throw new Error('Baidu table never settled');
}

Prevention

When it happens

Trigger: First use of the Baidu store where table creation is still propagating on a slow/busy cluster; dropping then immediately recreating the same table; Baidu service degradation making descTable return stale states for the whole window.

Common situations: Slow Baidu regions or heavy provisioning load; concurrent instances racing create/drop of the same table; SDK/service version drift in state reporting.

Related errors


AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15). Data as JSON: /api/errors/e9dec24a7da7c126. Report an issue: GitHub.