Performance tuning for the OpenSearch integration

Use these tools and guidelines to maintain the OpenSearch integration and understand how it behaves in production. For setup instructions, see Integrate OpenSearch with Hyper-Converged Database (HCD). For monitoring, see Monitor the OpenSearch integration.

Consistency level upgrade for indexed tables

To keep HCD and OpenSearch consistent, the integration automatically upgrades certain write consistency levels to QUORUM for tables with OpenSearch indexes. This prevents hinted handoff from indexing stale data.

The integration upgrades the following consistency levels to QUORUM: ANY, ONE, and LOCAL_ONE.

When a write succeeds at ANY, ONE, or LOCAL_ONE, the coordinator can acknowledge it before a quorum of replicas receives it. The integration then performs a read-back at QUORUM to fetch the complete row for indexing. Without the consistency level upgrade, the read-back can return stale or missing data and index the wrong values in OpenSearch.

Upgrading to QUORUM ensures consistency between HCD and OpenSearch, but it has consequences for workloads that deliberately chose a weaker consistency level, including the following:

  • Latency: Clients experience QUORUM latency instead of ONE/ANY latency for writes to indexed tables.

  • Availability: Writes might time out or return unavailable errors where ONE/ANY would have succeeded.

  • Scope: Only writes to tables with OpenSearch indexes are affected.

The following consistency levels already provide sufficient guarantees, so the integration does not modify them: QUORUM, LOCAL_QUORUM, EACH_QUORUM, ALL, TWO, THREE, SERIAL, and LOCAL_SERIAL.

Write timeouts and eventual consistency

The replicator captures most writes that coordinators process and forwards them to OpenSearch. However, the eventually consistent design of HCD means that capturing all coordinator writes is not always sufficient to guarantee consistency with OpenSearch.

The most important case is a write timeout on a standard mutation (not LWT, not a LOGGED batch). When an application receives a timeout or loses contact with the coordinator, fewer than a quorum of replicas might hold the mutation because some replicas were slow to respond. If the slow replicas eventually apply the mutation locally, the row value in OpenSearch can diverge from what HCD clients observe, because the replicator read the row before the slow replicas caught up.

Processing mutations on every replica instead of only the coordinator would avoid this, but is cost-prohibitive.

To prevent data divergence, retry any write that times out. This approach is simple, effective, and low-cost.

If your application already uses LWTs or LOGGED batches, consistency is automatically guaranteed even when timeouts occur. The replicator captures the same recovery mechanisms as Cassandra and inherits its guarantees.

Node decommission safety

nodetool decommission blocks until the node’s ReplicatorStorage has sent all pending mutations to OpenSearch. A decommissioned node does not leave unindexed writes behind.

If OpenSearch is unreachable, decommission blocks indefinitely. To unblock it, do one of the following:

  • Use the acknowledgeAll JMX operation on the relevant PendingMutationsStorage MBean to release all pending items. For command examples, see Inspect and manage MBeans with nodetool sjk.

  • Set -Dcassandra.replicator.register_decommission_hook=false to disable the hook entirely.

Rebuild an index

Rebuild an index after topology changes or to recover from errors:

nodetool rebuild_index KEYSPACE TABLE INDEX_NAME

Replace the following:

  • KEYSPACE: The keyspace that contains the table

  • TABLE: The table name

  • INDEX_NAME: The name of the OpenSearch index to rebuild

Was this helpful?

Give Feedback

How can we improve the documentation?

© Copyright IBM Corporation 2026 | Privacy policy | Terms of use |  Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: Contact IBM