You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2018/12/15 18:11:18 UTC

[incubator-skywalking] branch nodetype updated: NodeType value refactor.

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

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


The following commit(s) were added to refs/heads/nodetype by this push:
     new ebc49d9  NodeType value refactor.
ebc49d9 is described below

commit ebc49d9c4d3d356c60ac35c2f731ada56a41ef47
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sat Dec 15 10:11:09 2018 -0800

    NodeType value refactor.
---
 .../server/core/query/MetadataQueryService.java    |  8 +-
 .../core/register/NetworkAddressInventory.java     | 10 ++-
 .../oap/server/core/register/NodeType.java         | 88 ++++++++++++++++++++++
 .../oap/server/core/register/ServiceInventory.java | 11 ++-
 .../service/INetworkAddressInventoryRegister.java  |  3 +-
 .../service/NetworkAddressInventoryRegister.java   | 27 ++++---
 .../core/storage/query/IMetadataQueryDAO.java      |  2 +-
 .../elasticsearch/query/MetadataQueryEsDAO.java    |  4 +-
 .../plugin/jdbc/h2/dao/H2MetadataQueryDAO.java     |  4 +-
 9 files changed, 136 insertions(+), 21 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
index 6390827..a9b3dd6 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
@@ -24,7 +24,7 @@ import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cache.*;
 import org.apache.skywalking.oap.server.core.query.entity.*;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.register.*;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.query.IMetadataQueryDAO;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -68,9 +68,9 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
         ClusterBrief clusterBrief = new ClusterBrief();
         clusterBrief.setNumOfService(getMetadataQueryDAO().numOfService(startTimestamp, endTimestamp));
         clusterBrief.setNumOfEndpoint(getMetadataQueryDAO().numOfEndpoint(startTimestamp, endTimestamp));
