|
61 | 61 | import org.elasticsearch.rest.RestStatus; |
62 | 62 | import org.elasticsearch.transport.TransportSettings; |
63 | 63 |
|
64 | | -import java.util.ArrayList; |
65 | 64 | import java.util.Arrays; |
66 | 65 | import java.util.Collection; |
67 | 66 | import java.util.Collections; |
@@ -372,16 +371,12 @@ public String describeTasks(List<ClusterChangedEvent> tasks) { |
372 | 371 |
|
373 | 372 | @Override |
374 | 373 | public BatchResult<ClusterChangedEvent> execute(ClusterState currentState, List<ClusterChangedEvent> tasks) throws Exception { |
375 | | - ClusterState accumulator = ClusterState.builder(currentState).build(); |
376 | 374 | BatchResult.Builder<ClusterChangedEvent> builder = BatchResult.builder(); |
377 | | - ClusterState.Builder newState = ClusterState.builder(accumulator).incrementVersion(); |
378 | | - boolean clusterStateChanged = updateNodes(accumulator, tasks, newState); |
379 | | - clusterStateChanged |= updateIndicesAndMetaData(accumulator, tasks, newState); |
380 | | - if (clusterStateChanged) { |
381 | | - accumulator = newState.build(); |
382 | | - } |
| 375 | + ClusterState.Builder newState = ClusterState.builder(currentState).incrementVersion(); |
| 376 | + boolean clusterStateChanged = updateNodes(currentState, tasks, newState); |
| 377 | + clusterStateChanged |= updateIndicesAndMetaData(currentState, tasks, newState); |
383 | 378 | builder.successes(tasks); |
384 | | - return builder.build(accumulator); |
| 379 | + return builder.build(clusterStateChanged ? newState.build() : currentState); |
385 | 380 | } |
386 | 381 |
|
387 | 382 | private boolean updateNodes(ClusterState currentState, List<ClusterChangedEvent> tasks, ClusterState.Builder newState) { |
@@ -506,34 +501,19 @@ private boolean updateIndicesAndMetaData(ClusterState currentState, List<Cluster |
506 | 501 |
|
507 | 502 | private boolean updateCustoms(ClusterState currentState, List<ClusterChangedEvent> tasks, MetaData.Builder metaData) { |
508 | 503 | boolean clusterStateChanged = false; |
509 | | - ClusterChangedEvent latestTask = tasks.get(tasks.size() - 1); |
510 | | - final ClusterState tribeClientState = latestTask.state(); |
511 | 504 | Set<String> changedCustomMetaDataTypeSet = tasks.stream() |
512 | 505 | .map(ClusterChangedEvent::changedCustomMetaDataSet) |
513 | 506 | .flatMap(Collection::stream) |
514 | 507 | .collect(Collectors.toSet()); |
515 | 508 | final List<Node> tribeClientNodes = TribeService.this.nodes; |
516 | 509 | Map<String, MetaData.Custom> mergedCustomMetaDataMap = mergeChangedCustomMetaData(changedCustomMetaDataTypeSet, |
517 | | - customMetaDataType -> { |
518 | | - List<MetaData.Custom> tribeCustomMetaDataList = new ArrayList<>(tribeClientNodes.size()); |
519 | | - for (Node tribeClientNode : tribeClientNodes) { |
520 | | - String currentTribeName = TRIBE_NAME_SETTING.get(tribeClientNode.settings()); |
521 | | - final MetaData.Custom custom; |
522 | | - if (currentTribeName.equals(tribeName)) { |
523 | | - // tribe client node that triggered the cluster change event |
524 | | - // use the latest changed state instead of getting the state |
525 | | - // from the tribe client's cluster service |
526 | | - custom = tribeClientState.metaData().custom(customMetaDataType); |
527 | | - } else { |
528 | | - ClusterState currentTribeClientState = getClusterService(tribeClientNode).state(); |
529 | | - custom = currentTribeClientState.metaData().custom(customMetaDataType); |
530 | | - } |
531 | | - if (custom != null && custom instanceof MergableCustomMetaData) { |
532 | | - tribeCustomMetaDataList.add(custom); |
533 | | - } |
534 | | - } |
535 | | - return tribeCustomMetaDataList; |
536 | | - } |
| 510 | + customMetaDataType -> tribeClientNodes.stream() |
| 511 | + .map(TribeService::getClusterService).map(ClusterService::state) |
| 512 | + .map(ClusterState::metaData) |
| 513 | + .map(clusterMetaData -> ((MetaData.Custom) clusterMetaData.custom(customMetaDataType))) |
| 514 | + .filter(custom1 -> custom1 != null && custom1 instanceof MergableCustomMetaData) |
| 515 | + .map(custom2 -> (MergableCustomMetaData) custom2) |
| 516 | + .collect(Collectors.toList()) |
537 | 517 | ); |
538 | 518 | for (String changedCustomMetaDataType : changedCustomMetaDataTypeSet) { |
539 | 519 | MetaData.Custom mergedCustomMetaData = mergedCustomMetaDataMap.get(changedCustomMetaDataType); |
@@ -585,20 +565,15 @@ private static ClusterService getClusterService(Node node) { |
585 | 565 |
|
586 | 566 | // pkg-private for testing |
587 | 567 | static Map<String, MetaData.Custom> mergeChangedCustomMetaData(Set<String> changedCustomMetaDataTypeSet, |
588 | | - Function<String, List<MetaData.Custom>> customMetaDataByTribeNode) { |
| 568 | + Function<String, List<MergableCustomMetaData>> customMetaDataByTribeNode) { |
| 569 | + |
589 | 570 | Map<String, MetaData.Custom> changedCustomMetaDataMap = new HashMap<>(changedCustomMetaDataTypeSet.size()); |
590 | 571 | for (String customMetaDataType : changedCustomMetaDataTypeSet) { |
591 | | - List<MetaData.Custom> tribeCustomMetaDataList = customMetaDataByTribeNode.apply(customMetaDataType); |
592 | | - if (tribeCustomMetaDataList.isEmpty() == false) { |
593 | | - MetaData.Custom mergedCustomMetaData = tribeCustomMetaDataList.get(0); |
594 | | - assert mergedCustomMetaData instanceof MergableCustomMetaData |
595 | | - : "expected to merge only MergableCustomMetaData"; |
596 | | - for (int i = 1; i < tribeCustomMetaDataList.size(); i++) { |
597 | | - MetaData.Custom currentCustom = tribeCustomMetaDataList.get(i); |
598 | | - mergedCustomMetaData = ((MergableCustomMetaData) mergedCustomMetaData).merge(currentCustom); |
599 | | - } |
600 | | - changedCustomMetaDataMap.put(customMetaDataType, mergedCustomMetaData); |
601 | | - } |
| 572 | + customMetaDataByTribeNode.apply(customMetaDataType).stream() |
| 573 | + .reduce((mergableCustomMD, mergableCustomMD2) -> |
| 574 | + ((MergableCustomMetaData) mergableCustomMD.merge((MetaData.Custom) mergableCustomMD2))) |
| 575 | + .ifPresent(mergedCustomMetaData -> |
| 576 | + changedCustomMetaDataMap.put(customMetaDataType, ((MetaData.Custom) mergedCustomMetaData))); |
602 | 577 | } |
603 | 578 | return changedCustomMetaDataMap; |
604 | 579 | } |
|
0 commit comments