From c592aea8db02293861e45a0e9e34de17d5883a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Fri, 21 Dec 2018 22:32:06 +0800 Subject: [PATCH] Refactor register API for making integration easier. (#2075) * Refactor register API for making integration easier. * Fix wrong refactor. --- .../core/register/worker/RegisterPersistentWorker.java | 4 ++-- .../skywalking/oap/server/core/storage/IRegisterDAO.java | 9 ++++++++- .../storage/plugin/elasticsearch/base/RegisterEsDAO.java | 7 ++++--- .../server/storage/plugin/jdbc/h2/dao/H2RegisterDAO.java | 7 ++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java index b315074f3..61b287c05 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java @@ -78,8 +78,8 @@ public class RegisterPersistentWorker extends AbstractWorker { dbSource.combine(source); registerDAO.forceUpdate(modelName, dbSource); } else { - int sequence = registerDAO.max(modelName); - source.setSequence(sequence + 1); + int sequence = registerDAO.registerId(modelName, source); + source.setSequence(sequence); registerDAO.forceInsert(modelName, source); } } catch (Throwable t) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterDAO.java index 18350a990..d42e920dc 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterDAO.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/IRegisterDAO.java @@ -26,7 +26,14 @@ import org.apache.skywalking.oap.server.core.register.RegisterSource; */ public interface IRegisterDAO extends DAO { - int max(String modelName) throws IOException; + /** + * According modelName and register source, try to get the unique ID for this particular model. + * @param modelName + * @param registerSource + * @return the unique id. This ID for each model should start with 2. 1 has been reserved. + * @throws IOException + */ + int registerId(String modelName, RegisterSource registerSource) throws IOException; RegisterSource get(String modelName, String id) throws IOException; diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java index 1790854e7..11d423a4c 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java @@ -78,7 +78,8 @@ public class RegisterEsDAO extends EsDAO implements IRegisterDAO { getClient().forceUpdate(modelName, source.id(), builder); } - @Override public int max(String modelName) throws IOException { + @Override public int registerId(String modelName, + RegisterSource registerSource) throws IOException { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(AggregationBuilders.max(RegisterSource.SEQUENCE).field(RegisterSource.SEQUENCE)); searchSourceBuilder.size(0); @@ -91,9 +92,9 @@ public class RegisterEsDAO extends EsDAO implements IRegisterDAO { int id = (int)agg.getValue(); if (id == Integer.MAX_VALUE || id == Integer.MIN_VALUE) { - return 1; + return 2; } else { - return id; + return id + 1; } } } 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/H2RegisterDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterDAO.java index c6b2e6bdd..3403fe631 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2RegisterDAO.java @@ -46,15 +46,16 @@ public class H2RegisterDAO extends H2SQLExecutor implements IRegisterDAO { this.storageBuilder = storageBuilder; } - @Override public int max(String modelName) throws IOException { + @Override public int registerId(String modelName, + RegisterSource registerSource) throws IOException { try (Connection connection = h2Client.getConnection()) { try (ResultSet rs = h2Client.executeQuery(connection, "SELECT max(sequence) max_id FROM " + modelName)) { while (rs.next()) { int maxId = rs.getInt("max_id"); if (maxId == 0) { - return 1; + return 2; } else { - return maxId; + return maxId + 1; } } }