Skip to content

Upgrading to 2.1.1

This page covers what you need to know when upgrading to Quine Enterprise 2.1.1.

What's New

  • Cluster-wide ingests — a single API call now defines an ingest that runs across the whole cluster. The cluster splits the source into partitions, distributes them, and rebalances as load shifts, with nothing to configure per member. Partitions fill dedicated ingest hosts and idle hot spares before taking capacity from members serving the graph, and records route straight to the member owning the graph node they write. A dry-run :plan shows how an ingest would be partitioned and placed, and reports anything it would refuse, before you create it.

  • Background queries and scheduled jobs — run long or recurring ad-hoc queries beyond the limits of a synchronous request. Background queries survive request and page timeouts, report status throughout, and can be cancelled on demand; results stream to any supported destination (Kafka, Kinesis, SNS, HTTP, Cypher, files), or to none for effect-only runs. Scheduled jobs fire on a fixed interval or wall-clock time, hourly through monthly, in any IANA time zone, survive restarts, and re-fire interrupted runs.

  • Graph feeds via API and recipes — graph feeds now have an API endpoint and are supported in recipes, in addition to being configurable from the Exploration UI.

  • Supernode mitigation for standing query state — supernode mitigation now extends to standing query state, not only to node data.

  • Streams page rollup — the Streams page shows one row per ingest stream, with statistics summed across the members running it, matching the Dashboard. Rows expand to per-member detail.

  • Resizable result columns — Exploration UI result table columns are drag-resizable, and long values, arrays, and objects stay on one line with the full value shown on hover.

For the full list of changes, see the Release Notes.

Breaking Changes

Full Cluster Restart Required

2.1.1 changes how cluster-wide operations, such as creating or deleting a standing query, are relayed and acknowledged between members, so that they complete and report their own result even when a message between members is dropped, and are applied once rather than re-run. Members running 2.1.0 and members running 2.1.1 disagree about this exchange, so upgrading a cluster to 2.1.1 requires a one-time full cluster restart. Stop every member, then start every member on 2.1.1. A rolling, member-by-member upgrade is not supported for this transition.

This is a separate restart from the one required when moving off 2.0.x, described in Upgrading to 2.1.0. A cluster already running 2.1.0 still needs a full restart to reach 2.1.1.

If you deploy with Helm, scale the cluster to 0 members and back up, following the Helm chart quickstart.

New Cassandra Tables

Extending supernode mitigation to standing query state adds two tables to the Cassandra schema, sq_edge_contributions and sq_part_subscribers. Quine Enterprise creates them at startup when should-create-tables is enabled, but that setting is a development convenience and is not recommended for production. If Quine Enterprise connects with credentials that cannot issue DDL, create both tables before starting the upgraded version, in each keyspace you use:

CREATE TABLE sq_edge_contributions (
    this_quine_id blob,
    standing_query_id uuid,
    standing_query_part_id uuid,
    type text,
    direction tinyint,
    that_quine_id blob,
    contribution blob,
    PRIMARY KEY (this_quine_id, standing_query_id, standing_query_part_id, type, direction, that_quine_id)
);

CREATE TABLE sq_part_subscribers (
    this_quine_id blob,
    standing_query_id uuid,
    standing_query_part_id uuid,
    type text,
    direction tinyint,
    that_quine_id blob,
    PRIMARY KEY (this_quine_id, standing_query_id, standing_query_part_id, type, direction, that_quine_id)
);

See the Cassandra Persistor page for the full schema.

Behavior Changes

toLower and toUpper Are Locale-Independent

The Cypher toLower and toUpper functions previously used the JVM's default locale, which meant the same query could return different results depending on the locale of the host running it. Both functions now use a fixed, locale-independent mapping.

The practical difference appears in locales with special case rules. Under a Turkish default locale, for example, toUpper("i") previously returned İ (dotted capital I) and now returns I. If you have data or queries that depended on the previous locale-sensitive behavior, review them before upgrading. Deployments running under an English or root locale see no change.

Exploration UI Hidden Without Graph Read Permission

The Exploration UI is now hidden for roles that lack graph read permission, rather than being shown with every control disabled. Users in those roles no longer see the page in navigation. Their permissions are unchanged; only the presentation differs. See RBAC Setup for the role and capability tables.