Skip to content

4.x: Shardawareness for LWT transactions fails with prepared statements. Works with previous patch 4.19.0.4 #830

@sgopalakrishnan-scylla

Description

@sgopalakrishnan-scylla

Customer ran the tests with both versions and here are the results:

4.19.0.5
SimpleStatement + LWT → works
PreparedStatement + LWT → fails with "No available node"

4.19.0.4
SimpleStatement + LWT → works
PreparedStatement + LWT → works

----------------------------------Message in Error  log Dump ----------------------------
{"@timestamp":"2026-03-05T13:06:24.669128113+09:00","@version":"1","message":"Reservation failed, executing compensation: **orderId=testorder02, error=No node was available to execute the** query","logger_name":"com.musinsa.ciap.inventory.application.service.ReservationService","thread_name":"tomcat-handler-699","level":"ERROR","level_value":40000,"traceId":"69a901402af07c5fb8f3386f95d4484b","spanId":"b8f3386f95d4484b","dd.trace_id":"6235241141707454306","dd.service":"ciap-inventory-api","dd.env":"dev","dd.version":"0.1","dd.span_id":"6981314099117952491","stack_trace":"com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query\n\tat com.datastax.oss.driver.api.core.NoNodeAvailableException.copy(NoNodeAvailableException.java:42)\n\tat com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:154)\n\tat com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:55)\n\tat com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:32)\n\tat com.datastax.oss.driver.internal.core.session.DefaultSession.execute(DefaultSession.java:241)\n\tat datadog.trace.instrumentation.datastax.cassandra4.TracingSession.wrapSyncRequest(TracingSession.java:65)\n\tat datadog.trace.instrumentation.datastax.cassandra4.TracingSession.execute(TracingSession.java:47)\n\tat com.datastax.oss.driver.api.core.cql.SyncCqlSession.execute(SyncCqlSession.java:56)\n\tat com.datastax.oss.driver.internal.mapper.DaoBase.execute(DaoBase.java:190)\n\tat com.datastax.oss.driver.internal.mapper.DaoBase.executeAndMapWasAppliedToBoolean(DaoBase.java:194)\n\tat com.musinsa.ciap.inventory.infra.scylladb.dao.AllocationDaoImpl__MapperGenerated.insertIfNotExists(AllocationDaoImpl__MapperGenerated.java:109)\n\tat 
-------------------------------------------------------------------------------------------------------------------------------------------

Prepared statement code

String lwt = "UPDATE stock " +
                "SET reserved_quantity = ?, remaining_quantity = ?, updated_at = ?, version = ? " +
                "WHERE inventory_id = ? AND stock_id = ? " +
                "IF version = ? AND deleted_at = null";

        PreparedStatement ps = cqlSession.prepare(lwt);
        BoundStatement bound = ps.bind(0L, 0L, Instant.now(), 999L, inventoryId, stockId, 0L);
        cqlSession.execute(bound).one();

**-----------------------------------------------------------------------------------------------------------------------------------------------

Tests run so far with token awreness
SELECT: SUCCESS
INSERT/UPDATE without LWT through 'BoundStatement' : SUCCESS
INSERT/UPDATE with LWT through 'SimpleStatement': SUCCESS
INSERT/UPDATE with LWT through 'BoundStatement': FAILED with NoNodeAvailableException
---------------------------------------------------------------------------------------------------------------------------------------------**

Jira Issue: https://scylladb.atlassian.net/browse/DRIVER-507

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions