[ https://issues.apache.org/jira/browse/SCB-582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16480231#comment-16480231 ]
ASF GitHub Bot commented on SCB-582: ------------------------------------ liubao68 commented on a change in pull request #704: [SCB-582]Provide a way to protect instance removal URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/704#discussion_r189175400 ########## File path: service-registry/src/main/java/org/apache/servicecomb/serviceregistry/consumer/MicroserviceVersions.java ########## @@ -169,6 +166,28 @@ private void setInstances(List<MicroserviceInstance> pulledInstances, String rev } } + private List<MicroserviceInstance> mergeInstances(List<MicroserviceInstance> pulledInstances, + List<MicroserviceInstance> inUseInstances) { + List<MicroserviceInstance> upInstances = pulledInstances + .stream() + .filter(instance -> { + return MicroserviceInstanceStatus.UP.equals(instance.getStatus()); + }) + .collect(Collectors.toList()); + if (upInstances.isEmpty() && inUseInstances != null && ServiceRegistryConfig.INSTANCE.isEmptyInstanceProtectionEnabled()) { + MicroserviceInstancePing ping = SPIServiceUtils.getPriorityHighestService(MicroserviceInstancePing.class); + inUseInstances.stream() + .forEach(instance -> { + if (!upInstances.contains(instance)) { + if (ping.ping(instance)) { Review comment: This scenario is rarely as I explained above, mostly because of service center bugs. And this health check run a separate background thread, will not influence normal performance. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > Provide a way to protection for instance removal > ------------------------------------------------ > > Key: SCB-582 > URL: https://issues.apache.org/jira/browse/SCB-582 > Project: Apache ServiceComb > Issue Type: New Feature > Components: Java-Chassis > Reporter: liubao > Assignee: liubao > Priority: Major > Fix For: java-chassis-1.0.0-m2 > > > In some applications, each microservice have fixed instances and rarely > change. But for some reason, heartbeat to service center is not stable. In > this scenario, instances will get lost and result in invocation failure. > > To deal with this problem, we need to provide a way to protect instance > removal. That's when there is instance removal, we first check(ping)the > instance to see if it is reachable. If it's reachable, we don't remove it. > > Since this protection is not fit for docker applications or scenarios where > instances are constantly removed and added, and resources(hosts ,ip, port) > are reused, this feature is an optional feature and users can open it when > necessary. -- This message was sent by Atlassian JIRA (v7.6.3#76005)