From c78e725c9aca784c17bc900bfd3820ca4496012e Mon Sep 17 00:00:00 2001 From: Alex Abdugafarov Date: Fri, 24 May 2019 17:36:21 -0700 Subject: [PATCH 1/2] [#1425]: Update client-side cache of prepared statements unconditionally because of possible metadata changes not currently governed by query ID --- driver-core/src/main/java/com/datastax/driver/core/Cluster.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 6b81598a2b0..14741729e31 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -2241,7 +2241,7 @@ public void ensurePoolsSizing() { } public PreparedStatement addPrepared(PreparedStatement stmt) { - PreparedStatement previous = preparedQueries.putIfAbsent(stmt.getPreparedId().id, stmt); + PreparedStatement previous = preparedQueries.put(stmt.getPreparedId().id, stmt); if (previous != null) { logger.warn("Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. " + "Consider preparing the statement only once. Query='{}'", stmt.getQueryString()); From edc2ecc19a197c58b0dbd111f7c509569b4a1950 Mon Sep 17 00:00:00 2001 From: Alex Abdugafarov Date: Tue, 28 May 2019 15:15:36 -0700 Subject: [PATCH 2/2] [#1425]: Fixed cached statement being returned over the new one --- .../src/main/java/com/datastax/driver/core/Cluster.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java index 14741729e31..22093340b50 100644 --- a/driver-core/src/main/java/com/datastax/driver/core/Cluster.java +++ b/driver-core/src/main/java/com/datastax/driver/core/Cluster.java @@ -2245,10 +2245,6 @@ public PreparedStatement addPrepared(PreparedStatement stmt) { if (previous != null) { logger.warn("Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. " + "Consider preparing the statement only once. Query='{}'", stmt.getQueryString()); - - // The one object in the cache will get GCed once it's not referenced by the client anymore since we use a weak reference. - // So we need to make sure that the instance we do return to the user is the one that is in the cache. - return previous; } return stmt; }