This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch record-ttl
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 27ca9e04c3f1a9ffee6c3d06cfa1bb484bb91979
Author: Wu Sheng <wu.sh...@foxmail.com>
AuthorDate: Tue Aug 20 11:29:23 2019 +0800

    Fix TTL issue.
---
 .../server/core/storage/ttl/GeneralStorageTTL.java   |  6 +++++-
 .../{StorageTTL.java => RecordTTLCalculator.java}    | 17 ++++++++++++-----
 .../oap/server/core/storage/ttl/StorageTTL.java      |  4 +++-
 .../elasticsearch/base/HistoryDeleteEsDAO.java       |  9 ++++++++-
 .../elasticsearch/ttl/ElasticsearchStorageTTL.java   |  6 +++++-
 .../elasticsearch/ttl/EsRecordTTLCalculator.java}    | 20 ++++++++++++++------
 .../plugin/jdbc/h2/dao/H2HistoryDeleteDAO.java       | 12 ++++++++++--
 7 files changed, 57 insertions(+), 17 deletions(-)

diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/GeneralStorageTTL.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/GeneralStorageTTL.java
index aefaa53..971bcb7 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/GeneralStorageTTL.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/GeneralStorageTTL.java
@@ -24,7 +24,7 @@ import 
org.apache.skywalking.oap.server.core.analysis.Downsampling;
  */
 public class GeneralStorageTTL implements StorageTTL {
 
-    @Override public TTLCalculator calculator(Downsampling downsampling) {
+    @Override public TTLCalculator metricsCalculator(Downsampling 
downsampling) {
         switch (downsampling) {
             case Hour:
                 return new HourTTLCalculator();
@@ -38,4 +38,8 @@ public class GeneralStorageTTL implements StorageTTL {
                 return new MinuteTTLCalculator();
         }
     }
+
+    @Override public TTLCalculator recordCalculator() {
+        return new RecordTTLCalculator();
+    }
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/RecordTTLCalculator.java
similarity index 67%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/RecordTTLCalculator.java
index 0f38659..e64582e 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/RecordTTLCalculator.java
@@ -13,15 +13,22 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 
 package org.apache.skywalking.oap.server.core.storage.ttl;
 
-import org.apache.skywalking.oap.server.core.analysis.Downsampling;
+import org.apache.skywalking.oap.server.core.DataTTLConfig;
+import org.joda.time.DateTime;
 
 /**
- * @author peng-yongsheng
+ * Calculate TTL for record.
+ *
+ * @author wusheng
  */
-public interface StorageTTL {
-    TTLCalculator calculator(Downsampling downsampling);
-}
+public class RecordTTLCalculator implements TTLCalculator {
+
+    @Override public long timeBefore(DateTime currentTime, DataTTLConfig 
dataTTLConfig) {
+        return Long.valueOf(currentTime.plusMinutes(0 - 
dataTTLConfig.getRecordDataTTL()).toString("yyyyMMddHHmm"));
+    }
+}
\ No newline at end of file
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
index 0f38659..7a0b4e9 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
@@ -23,5 +23,7 @@ import 
org.apache.skywalking.oap.server.core.analysis.Downsampling;
  * @author peng-yongsheng
  */
 public interface StorageTTL {
-    TTLCalculator calculator(Downsampling downsampling);
+    TTLCalculator metricsCalculator(Downsampling downsampling);
+
+    TTLCalculator recordCalculator();
 }
diff --git 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/HistoryDeleteEsDAO.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/HistoryDeleteEsDAO.java
index 1299cc6..e780e1f 100644
--- 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/HistoryDeleteEsDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/HistoryDeleteEsDAO.java
@@ -25,6 +25,7 @@ import 
org.apache.skywalking.oap.server.core.config.ConfigService;
 import org.apache.skywalking.oap.server.core.storage.IHistoryDeleteDAO;
 import org.apache.skywalking.oap.server.core.storage.model.Model;
 import org.apache.skywalking.oap.server.core.storage.ttl.StorageTTL;
+import org.apache.skywalking.oap.server.core.storage.ttl.TTLCalculator;
 import 
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
 import org.joda.time.DateTime;
@@ -51,7 +52,13 @@ public class HistoryDeleteEsDAO extends EsDAO implements 
IHistoryDeleteDAO {
         ConfigService configService = 
moduleDefineHolder.find(CoreModule.NAME).provider().getService(ConfigService.class);
 
         ElasticSearchClient client = getClient();
-        long timeBefore = 
storageTTL.calculator(model.getDownsampling()).timeBefore(new DateTime(), 
configService.getDataTTLConfig());
+        TTLCalculator ttlCalculator;
+        if (model.isRecord()) {
+            ttlCalculator = storageTTL.recordCalculator();
+        } else {
+            ttlCalculator = 
storageTTL.metricsCalculator(model.getDownsampling());
+        }
+        long timeBefore = ttlCalculator.timeBefore(new DateTime(), 
configService.getDataTTLConfig());
 
         if (model.isCapableOfTimeSeries()) {
             List<String> indexes = 
client.retrievalIndexByAliases(model.getName());
diff --git 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/ElasticsearchStorageTTL.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/ElasticsearchStorageTTL.java
index 5779de4..46af52d 100644
--- 
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/ElasticsearchStorageTTL.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/ElasticsearchStorageTTL.java
@@ -25,7 +25,7 @@ import org.apache.skywalking.oap.server.core.storage.ttl.*;
  */
 public class ElasticsearchStorageTTL implements StorageTTL {
 
-    @Override public TTLCalculator calculator(Downsampling downsampling) {
+    @Override public TTLCalculator metricsCalculator(Downsampling 
downsampling) {
         switch (downsampling) {
             case Month:
                 return new MonthTTLCalculator();
@@ -37,4 +37,8 @@ public class ElasticsearchStorageTTL implements StorageTTL {
                 return new DayTTLCalculator();
         }
     }
+
+    @Override public TTLCalculator recordCalculator() {
+        return new EsRecordTTLCalculator();
+    }
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/EsRecordTTLCalculator.java
similarity index 58%
copy from 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
copy to 
oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/EsRecordTTLCalculator.java
index 0f38659..0154038 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/StorageTTL.java
+++ 
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/ttl/EsRecordTTLCalculator.java
@@ -13,15 +13,23 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 
-package org.apache.skywalking.oap.server.core.storage.ttl;
+package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.ttl;
 
-import org.apache.skywalking.oap.server.core.analysis.Downsampling;
+import org.apache.skywalking.oap.server.core.DataTTLConfig;
+import org.apache.skywalking.oap.server.core.storage.ttl.TTLCalculator;
+import org.joda.time.DateTime;
 
 /**
- * @author peng-yongsheng
+ * Calculate TTL for record.
+ *
+ * @author wusheng
  */
-public interface StorageTTL {
-    TTLCalculator calculator(Downsampling downsampling);
-}
+public class EsRecordTTLCalculator implements TTLCalculator {
+
+    @Override public long timeBefore(DateTime currentTime, DataTTLConfig 
dataTTLConfig) {
+        return Long.valueOf(currentTime.plusMinutes(0 - 
dataTTLConfig.getRecordDataTTL()).toString("yyyyMMdd"));
+    }
+}
\ No newline at end of file
diff --git 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2HistoryDeleteDAO.java
 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2HistoryDeleteDAO.java
index 69fcd40..f709566 100644
--- 
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2HistoryDeleteDAO.java
+++ 
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2HistoryDeleteDAO.java
@@ -19,12 +19,14 @@
 package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
 
 import java.io.IOException;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.SQLException;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.config.ConfigService;
 import org.apache.skywalking.oap.server.core.storage.IHistoryDeleteDAO;
 import org.apache.skywalking.oap.server.core.storage.model.Model;
 import org.apache.skywalking.oap.server.core.storage.ttl.StorageTTL;
+import org.apache.skywalking.oap.server.core.storage.ttl.TTLCalculator;
 import 
org.apache.skywalking.oap.server.library.client.jdbc.JDBCClientException;
 import 
org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
 import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
@@ -53,7 +55,13 @@ public class H2HistoryDeleteDAO implements IHistoryDeleteDAO 
{
         SQLBuilder dataDeleteSQL = new SQLBuilder("delete from " + 
model.getName() + " where ").append(timeBucketColumnName).append("<= ?");
 
         try (Connection connection = client.getConnection()) {
-            long timeBefore = 
storageTTL.calculator(model.getDownsampling()).timeBefore(new DateTime(), 
configService.getDataTTLConfig());
+            TTLCalculator ttlCalculator;
+            if (model.isRecord()) {
+                ttlCalculator = storageTTL.recordCalculator();
+            } else {
+                ttlCalculator = 
storageTTL.metricsCalculator(model.getDownsampling());
+            }
+            long timeBefore = ttlCalculator.timeBefore(new DateTime(), 
configService.getDataTTLConfig());
             client.execute(connection, dataDeleteSQL.toString(), timeBefore);
         } catch (JDBCClientException | SQLException e) {
             throw new IOException(e.getMessage(), e);

Reply via email to