Skip to content

Commit d975001

Browse files
authored
4.x: Fix tablet update for non-select queries (#499)
* Add per statement tests for tablets Goal is to ensure that server provides tablet info and it reaches session tablet map for every statement possible. * Fix tablets update Fixes tablets update for non-select queries
1 parent c3d8010 commit d975001

File tree

2 files changed

+321
-54
lines changed

2 files changed

+321
-54
lines changed

core/src/main/java/com/datastax/oss/driver/internal/core/cql/CqlRequestHandler.java

+21-11
Original file line numberDiff line numberDiff line change
@@ -480,17 +480,27 @@ private void setFinalResult(
480480
totalLatencyNanos,
481481
TimeUnit.NANOSECONDS);
482482
}
483-
if (resultSet.getColumnDefinitions().size() > 0
484-
&& resultSet
485-
.getExecutionInfo()
486-
.getIncomingPayload()
487-
.containsKey(TabletInfo.TABLETS_ROUTING_V1_CUSTOM_PAYLOAD_KEY)) {
488-
context
489-
.getMetadataManager()
490-
.addTabletFromPayload(
491-
resultSet.getColumnDefinitions().get(0).getKeyspace(),
492-
resultSet.getColumnDefinitions().get(0).getTable(),
493-
resultSet.getExecutionInfo().getIncomingPayload());
483+
if (resultSet
484+
.getExecutionInfo()
485+
.getIncomingPayload()
486+
.containsKey(TabletInfo.TABLETS_ROUTING_V1_CUSTOM_PAYLOAD_KEY)) {
487+
CqlIdentifier keyspace = resultSet.getExecutionInfo().getRequest().getRoutingKeyspace();
488+
if (keyspace == null) {
489+
keyspace = resultSet.getExecutionInfo().getRequest().getKeyspace();
490+
if (keyspace == null && resultSet.getColumnDefinitions().size() > 0) {
491+
keyspace = resultSet.getColumnDefinitions().get(0).getKeyspace();
492+
}
493+
}
494+
CqlIdentifier table = resultSet.getExecutionInfo().getRequest().getRoutingTable();
495+
if (table == null && resultSet.getColumnDefinitions().size() > 0) {
496+
table = resultSet.getColumnDefinitions().get(0).getTable();
497+
}
498+
if (keyspace != null && table != null) {
499+
context
500+
.getMetadataManager()
501+
.addTabletFromPayload(
502+
keyspace, table, resultSet.getExecutionInfo().getIncomingPayload());
503+
}
494504
}
495505
}
496506
// log the warnings if they have NOT been disabled

0 commit comments

Comments
 (0)