From ba2a15b0e4e436fea977ddf7bcd7eb6edb1c5169 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Fri, 4 Nov 2022 15:06:10 +0200 Subject: [PATCH] set prepared statement array atomically to prevent corrupted arrays to be created in case of temporary issues on Cassandra cluster --- .../dao/timeseries/CassandraBaseTimeseriesDao.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java index 367ad942a7..7f8dca5af1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java @@ -643,9 +643,9 @@ public class CassandraBaseTimeseriesDao extends AbstractCassandraBaseTimeseriesD stmtCreationLock.lock(); try { if (saveStmts == null) { - saveStmts = new PreparedStatement[DataType.values().length]; + var stmts = new PreparedStatement[DataType.values().length]; for (DataType type : DataType.values()) { - saveStmts[type.ordinal()] = prepare(INSERT_INTO + ModelConstants.TS_KV_CF + + stmts[type.ordinal()] = prepare(INSERT_INTO + ModelConstants.TS_KV_CF + "(" + ModelConstants.ENTITY_TYPE_COLUMN + "," + ModelConstants.ENTITY_ID_COLUMN + "," + ModelConstants.KEY_COLUMN + @@ -654,6 +654,7 @@ public class CassandraBaseTimeseriesDao extends AbstractCassandraBaseTimeseriesD "," + getColumnName(type) + ")" + " VALUES(?, ?, ?, ?, ?, ?)"); } + saveStmts = stmts; } } finally { stmtCreationLock.unlock(); @@ -667,9 +668,9 @@ public class CassandraBaseTimeseriesDao extends AbstractCassandraBaseTimeseriesD stmtCreationLock.lock(); try { if (saveTtlStmts == null) { - saveTtlStmts = new PreparedStatement[DataType.values().length]; + var stmts = new PreparedStatement[DataType.values().length]; for (DataType type : DataType.values()) { - saveTtlStmts[type.ordinal()] = prepare(INSERT_INTO + ModelConstants.TS_KV_CF + + stmts[type.ordinal()] = prepare(INSERT_INTO + ModelConstants.TS_KV_CF + "(" + ModelConstants.ENTITY_TYPE_COLUMN + "," + ModelConstants.ENTITY_ID_COLUMN + "," + ModelConstants.KEY_COLUMN + @@ -678,6 +679,7 @@ public class CassandraBaseTimeseriesDao extends AbstractCassandraBaseTimeseriesD "," + getColumnName(type) + ")" + " VALUES(?, ?, ?, ?, ?, ?) USING TTL ?"); } + saveTtlStmts = stmts; } } finally { stmtCreationLock.unlock();