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
- Simply retry constructing Memory / re-running the operation: the table usually settles shortly after the timeout.
- If it persists, inspect the table state in the Baidu console and let provisioning finish or clear a stuck state manually.
- 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
- Wrap first-time Baidu initialization in a retry wrapper sized to provisioning lag.
- Pre-create tables ahead of deploy time so runtime never waits on propagation.
- Do not drop and immediately recreate the same table name in automated flows.
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
- Baidu Mochow ${action} failed (code ${response.code}): ${res
- Baidu Mochow table '${label}' exists but is missing the id/d
- LLM extraction failed: ${e}
- Baidu vector store requires a non-empty '${name}' config val
- Invalid filter key: ${key}
AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15).
Data as JSON: /api/errors/e9dec24a7da7c126.
Report an issue: GitHub.