Commit 974192ec authored by 吴晟's avatar 吴晟 Committed by 彭勇升 pengys
Browse files

Keep service instance register based on UUID, but change name to a meaning string. (#1836)

parent 56fbb0d2
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -80,13 +80,13 @@ public class ServiceInstanceInventoryCache implements Service {
        return serviceInstanceInventory;
    }

    public int getServiceInstanceId(int serviceId, String serviceInstanceName) {
        Integer serviceInstanceId = serviceInstanceNameCache.getIfPresent(ServiceInstanceInventory.buildId(serviceId, serviceInstanceName));
    public int getServiceInstanceId(int serviceId, String uuid) {
        Integer serviceInstanceId = serviceInstanceNameCache.getIfPresent(ServiceInstanceInventory.buildId(serviceId, uuid));

        if (Objects.isNull(serviceInstanceId) || serviceInstanceId == Const.NONE) {
            serviceInstanceId = getCacheDAO().getServiceInstanceId(serviceId, serviceInstanceName);
            serviceInstanceId = getCacheDAO().getServiceInstanceId(serviceId, uuid);
            if (serviceId != Const.NONE) {
                serviceInstanceNameCache.put(ServiceInstanceInventory.buildId(serviceId, serviceInstanceName), serviceInstanceId);
                serviceInstanceNameCache.put(ServiceInstanceInventory.buildId(serviceId, uuid), serviceInstanceId);
            }
        }
        return serviceInstanceId;
+21 −9
Original line number Diff line number Diff line
@@ -20,15 +20,20 @@ package org.apache.skywalking.oap.server.core.register;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.*;
import lombok.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.register.annotation.InventoryType;
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
import org.apache.skywalking.oap.server.core.source.Scope;
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
import org.apache.skywalking.oap.server.core.storage.annotation.*;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntity;
import org.apache.skywalking.oap.server.library.util.BooleanUtils;

/**
@@ -42,6 +47,7 @@ public class ServiceInstanceInventory extends RegisterSource {
    public static final String MODEL_NAME = "service_instance_inventory";

    public static final String NAME = "name";
    public static final String INSTANCE_UUID = "instance_uuid";
    public static final String SERVICE_ID = "service_id";
    private static final String IS_ADDRESS = "is_address";
    private static final String ADDRESS_ID = "address_id";
@@ -51,7 +57,9 @@ public class ServiceInstanceInventory extends RegisterSource {
    public static final String IPV4S = "ipv4s";
    public static final String LANGUAGE = "language";

    @Setter @Getter @Column(columnName = NAME, matchQuery = true) private String name = Const.EMPTY_STRING;
    @Setter @Getter @Column(columnName = INSTANCE_UUID, matchQuery = true)
    private String instanceUUID = Const.EMPTY_STRING;
    @Setter @Getter @Column(columnName = NAME) private String name = Const.EMPTY_STRING;
    @Setter @Getter @Column(columnName = SERVICE_ID) private int serviceId;
    @Setter @Getter @Column(columnName = LANGUAGE) private int language;
    @Setter @Getter @Column(columnName = IS_ADDRESS) private int isAddress;
@@ -61,8 +69,8 @@ public class ServiceInstanceInventory extends RegisterSource {
    @Setter @Getter @Column(columnName = PROCESS_NO) private int processNo;
    @Setter @Getter @Column(columnName = IPV4S) private String ipv4s;

    public static String buildId(int serviceId, String serviceInstanceName) {
        return serviceId + Const.ID_SPLIT + serviceInstanceName + Const.ID_SPLIT + BooleanUtils.FALSE + Const.ID_SPLIT + Const.NONE;
    public static String buildId(int serviceId, String uuid) {
        return serviceId + Const.ID_SPLIT + uuid + Const.ID_SPLIT + BooleanUtils.FALSE + Const.ID_SPLIT + Const.NONE;
    }

    public static String buildId(int serviceId, int addressId) {
@@ -73,14 +81,14 @@ public class ServiceInstanceInventory extends RegisterSource {
        if (BooleanUtils.TRUE == isAddress) {
            return buildId(serviceId, addressId);
        } else {
            return buildId(serviceId, name);
            return buildId(serviceId, instanceUUID);
        }
    }

    @Override public int hashCode() {
        int result = 17;
        result = 31 * result + serviceId;
        result = 31 * result + name.hashCode();
        result = 31 * result + instanceUUID.hashCode();
        result = 31 * result + isAddress;
        result = 31 * result + addressId;
        return result;
@@ -97,7 +105,7 @@ public class ServiceInstanceInventory extends RegisterSource {
        ServiceInstanceInventory source = (ServiceInstanceInventory)obj;
        if (serviceId != source.getServiceId())
            return false;
        if (!name.equals(source.getName()))
        if (!instanceUUID.equals(source.getInstanceUUID()))
            return false;
        if (isAddress != source.getIsAddress())
            return false;
@@ -123,6 +131,7 @@ public class ServiceInstanceInventory extends RegisterSource {
        remoteBuilder.setDataStrings(1, osName);
        remoteBuilder.setDataStrings(2, hostName);
        remoteBuilder.setDataStrings(3, ipv4s);
        remoteBuilder.setDataStrings(4, instanceUUID);
        return remoteBuilder;
    }

@@ -141,6 +150,7 @@ public class ServiceInstanceInventory extends RegisterSource {
        setOsName(remoteData.getDataStrings(1));
        setHostName(remoteData.getDataStrings(2));
        setIpv4s(remoteData.getDataStrings(3));
        setInstanceUUID(remoteData.getDataStrings(4));
    }

    @Override public int remoteHashCode() {
@@ -165,6 +175,7 @@ public class ServiceInstanceInventory extends RegisterSource {
            inventory.setOsName((String)dbMap.get(OS_NAME));
            inventory.setHostName((String)dbMap.get(HOST_NAME));
            inventory.setIpv4s((String)dbMap.get(IPV4S));
            inventory.setInstanceUUID((String)dbMap.get(INSTANCE_UUID));
            return inventory;
        }

@@ -184,6 +195,7 @@ public class ServiceInstanceInventory extends RegisterSource {
            map.put(OS_NAME, storageData.getOsName());
            map.put(HOST_NAME, storageData.getHostName());
            map.put(IPV4S, storageData.getIpv4s());
            map.put(INSTANCE_UUID, storageData.getInstanceUUID());
            return map;
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import org.apache.skywalking.oap.server.library.module.Service;
 */
public interface IServiceInstanceInventoryRegister extends Service {

    int getOrCreate(int serviceId, String serviceInstanceName, long registerTime,
    int getOrCreate(int serviceId, String serviceInstanceName, String uuid, long registerTime,
        ServiceInstanceInventory.AgentOsInfo osInfo);

    int getOrCreate(int serviceId, int addressId, long registerTime);
+4 −3
Original line number Diff line number Diff line
@@ -50,18 +50,19 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento
        return serviceInstanceInventoryCache;
    }

    @Override public int getOrCreate(int serviceId, String serviceInstanceName, long registerTime,
    @Override public int getOrCreate(int serviceId, String serviceInstanceName, String uuid, long registerTime,
        ServiceInstanceInventory.AgentOsInfo osInfo) {
        if (logger.isDebugEnabled()) {
            logger.debug("Get or create service instance by service instance name, service id: {}, service instance name: {}, registerTime: {}", serviceId, serviceInstanceName, registerTime);
            logger.debug("Get or create service instance by service instance name, service id: {}, service instance name: {},uuid: {}, registerTime: {}", serviceId, serviceInstanceName, uuid, registerTime);
        }

        int serviceInstanceId = getServiceInstanceInventoryCache().getServiceInstanceId(serviceId, serviceInstanceName);
        int serviceInstanceId = getServiceInstanceInventoryCache().getServiceInstanceId(serviceId, uuid);

        if (serviceInstanceId == Const.NONE) {
            ServiceInstanceInventory serviceInstanceInventory = new ServiceInstanceInventory();
            serviceInstanceInventory.setServiceId(serviceId);
            serviceInstanceInventory.setName(serviceInstanceName);
            serviceInstanceInventory.setInstanceUUID(uuid);
            serviceInstanceInventory.setIsAddress(BooleanUtils.FALSE);
            serviceInstanceInventory.setAddressId(Const.NONE);

+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ public interface IServiceInstanceInventoryCacheDAO extends DAO {

    ServiceInstanceInventory get(int serviceInstanceId);

    int getServiceInstanceId(int serviceId, String serviceInstanceName);
    int getServiceInstanceId(int serviceId, String uuid);

    int getServiceInstanceId(int serviceId, int addressId);
}
Loading