diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/TableHelper.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/TableHelper.java index 1c56fe067493..e40b27dd8a0a 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/TableHelper.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/TableHelper.java @@ -21,7 +21,6 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.google.common.collect.Range; import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; @@ -114,11 +113,7 @@ public List getTablesForRead(String modelName, long timeBucketStart, lon return Collections.singletonList(rawTableName); } - final var ttlTimeBucketRange = getTTLTimeBucketRange(model); - final var ttlTables = - LongStream.rangeClosed(ttlTimeBucketRange.lowerEndpoint(), ttlTimeBucketRange.upperEndpoint()) - .mapToObj(it -> getTable(rawTableName, it)) - .collect(toList()); + final var ttlTables = getTablesWithinTTL(modelName); return getTablesInTimeBucketRange(modelName, timeBucketStart, timeBucketEnd) .stream() .filter(ttlTables::contains) @@ -143,11 +138,15 @@ public List getTablesInTimeBucketRange(String modelName, long timeBucket return Collections.singletonList(rawTableName); } - timeBucketStart = TimeBucket.getTimeBucket(TimeBucket.getTimestamp(timeBucketStart), DownSampling.Day); - timeBucketEnd = TimeBucket.getTimeBucket(TimeBucket.getTimestamp(timeBucketEnd), DownSampling.Day); + final var timestampStart = TimeBucket.getTimestamp(timeBucketStart); + final var timestampEnd = TimeBucket.getTimestamp(timeBucketEnd); + final var timeBuckets = LongStream.builder(); + for (var timestamp = timestampStart; timestamp <= timestampEnd; timestamp += TimeUnit.DAYS.toMillis(1)) { + timeBuckets.add(TimeBucket.getTimeBucket(timestamp, DownSampling.Day)); + } - return LongStream - .rangeClosed(timeBucketStart, timeBucketEnd) + return timeBuckets + .build() .distinct() .mapToObj(timeBucket -> getTable(rawTableName, timeBucket)) .collect(toList()); @@ -155,8 +154,24 @@ public List getTablesInTimeBucketRange(String modelName, long timeBucket public List getTablesWithinTTL(String modelName) { final var model = TableMetaInfo.get(modelName); - final var range = getTTLTimeBucketRange(model); - return getTablesForRead(modelName, range.lowerEndpoint(), range.upperEndpoint()); + final var rawTableName = getTableName(model); + + if (!model.isTimeSeries()) { + return Collections.singletonList(rawTableName); + } + + final var ttlTimeBuckets = getTTLTimeBuckets(model); + return ttlTimeBuckets + .stream() + .map(it -> getTable(rawTableName, it)) + .filter(table -> { + try { + return tableExistence.get(table); + } catch (Exception e) { + throw new RuntimeException(e); + } + }) + .collect(toList()); } public static String generateId(Model model, String originalID) { @@ -182,12 +197,14 @@ public static long getTimeBucket(String table) { return Long.parseLong(split[split.length - 1]); } - Range getTTLTimeBucketRange(Model model) { + List getTTLTimeBuckets(Model model) { final var ttl = model.isRecord() ? getConfigService().getRecordDataTTL() : getConfigService().getMetricsDataTTL(); - final var timeBucketEnd = TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Day); - final var timeBucketStart = TimeBucket.getTimeBucket(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(ttl), DownSampling.Day); - return Range.closed(timeBucketStart, timeBucketEnd); + return LongStream + .rangeClosed(0, ttl) + .mapToObj(it -> TimeBucket.getTimeBucket(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(it), DownSampling.Day)) + .distinct() + .collect(toList()); } } diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCHistoryDeleteDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCHistoryDeleteDAO.java index 43354807bd44..91c25ab76e6e 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCHistoryDeleteDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCHistoryDeleteDAO.java @@ -51,7 +51,7 @@ public class JDBCHistoryDeleteDAO implements IHistoryDeleteDAO { @SneakyThrows public void deleteHistory(Model model, String timeBucketColumnName, int ttl) { final var endTimeBucket = TimeBucket.getTimeBucket(clock.millis() + TimeUnit.DAYS.toMillis(1), DownSampling.Day); - final var startTimeBucket = endTimeBucket - ttl - 1; + final var startTimeBucket = TimeBucket.getTimeBucket(clock.millis() - TimeUnit.DAYS.toMillis(ttl), DownSampling.Day); log.info( "Deleting history data, ttl: {}, now: {}. Keep [{}, {}]", ttl,