Skip to content

Commit

Permalink
[SCB-1971] minor change to fix an issue
Browse files Browse the repository at this point in the history
  • Loading branch information
jungan21 committed Jun 4, 2020
1 parent 9798ca8 commit 68bddb9
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 85 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,13 @@
*/
package org.apache.servicecomb.zeroconfig;

import com.google.common.annotations.VisibleForTesting;
import com.netflix.config.DynamicPropertyFactory;
import java.util.Collection;
import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.config.ConfigUtil;
import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
import org.apache.servicecomb.registry.api.Registration;
import org.apache.servicecomb.registry.api.registry.BasePath;
import org.apache.servicecomb.registry.api.registry.Microservice;
import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
import org.apache.servicecomb.zeroconfig.client.ClientUtil;
import org.apache.servicecomb.zeroconfig.client.ZeroConfigClient;
import org.apache.servicecomb.zeroconfig.server.ServerUtil;
Expand All @@ -47,46 +41,18 @@ public class ZeroConfigRegistration implements Registration {

private ZeroConfigClient zeroConfigClient = ZeroConfigClient.INSTANCE;

// registration objects
private Microservice selfMicroservice;
private MicroserviceInstance selfMicroserviceInstance;

@Override
public boolean enabled() {
return DynamicPropertyFactory.getInstance().getBooleanProperty(ENABLED, true).get();
}

@Override
public void init() {
// init self Microservice & MicroserviceInstance objects
MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(
loader.getConfigModels());
MicroserviceFactory microserviceFactory = new MicroserviceFactory();
this.selfMicroservice = microserviceFactory.create(microserviceDefinition);
this.selfMicroserviceInstance = selfMicroservice.getInstance();

setServiceIdAndInstanceId();

zeroConfigClient.init();
ServerUtil.init();
ClientUtil.init();
}

private void setServiceIdAndInstanceId(){
// set serviceId
if (StringUtils.isEmpty(selfMicroservice.getServiceId())) {
String serviceId = ClientUtil.generateServiceId(selfMicroservice);
selfMicroservice.setServiceId(serviceId);
selfMicroserviceInstance.setServiceId(serviceId);
}

// set instanceId
if (StringUtils.isEmpty(selfMicroserviceInstance.getInstanceId())) {
String instanceId = ClientUtil.generateServiceInstanceId();
selfMicroserviceInstance.setInstanceId(instanceId);
}
}

@Override
public void run() {
// register service instance
Expand Down Expand Up @@ -119,59 +85,38 @@ public String name() {

@Override
public MicroserviceInstance getMicroserviceInstance() {
return this.selfMicroserviceInstance;
return zeroConfigClient.getSelfMicroserviceInstance();
}

@Override
public Microservice getMicroservice() {
return this.selfMicroservice;
return zeroConfigClient.getSelfMicroservice();
}

@Override
public String getAppId() {
return this.selfMicroservice.getAppId();
return zeroConfigClient.getSelfMicroservice().getAppId();
}

@Override
public boolean updateMicroserviceInstanceStatus(MicroserviceInstanceStatus status) {
this.selfMicroserviceInstance.setStatus(status);
zeroConfigClient.getSelfMicroserviceInstance().setStatus(status);
return true;
}

@Override
public void addSchema(String schemaId, String content) {
this.selfMicroservice.addSchema(schemaId, content);
zeroConfigClient.getSelfMicroservice().addSchema(schemaId, content);
}

@Override
public void addEndpoint(String endpoint) {
this.selfMicroserviceInstance.getEndpoints().add(endpoint);
zeroConfigClient.getSelfMicroserviceInstance().getEndpoints().add(endpoint);
}

@Override
public void addBasePath(Collection<BasePath> basePaths) {
this.selfMicroservice.getPaths().addAll(basePaths);
}

// setter/getter
public Microservice getSelfMicroservice() {
return this.selfMicroservice;
}

public MicroserviceInstance getSelfMicroserviceInstance() {
return this.selfMicroserviceInstance;
}

@VisibleForTesting
public void setSelfMicroserviceInstance(
MicroserviceInstance selfMicroserviceInstance) {
this.selfMicroserviceInstance = selfMicroserviceInstance;
}

@VisibleForTesting
public void setSelfMicroservice(
Microservice selfMicroservice) {
this.selfMicroservice = selfMicroservice;
zeroConfigClient.getSelfMicroservice().getPaths().addAll(basePaths);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,18 @@
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.config.ConfigUtil;
import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
import org.apache.servicecomb.registry.api.registry.FindInstancesResponse;
import org.apache.servicecomb.registry.api.registry.Microservice;
import org.apache.servicecomb.registry.api.registry.MicroserviceFactory;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
import org.apache.servicecomb.registry.definition.MicroserviceDefinition;
import org.apache.servicecomb.registry.version.Version;
import org.apache.servicecomb.registry.version.VersionRule;
import org.apache.servicecomb.registry.version.VersionRuleUtils;
import org.apache.servicecomb.registry.version.VersionUtils;
import org.apache.servicecomb.zeroconfig.ZeroConfigRegistration;
import org.apache.servicecomb.zeroconfig.server.ServerMicroserviceInstance;
import org.apache.servicecomb.zeroconfig.server.ServerUtil;
import org.apache.servicecomb.zeroconfig.server.ZeroConfigRegistryService;
Expand All @@ -54,6 +57,10 @@ public class ZeroConfigClient {
private ZeroConfigRegistryService zeroConfigRegistryService;
private MulticastSocket multicastSocket;

// registration objects
private Microservice selfMicroservice;
private MicroserviceInstance selfMicroserviceInstance;

// Constructor
private ZeroConfigClient(ZeroConfigRegistryService zeroConfigRegistryService,
MulticastSocket multicastSocket) {
Expand All @@ -70,6 +77,29 @@ public ZeroConfigClient initZeroConfigClientWithMocked(
return this;
}

public void init() {
MicroserviceConfigLoader loader = ConfigUtil.getMicroserviceConfigLoader();
MicroserviceDefinition microserviceDefinition = new MicroserviceDefinition(
loader.getConfigModels());
MicroserviceFactory microserviceFactory = new MicroserviceFactory();
selfMicroservice = microserviceFactory.create(microserviceDefinition);
selfMicroserviceInstance = selfMicroservice.getInstance();

// set serviceId
if (StringUtils.isEmpty(selfMicroservice.getServiceId())) {
String serviceId = ClientUtil.generateServiceId(selfMicroservice);
selfMicroservice.setServiceId(serviceId);
selfMicroserviceInstance.setServiceId(serviceId);
}

// set instanceId
if (StringUtils.isEmpty(selfMicroserviceInstance.getInstanceId())) {
String instanceId = ClientUtil.generateServiceInstanceId();
selfMicroserviceInstance.setInstanceId(instanceId);
}

}

// builder method
private static ZeroConfigClient buildZeroConfigClient() {
MulticastSocket multicastSocket = null;
Expand Down Expand Up @@ -154,7 +184,7 @@ public List<Microservice> getAllMicroservices() {
}

public Microservice getMicroservice(String microserviceId) {
Microservice selfMicroservice = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();

// for registration
if (selfMicroservice.getServiceId().equals(microserviceId)) {
return selfMicroservice;
Expand All @@ -165,9 +195,7 @@ public Microservice getMicroservice(String microserviceId) {
}
}


public String getSchema(String microserviceId, String schemaId) {
Microservice selfMicroservice = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();
LOGGER.info("Retrieve schema content for Microservice ID: {}, Schema ID: {}",
microserviceId, schemaId);
// called by service registration task when registering itself
Expand Down Expand Up @@ -262,26 +290,42 @@ private ServerMicroserviceInstance findLatestVersionInstance(

private Map<String, String> prepareRegisterData() {
// Convert to Multicast data format
Microservice selfService = ZeroConfigRegistration.INSTANCE.getSelfMicroservice();
MicroserviceInstance selfInstance = ZeroConfigRegistration.INSTANCE
.getSelfMicroserviceInstance();

Optional<Map<String, String>> optionalDataMap = ClientUtil
.convertToRegisterDataModel(selfService.getServiceId(), selfInstance.getInstanceId(),
selfInstance, selfService);
.convertToRegisterDataModel(selfMicroservice.getServiceId(),
selfMicroserviceInstance.getInstanceId(),
selfMicroserviceInstance, selfMicroservice);

return optionalDataMap.orElse(null);
}

private ServerMicroserviceInstance preUnregisterCheck() {
MicroserviceInstance instance = ZeroConfigRegistration.INSTANCE.getSelfMicroserviceInstance();
String serviceId = instance.getServiceId();
String instanceId = instance.getInstanceId();
Optional<ServerMicroserviceInstance> optionalInstance = zeroConfigRegistryService
.findServiceInstance(serviceId, instanceId);
.findServiceInstance(selfMicroserviceInstance.getServiceId(),
selfMicroserviceInstance.getInstanceId());
if (optionalInstance.isPresent()) {
return optionalInstance.get();
}
return null;
}

public Microservice getSelfMicroservice() {
return selfMicroservice;
}

@VisibleForTesting
public void setSelfMicroservice(
Microservice selfMicroservice) {
this.selfMicroservice = selfMicroservice;
}

public MicroserviceInstance getSelfMicroserviceInstance() {
return selfMicroserviceInstance;
}

@VisibleForTesting
public void setSelfMicroserviceInstance(
MicroserviceInstance selfMicroserviceInstance) {
this.selfMicroserviceInstance = selfMicroserviceInstance;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import org.apache.servicecomb.registry.api.registry.MicroserviceInstance;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstanceStatus;
import org.apache.servicecomb.registry.api.registry.MicroserviceInstances;
import org.apache.servicecomb.zeroconfig.ZeroConfigRegistration;
import org.apache.servicecomb.zeroconfig.server.ServerMicroserviceInstance;
import org.apache.servicecomb.zeroconfig.server.ZeroConfigRegistryService;
import org.junit.Assert;
Expand Down Expand Up @@ -68,7 +67,8 @@ public class TestZeroConfigClient {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
target = ZeroConfigClient.INSTANCE.initZeroConfigClientWithMocked(zeroConfigRegistryService, multicastSocket);
target = ZeroConfigClient.INSTANCE
.initZeroConfigClientWithMocked(zeroConfigRegistryService, multicastSocket);

prepareSelfMicroserviceAndInstance();
}
Expand Down Expand Up @@ -97,8 +97,8 @@ private void prepareSelfMicroserviceAndInstance() {
microserviceInstance.setHostName(host);

microservice.setInstance(microserviceInstance);
ZeroConfigRegistration.INSTANCE.setSelfMicroservice(microservice);
ZeroConfigRegistration.INSTANCE.setSelfMicroserviceInstance(microserviceInstance);
target.setSelfMicroservice(microservice);
target.setSelfMicroserviceInstance(microserviceInstance);
}

private ServerMicroserviceInstance prepareServerServiceInstance(boolean withEndpoint) {
Expand Down Expand Up @@ -178,9 +178,7 @@ public void test_unregister_MulticastThrowException_UnregisterShouldFail() throw
public void test_getMicroservice_forItself_shouldReturnItself_And_NotCallZeroConfigRegistryService() {
Microservice returnedResult = target.getMicroservice(selfServiceId);

Assert
.assertEquals(ZeroConfigRegistration.INSTANCE.getSelfMicroservice().getServiceId(),
returnedResult.getServiceId());
Assert.assertEquals(target.getSelfMicroservice().getServiceId(), returnedResult.getServiceId());
verifyZeroInteractions(zeroConfigRegistryService);
}

Expand Down Expand Up @@ -212,7 +210,6 @@ public void test_getSchema_forOtherMicroservice_shouldReturnNull() {
}



// test findMicroserviceInstance method
@Test
public void test_findMicroserviceInstance_forNonExistInstance_shouldReturnNull() {
Expand Down

0 comments on commit 68bddb9

Please sign in to comment.