cube-js/cube · error

contextToDataSourceId has been deprecated and removed. Use c

Error message

contextToDataSourceId has been deprecated and removed. Use contextToOrchestratorId instead.

What it means

The contextToDataSourceId option was deprecated and removed from Cube Server. Its constructor now hard-fails if that option is present, directing users to contextToOrchestratorId, which controls per-context orchestrator (and implicitly data source) routing.

Source

Thrown at packages/cubejs-server-core/src/core/server.ts:220

    this.scheduledRefreshTimeZones = wrapToFnIfNeeded(this.options.scheduledRefreshTimeZones || []);

    this.compilerCache = new LRUCache<string, CompilerApi>({
      max: this.options.compilerCacheSize || 250,
      ttl: this.options.maxCompilerCacheKeepAlive,
      updateAgeOnGet: this.options.updateCompilerCacheKeepAlive,
      // needed to clear the setInterval timer for proactive cache internal cleanups
      dispose: (v) => v.dispose(),
    });

    if (this.options.contextToAppId) {
      this.contextToAppId = this.options.contextToAppId;
      this.standalone = false;
    }

    this.contextAcceptor = this.createContextAcceptor();

    if (this.options.contextToDataSourceId) {
      throw new Error('contextToDataSourceId has been deprecated and removed. Use contextToOrchestratorId instead.');
    }

    this.contextToOrchestratorId = this.options.contextToOrchestratorId || (() => 'STANDALONE');
    this.contextToCubeStoreRouterId = this.options.contextToCubeStoreRouterId;

    // proactively free up old cache values occasionally
    if (this.options.maxCompilerCacheKeepAlive) {
      this.maxCompilerCacheKeep = setInterval(
        () => this.compilerCache.purgeStale(),
        this.options.maxCompilerCacheKeepAlive
      );
    }

    this.startScheduledRefreshTimer();

    this.event = async (event, props: LoggerFnParams) => {
      if (!this.options.telemetry) {
        return;

View on GitHub (pinned to 7d981676b3)

Solutions

  1. Remove contextToDataSourceId from the server options
  2. Implement contextToOrchestratorId(options) returning a stable per-context/per-tenant orchestrator id instead
  3. If data source routing is needed, return a data-source-derived id from contextToOrchestratorId
  4. Consult the Cube docs on multi-tenancy for the current recommended pattern

Example fix

// before
new CubeServer({
  contextToDataSourceId: (ctx) => ctx.tenantId
});
// after
new CubeServer({
  contextToOrchestratorId: (ctx) => ctx.tenantId
});
Defensive patterns

Strategy: validation

When it happens

Trigger: Passing contextToDataSourceId in the options object when constructing the Cube server core (new CubeServer / CubeCore), typically carried over from an older codebase.

Common situations: Upgrading Cube from a version where contextToDataSourceId was valid; copy-pasted config from old examples or blog posts; multi-tenant setups that routed orchestrators per data source via the old hook.

Related errors


AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02). Data as JSON: /api/errors/aad02bb42d63c241. Report an issue: GitHub.