-        clusterBrief.setNumOfDatabase(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp, SpanLayer.Database_VALUE));
-        clusterBrief.setNumOfCache(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp, SpanLayer.Cache_VALUE));
-        clusterBrief.setNumOfMQ(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp, SpanLayer.MQ_VALUE));
+        clusterBrief.setNumOfDatabase(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp, NodeType.Database.value()));
+        clusterBrief.setNumOfCache(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp,  NodeType.Cache.value()));
+        clusterBrief.setNumOfMQ(getMetadataQueryDAO().numOfConjectural(startTimestamp, endTimestamp,  NodeType.MQ.value()));
         return clusterBrief;
     }
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java
index 1d9aefe..0647a2c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NetworkAddressInventory.java
@@ -43,7 +43,15 @@ public class NetworkAddressInventory extends RegisterSource {
     public static final String NODE_TYPE = "node_type";
 
     @Setter @Getter @Column(columnName = NAME, matchQuery = true) private String name = Const.EMPTY_STRING;
-    @Setter @Getter @Column(columnName = NODE_TYPE) private int nodeType;
+    @Setter(AccessLevel.PRIVATE) @Getter(AccessLevel.PRIVATE) @Column(columnName = NODE_TYPE) private int nodeType;
+
+    public void setNetworkAddressNodeType(NodeType nodeType) {
+        this.nodeType = nodeType.value();
+    }
+
+    public NodeType getNetworkAddressNodeType() {
+        return NodeType.get(this.nodeType);
+    }
 
     public static String buildId(String networkAddress) {
         return networkAddress;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NodeType.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NodeType.java
new file mode 100644
index 0000000..fc06b95
--- /dev/null
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/NodeType.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.register;
+
+import org.apache.skywalking.oap.server.core.UnexpectedException;
+
+/**
+ * Node type describe which kind of node of Service or Network address represents to.
+ *
+ * The value comes from 'org.apache.skywalking.apm.network.language.agent.SpanLayer' at first place, but most likely it
+ * will extend and be used directly from different sources, such as Mesh.
+ *
+ * @author wusheng
+ */
+public enum NodeType {
+    /**
+     * <code>Unknown = 0;</code>
+     */
+    Unknown(0),
+    /**
+     * <code>Database = 1;</code>
+     */
+    Database(1),
+    /**
+     * <code>RPCFramework = 2;</code>
+     */
+    RPCFramework(2),
+    /**
+     * <code>Http = 3;</code>
+     */
+    Http(3),
+    /**
+     * <code>MQ = 4;</code>
+     */
+    MQ(4),
+    /**
+     * <code>Cache = 5;</code>
+     */
+    Cache(5),
+    UNRECOGNIZED(-1);
+
+    private final int value;
+
+    NodeType(int value) {
+        this.value = value;
+    }
+
+    public int value() {
+        return value;
+    }
+
+    public static NodeType get(int value) {
+        switch (value) {
+            case 0:
+                return Unknown;
+            case 1:
+                return Database;
+            case 2:
+                return RPCFramework;
+            case 3:
+                return Http;
+            case 4:
+                return MQ;
+            case 5:
+                return Cache;
+            case -1:
+                return UNRECOGNIZED;
+            default:
+                throw new UnexpectedException("Unknown NodeType value");
+        }
+    }
+}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
index 7af54b8..7591994 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
@@ -50,10 +50,15 @@ public class ServiceInventory extends RegisterSource {
     @Setter @Getter @Column(columnName = NAME, matchQuery = true) private String name = Const.EMPTY_STRING;
     @Setter @Getter @Column(columnName = IS_ADDRESS) private int isAddress;
     @Setter @Getter @Column(columnName = ADDRESS_ID) private int addressId;
-    @Setter @Getter @Column(columnName = NODE_TYPE) private int nodeType;
+    @Setter(AccessLevel.PRIVATE) @Getter(AccessLevel.PRIVATE) @Column(columnName = NODE_TYPE) private int nodeType;
     @Setter @Getter @Column(columnName = MAPPING_SERVICE_ID) private int mappingServiceId;
     @Setter @Getter @Column(columnName = MAPPING_LAST_UPDATE_TIME) private long mappingLastUpdateTime;
 
+
+    public NodeType getServiceNodeType() {
+        return NodeType.get(this.nodeType);
+    }
+
     public static String buildId(String serviceName) {
         return serviceName + Const.ID_SPLIT + BooleanUtils.FALSE + Const.ID_SPLIT + Const.NONE;
     }
@@ -62,6 +67,10 @@ public class ServiceInventory extends RegisterSource {
         return BooleanUtils.TRUE + Const.ID_SPLIT + addressId;
     }
 
+    public void setServiceNodeType(NodeType nodeType){
+        this.nodeType = nodeType.value();
+    }
+
     @Override public String id() {
         if (BooleanUtils.TRUE == isAddress) {
             return buildId(addressId);
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java
index 02c93b1..d5f190f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java
@@ -18,6 +18,7 @@
 
 package org.apache.skywalking.oap.server.core.register.service;
 
+import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.library.module.Service;
 
 /**
@@ -30,5 +31,5 @@ public interface INetworkAddressInventoryRegister extends Service {
 
     void heartbeat(int addressId, long heartBeatTime);
 
-    void update(int addressId, int srcLayer);
+    void update(int addressId, NodeType nodeType);
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
index d0d1321..fee0890 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
@@ -115,27 +115,36 @@ public class NetworkAddressInventoryRegister implements INetworkAddressInventory
         }
     }
 
-    @Override public void update(int addressId, int nodeType) {
-        if (!this.compare(addressId, nodeType)) {
+    @Override public void update(int addressId, NodeType nodeType) {
+        NetworkAddressInventory networkAddress = getNetworkAddressInventoryCache().get(addressId);
+
+        if (!this.compare(networkAddress, nodeType)) {
             NetworkAddressInventory newNetworkAddress = getNetworkAddressInventoryCache().get(addressId);
-            newNetworkAddress.setNodeType(nodeType);
+            newNetworkAddress.setNetworkAddressNodeType(nodeType);
             newNetworkAddress.setHeartbeatTime(System.currentTimeMillis());
 
             InventoryProcess.INSTANCE.in(newNetworkAddress);
+        }
 
-            ServiceInventory newServiceInventory = getServiceInventoryCache().get(getServiceInventoryCache().getServiceId(newNetworkAddress.id()));
-            newServiceInventory.setNodeType(nodeType);
+        ServiceInventory newServiceInventory = getServiceInventoryCache().get(getServiceInventoryCache().getServiceId(networkAddress.id()));
+        if (!this.compare(newServiceInventory, nodeType)) {
+            newServiceInventory.setServiceNodeType(nodeType);
             newServiceInventory.setHeartbeatTime(System.currentTimeMillis());
 
             InventoryProcess.INSTANCE.in(newServiceInventory);
         }
     }
 
-    private boolean compare(int addressId, int srcLayer) {
-        NetworkAddressInventory networkAddress = getNetworkAddressInventoryCache().get(addressId);
+    private boolean compare(NetworkAddressInventory newNetworkAddress, NodeType srcLayer) {
+        if (Objects.nonNull(newNetworkAddress)) {
+            return srcLayer == newNetworkAddress.getNetworkAddressNodeType();
+        }
+        return true;
+    }
 
-        if (Objects.nonNull(networkAddress)) {
-            return srcLayer == networkAddress.getNodeType();
+    private boolean compare(ServiceInventory newServiceInventory, NodeType srcLayer) {
+        if (Objects.nonNull(newServiceInventory)) {
+            return srcLayer == newServiceInventory.getServiceNodeType();
         }
         return true;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
index e4d66b2..79d0edb 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java
@@ -32,7 +32,7 @@ public interface IMetadataQueryDAO extends DAO {
 
     int numOfEndpoint(final long startTimestamp, final long endTimestamp) throws IOException;
 
-    int numOfConjectural(final long startTimestamp, final long endTimestamp, final int srcLayer) throws IOException;
+    int numOfConjectural(final long startTimestamp, final long endTimestamp, final int nodeTypeValue) throws IOException;
 
     List<Service> getAllServices(final long startTimestamp, final long endTimestamp) throws IOException;
 
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
index 54f0c9f..f028936 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
@@ -72,10 +72,10 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
         return (int)response.getHits().getTotalHits();
     }
 
-    @Override public int numOfConjectural(long startTimestamp, long endTimestamp, int srcLayer) throws IOException {
+    @Override public int numOfConjectural(long startTimestamp, long endTimestamp, int nodeTypeValue) throws IOException {
         SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
 
-        sourceBuilder.query(QueryBuilders.termQuery(NetworkAddressInventory.NODE_TYPE, srcLayer));
+        sourceBuilder.query(QueryBuilders.termQuery(NetworkAddressInventory.NODE_TYPE, nodeTypeValue));
         sourceBuilder.size(0);
 
         SearchResponse response = getClient().search(NetworkAddressInventory.MODEL_NAME, sourceBuilder);
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/H2MetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
index b985854..be07bed 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
@@ -78,12 +78,12 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
     }
 
     @Override public int numOfConjectural(long startTimestamp, long endTimestamp,
-        int srcLayer) throws IOException {
+        int nodeTypeValue) throws IOException {
         StringBuilder sql = new StringBuilder();
         List<Object> condition = new ArrayList<>(5);
         sql.append("select count(*) num from ").append(NetworkAddressInventory.MODEL_NAME).append(" where ");
         sql.append(NetworkAddressInventory.NODE_TYPE).append("=?");
-        condition.add(srcLayer);
+        condition.add(nodeTypeValue);
 
         try (Connection connection = h2Client.getConnection()) {
             try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {