diff --git a/polaris-plugins/polaris-plugins-connector/connector-composite/src/main/java/com/tencent/polaris/plugins/connector/composite/CompositeServiceUpdateTask.java b/polaris-plugins/polaris-plugins-connector/connector-composite/src/main/java/com/tencent/polaris/plugins/connector/composite/CompositeServiceUpdateTask.java index 6c30b1408..d45665298 100644 --- a/polaris-plugins/polaris-plugins-connector/connector-composite/src/main/java/com/tencent/polaris/plugins/connector/composite/CompositeServiceUpdateTask.java +++ b/polaris-plugins/polaris-plugins-connector/connector-composite/src/main/java/com/tencent/polaris/plugins/connector/composite/CompositeServiceUpdateTask.java @@ -106,12 +106,11 @@ public boolean needUpdate() { @Override public void execute() { boolean isServiceUpdateTaskExecuted = false; - for (ServiceUpdateTask serviceUpdateTask : subServiceUpdateTaskMap.values()) { - if ((serviceUpdateTask.getTaskType() == ServiceUpdateTaskConstant.Type.FIRST && serviceUpdateTask.getTaskStatus() == Status.READY) - || serviceUpdateTask.needUpdate()) { + for (Map.Entry entry : subServiceUpdateTaskMap.entrySet()) { + if (canExecute(entry.getKey(), entry.getValue())) { isServiceUpdateTaskExecuted = true; - serviceUpdateTask.setStatus(ServiceUpdateTaskConstant.Status.READY, ServiceUpdateTaskConstant.Status.RUNNING); - serviceUpdateTask.execute(this); + entry.getValue().setStatus(ServiceUpdateTaskConstant.Status.READY, ServiceUpdateTaskConstant.Status.RUNNING); + entry.getValue().execute(this); } } // TODO 全部规则实现完后改成StringUtils.equals(mainConnectorType, SERVER_CONNECTOR_CONSUL) @@ -404,6 +403,15 @@ public boolean notifyServerEvent(ServerEvent serverEvent) { return svcDeleted; } + private boolean canExecute(String connectorType, ServiceUpdateTask serviceUpdateTask) { + boolean canConnectorExecute = StringUtils.equalsIgnoreCase(mainConnectorType, connectorType) + || serviceEventKey.getEventType().equals(EventType.INSTANCE) + || serviceEventKey.getEventType().equals(EventType.SERVICE); + boolean canTaskExecute = (serviceUpdateTask.getTaskType() == ServiceUpdateTaskConstant.Type.FIRST + && serviceUpdateTask.getTaskStatus() == Status.READY) || serviceUpdateTask.needUpdate(); + return canConnectorExecute && canTaskExecute; + } + public boolean notifyServerEventWithRevisionChecking(ServerEvent serverEvent, String revision) { if (serverEvent.getValue() instanceof DiscoverResponse) { if (StringUtils.equals(revision, instanceListMeta.getLastRevision())) {