@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { if (!parent.childrenInited()) { synchronized (parent) { if (!parent.childrenInited()) { init(context, parent); parent.childrenInited(true); } } } String childName = findChildName(context, parent); DiscoveryTreeNode node = parent.child(childName); if (node == null) { LOGGER.warn("discovery filter {} return null.", this.getClass().getName()); return new DiscoveryTreeNode().subName(parent, "empty").data(new HashMap<>()); } return node; }
@Override public void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> instances = parent.data(); Map<String, MicroserviceInstance> filteredServers = new HashMap<>(); for (String key : instances.keySet()) { MicroserviceInstance instance = instances.get(key); if (MicroserviceInstanceStatus.UP == instance.getStatus()) { filteredServers.put(key, instance); } } if (filteredServers.isEmpty()) { return; } DiscoveryTreeNode child = new DiscoveryTreeNode().subName(parent, UP_INSTANCES).data(filteredServers); parent.child(UP_INSTANCES, child); } }
@Override protected void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> matchedInstance = new HashMap<>(); Invocation invocation = context.getInputParameters(); Map<String, MicroserviceInstance> instances = parent.data(); Map<String, String> filterOptions = Configuration.INSTANCE.getFlowsplitFilterOptions(invocation.getMicroserviceName()); for (String id : instances.keySet()) { MicroserviceInstance target = instances.get(id); if (allowVisit(target, filterOptions)) { matchedInstance.put(id, target); } } parent.child(MATCHED, new DiscoveryTreeNode() .subName(parent, MATCHED) .data(matchedInstance)); }
@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { if (!parent.childrenInited()) { synchronized (parent) { if (!parent.childrenInited()) { init(context, parent); parent.childrenInited(true); } } } String childName = findChildName(context, parent); return parent.child(childName); }
@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> instances = parent.data(); Invocation invocation = context.getInputParameters(); if (!Configuration.INSTANCE.isIsolationFilterOpen(invocation.getMicroserviceName())) { return parent; } Map<String, MicroserviceInstance> filteredServers = new HashMap<>(); for (String key : instances.keySet()) { MicroserviceInstance instance = instances.get(key); if (allowVisit(invocation, instance)) { filteredServers.put(key, instance); } } DiscoveryTreeNode child = new DiscoveryTreeNode(); if (filteredServers.isEmpty() && DynamicPropertyFactory.getInstance() .getBooleanProperty("servicecomb.loadbalance.filter.isolation.emptyInstanceProtectionEnabled", false).get()) { LOGGER.warn("All servers have been isolated, allow one of them based on load balance rule."); child.data(instances); } else { child.data(filteredServers); } parent.child("filterred", child); return child; }
@Override public DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> instances = parent.data(); Invocation invocation = context.getInputParameters(); if (!Configuration.INSTANCE.isIsolationFilterOpen(invocation.getMicroserviceName())) { return parent; } Map<String, MicroserviceInstance> filteredServers = new HashMap<>(); for (String key : instances.keySet()) { MicroserviceInstance instance = instances.get(key); if (allowVisit(invocation, instance)) { filteredServers.put(key, instance); } } DiscoveryTreeNode child = new DiscoveryTreeNode().data(filteredServers); parent.child("filterred", child); return child; }
@Override protected void init(DiscoveryContext context, DiscoveryTreeNode parent) { Map<String, MicroserviceInstance> matchedInstance = new HashMap<>(); Invocation invocation = context.getInputParameters(); Map<String, MicroserviceInstance> instances = parent.data(); Map<String, String> filterOptions = Configuration.INSTANCE.getFlowsplitFilterOptions(invocation.getMicroserviceName()); for (String id : instances.keySet()) { MicroserviceInstance target = instances.get(id); if (allowVisit(target, filterOptions)) { matchedInstance.put(id, target); } } parent.child(MATCHED, new DiscoveryTreeNode() .subName(parent, MATCHED) .data(matchedInstance)); }