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; } } }