Commit d5319c9de041c785db4dc787806726c92c9ba61c
Committed by
Andrew Shvayka
1 parent
e27ef59e
Partitions should not be removed by custom TTL
Showing
6 changed files
with
11 additions
and
8 deletions
... | ... | @@ -100,7 +100,7 @@ public abstract class AbstractChunkedAggregationTimeseriesDao extends AbstractSq |
100 | 100 | } |
101 | 101 | |
102 | 102 | @Override |
103 | - public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key, long ttl) { | |
103 | + public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key) { | |
104 | 104 | return Futures.immediateFuture(null); |
105 | 105 | } |
106 | 106 | ... | ... |
... | ... | @@ -124,7 +124,7 @@ public class TimescaleTimeseriesDao extends AbstractSqlTimeseriesDao implements |
124 | 124 | } |
125 | 125 | |
126 | 126 | @Override |
127 | - public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key, long ttl) { | |
127 | + public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key) { | |
128 | 128 | return Futures.immediateFuture(0); |
129 | 129 | } |
130 | 130 | ... | ... |
... | ... | @@ -170,7 +170,7 @@ public class BaseTimeseriesService implements TimeseriesService { |
170 | 170 | if (entityId.getEntityType().equals(EntityType.ENTITY_VIEW)) { |
171 | 171 | throw new IncorrectParameterException("Telemetry data can't be stored for entity view. Read only"); |
172 | 172 | } |
173 | - futures.add(timeseriesDao.savePartition(tenantId, entityId, tsKvEntry.getTs(), tsKvEntry.getKey(), ttl)); | |
173 | + futures.add(timeseriesDao.savePartition(tenantId, entityId, tsKvEntry.getTs(), tsKvEntry.getKey())); | |
174 | 174 | futures.add(Futures.transform(timeseriesLatestDao.saveLatest(tenantId, entityId, tsKvEntry), v -> 0, MoreExecutors.directExecutor())); |
175 | 175 | futures.add(timeseriesDao.save(tenantId, entityId, tsKvEntry, ttl)); |
176 | 176 | } | ... | ... |
... | ... | @@ -181,11 +181,14 @@ public class CassandraBaseTimeseriesDao extends AbstractCassandraBaseTimeseriesD |
181 | 181 | } |
182 | 182 | |
183 | 183 | @Override |
184 | - public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key, long ttl) { | |
184 | + public ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key) { | |
185 | 185 | if (isFixedPartitioning()) { |
186 | 186 | return Futures.immediateFuture(null); |
187 | 187 | } |
188 | - ttl = computeTtl(ttl); | |
188 | + // DO NOT apply custom to partition, otherwise short TTL will remove partition too early | |
189 | + // partitions must remain in the DB forever or be removed only by systemTtl | |
190 | + // removal of empty partition is too expensive (we need to scan all data keys for this partitions with ALLOW FILTERING) | |
191 | + long ttl = computeTtl(0); | |
189 | 192 | long partition = toPartitionTs(tsKvEntryTs); |
190 | 193 | if (cassandraTsPartitionsCache == null) { |
191 | 194 | return doSavePartition(tenantId, entityId, key, ttl, partition); | ... | ... |
... | ... | @@ -33,7 +33,7 @@ public interface TimeseriesDao { |
33 | 33 | |
34 | 34 | ListenableFuture<Integer> save(TenantId tenantId, EntityId entityId, TsKvEntry tsKvEntry, long ttl); |
35 | 35 | |
36 | - ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key, long ttl); | |
36 | + ListenableFuture<Integer> savePartition(TenantId tenantId, EntityId entityId, long tsKvEntryTs, String key); | |
37 | 37 | |
38 | 38 | ListenableFuture<Void> remove(TenantId tenantId, EntityId entityId, DeleteTsKvQuery query); |
39 | 39 | ... | ... |
... | ... | @@ -100,10 +100,10 @@ public class CassandraPartitionsCacheTest { |
100 | 100 | long tsKvEntryTs = System.currentTimeMillis(); |
101 | 101 | |
102 | 102 | for (int i = 0; i < 50000; i++) { |
103 | - cassandraBaseTimeseriesDao.savePartition(tenantId, tenantId, tsKvEntryTs, "test" + i, 0); | |
103 | + cassandraBaseTimeseriesDao.savePartition(tenantId, tenantId, tsKvEntryTs, "test" + i); | |
104 | 104 | } |
105 | 105 | for (int i = 0; i < 60000; i++) { |
106 | - cassandraBaseTimeseriesDao.savePartition(tenantId, tenantId, tsKvEntryTs, "test" + i, 0); | |
106 | + cassandraBaseTimeseriesDao.savePartition(tenantId, tenantId, tsKvEntryTs, "test" + i); | |
107 | 107 | } |
108 | 108 | verify(cassandraBaseTimeseriesDao, times(60000)).executeAsyncWrite(any(TenantId.class), any(Statement.class)); |
109 | 109 | } | ... | ... |