Migrating to Cassandra 4.0.x and OpenSearch 1.3.x
This document describes operator-facing changes when moving from the legacy 6.8 line on Cassandra 3.11.x to the modern stack maintained at https://elassandra.org/ (Cassandra 4.0.x + OpenSearch 1.3.x).
There is no supported in-place upgrade of the embedded Lucene indices from the legacy 6.8 line to OpenSearch 1.3. Plan one of:
Rebuild search from Cassandra — use Elassandra’s Cassandra-backed tables as source of truth and recreate indices/mappings on the new cluster (typical for deployments that always index from C*).
Reindex via snapshot/restore — only if you have a compatible snapshot workflow; legacy 6.8 indices are not directly compatible with OpenSearch 1.3 Lucene codecs. Expect a full reindex using an external tool or dual-write period.
HTTP API and clients
OpenSearch 1.3 follows the typeless REST conventions used by the current OpenSearch 1.x line, not the legacy 6.8 APIs.
Remove document types from URLs and mappings and standardize on the single
_docmodel.Use OpenSearch REST clients aligned with OpenSearch 1.3.
Dashboards
The legacy 6.8 dashboard application is not compatible with OpenSearch. Use OpenSearch Dashboards 1.x aligned with your server minor version.
Java runtime
Target runtime is Java 11 (or newer LTS supported by your chosen Cassandra 4.0 and OpenSearch 1.3 patch releases).
Cassandra
All nodes in an Elassandra cluster must run the same Elassandra build (Cassandra 4.0–based).
Review secondary index and schema extension behavior after upgrade; validate rebuild and repair procedures in a staging cluster.
Implementation status (repository)
Component |
Pin / branch (check |
|---|---|
Elassandra application repo |
incloudsio/elassandra (integration branches may track modernization work). |
Cassandra fork |
incloudsio/cassandra — 4.0 line |
OpenSearch port |
Main |
Legacy version verify |
Root Gradle |
Target pins (modern stack)
These values are recorded in buildSrc/version.properties as opensearch_port and lucene_opensearch (they match upstream OpenSearch 1.3.20). The Cassandra 4.0 artifact version tracks server/cassandra/build.xml base.version after scripts/use-cassandra-40-submodule.sh (typically 4.0.20 on branch cassandra-4.0.x-elassandra).
Operator validation (staging)
Exercise rebuild-from-Cassandra or full reindex flows before production; Lucene indices are not upgraded in place from the legacy 6.8 line to OpenSearch 1.3.
Suggested staging checklist
Provision a non-production cluster with the target Elassandra build (same C* + search versions as production).
Snapshot or otherwise record baseline index names, mappings, and critical CQL schemas.
Run your chosen migration path: rebuild indices from Cassandra (nodetool / Elassandra rebuild procedures as documented for your release) or full reindex into fresh OpenSearch 1.3–compatible indices.
Validate search correctness (spot queries, aggregations, per–DC routing if used) and operational metrics (heap, GC, repair).
Roll dashboards and REST clients to OpenSearch 1.3-compatible APIs and retire legacy-only plugins.
Further reading
Cassandra fork inventory (legacy 3.11 line to Apache 4.0.x) — Cassandra-side commit inventory and 4.0 branch strategy.
Cassandra 4.0.x porting playbook — step-by-step patch export, 4.0 clone, and
git amworkflow.Cassandra 4.0 JVM port (Elassandra integration code) — Elassandra Java integration points for Cassandra 4.0.
OpenSearch 1.3.x porting guide (codebase map) — developer map for rebasing onto OpenSearch 1.3.x.
Repository scripts:
scripts/check-cassandra-submodule.sh(version alignment),scripts/use-cassandra-40-submodule.sh(move submodule to Cassandra 4.0),scripts/clone-opensearch-upstream.sh/scripts/opensearch-port-bootstrap.sh(OpenSearch 1.3.20 port branch),scripts/sync-elassandra-to-opensearch-sidecar.sh/scripts/rewrite-elassandra-imports-for-opensearch.sh(copyorg.elassandra.*into the side-car),scripts/build-elassandra-cassandra-jar.sh(Ant Cassandra jar for the side-car classpath),scripts/sync-elassandra-fork-minimal-to-opensearch-sidecar.sh(minimalorg.opensearchfork stubs),scripts/patch-opensearch-forbidden-deps-for-elassandra.sh(temporarily allow Guava in the side-car tree),scripts/opensearch-sidecar-prepare.sh(sync + patches only; no Gradle),scripts/opensearch-sidecar-compile-try.sh(runs:server:compileJava,:test:framework:compileJava, and:server:compileTestJavain the side-car by default; setOPENSEARCH_SIDECAR_TASKS=:server:compileJavato skip test compilation; usesgradle/opensearch-sidecar-elassandra.init.gradleandGRADLE_OPTS),scripts/opensearch-sidecar-test-try.sh(optional:server:testslice; integration tests expect full Elassandra bootstrap),scripts/export-elassandra-mapper-fork-for-opensearch-merge.sh(export forkedindex/mapperfor merge),scripts/print-opensearch-port-pins.sh(target pins).
Packaging (when the OpenSearch port ships)
Revisit tarball, deb, and rpm naming and keep user-visible branding aligned with OpenSearch.
Rebuild container images from the merged tree; re-check JVM flags for Cassandra 4.0 plus the embedded search engine.
Pins:
./scripts/print-opensearch-port-pins.shprintsopensearch_port/lucene_opensearchfrombuildSrc/version.properties; full artifact convergence is tracked in OpenSearch 1.3.x porting guide (codebase map).