84
84
import java .util .concurrent .TimeUnit ;
85
85
import java .util .concurrent .atomic .AtomicBoolean ;
86
86
import java .util .concurrent .atomic .AtomicReference ;
87
+ import java .util .function .Consumer ;
87
88
import java .util .function .Function ;
88
89
import java .util .function .LongSupplier ;
89
90
import java .util .function .Supplier ;
@@ -1202,6 +1203,51 @@ ClusterState readClusterStateInParallel(
1202
1203
Map <String , UploadedMetadataAttribute > clusterStateCustomToRead ,
1203
1204
boolean readIndexRoutingTableDiff ,
1204
1205
boolean includeEphemeral
1206
+ ) {
1207
+ return readClusterStateInParallel (
1208
+ previousState ,
1209
+ manifest ,
1210
+ clusterUUID ,
1211
+ localNodeId ,
1212
+ indicesToRead ,
1213
+ customToRead ,
1214
+ readCoordinationMetadata ,
1215
+ readSettingsMetadata ,
1216
+ readTransientSettingsMetadata ,
1217
+ readTemplatesMetadata ,
1218
+ readDiscoveryNodes ,
1219
+ readClusterBlocks ,
1220
+ indicesRoutingToRead ,
1221
+ readHashesOfConsistentSettings ,
1222
+ clusterStateCustomToRead ,
1223
+ readIndexRoutingTableDiff ,
1224
+ includeEphemeral ,
1225
+ (metadataBuilder ) -> {},
1226
+ (routingTable ) -> {}
1227
+ );
1228
+ }
1229
+
1230
+ // package private for testing
1231
+ ClusterState readClusterStateInParallel (
1232
+ ClusterState previousState ,
1233
+ ClusterMetadataManifest manifest ,
1234
+ String clusterUUID ,
1235
+ String localNodeId ,
1236
+ List <UploadedIndexMetadata > indicesToRead ,
1237
+ Map <String , UploadedMetadataAttribute > customToRead ,
1238
+ boolean readCoordinationMetadata ,
1239
+ boolean readSettingsMetadata ,
1240
+ boolean readTransientSettingsMetadata ,
1241
+ boolean readTemplatesMetadata ,
1242
+ boolean readDiscoveryNodes ,
1243
+ boolean readClusterBlocks ,
1244
+ List <UploadedIndexMetadata > indicesRoutingToRead ,
1245
+ boolean readHashesOfConsistentSettings ,
1246
+ Map <String , UploadedMetadataAttribute > clusterStateCustomToRead ,
1247
+ boolean readIndexRoutingTableDiff ,
1248
+ boolean includeEphemeral ,
1249
+ Consumer <Metadata .Builder > metadataTransformer ,
1250
+ Consumer <RoutingTable > routingTableTransformer
1205
1251
) {
1206
1252
int totalReadTasks = indicesToRead .size () + customToRead .size () + (readCoordinationMetadata ? 1 : 0 ) + (readSettingsMetadata
1207
1253
? 1
@@ -1467,12 +1513,11 @@ ClusterState readClusterStateInParallel(
1467
1513
});
1468
1514
1469
1515
metadataBuilder .indices (indexMetadataMap );
1516
+ metadataTransformer .accept (metadataBuilder );
1470
1517
if (readDiscoveryNodes ) {
1471
1518
clusterStateBuilder .nodes (discoveryNodesBuilder .get ().localNodeId (localNodeId ));
1472
1519
}
1473
1520
1474
- clusterStateBuilder .metadata (metadataBuilder ).version (manifest .getStateVersion ()).stateUUID (manifest .getStateUUID ());
1475
-
1476
1521
readIndexRoutingTableResults .forEach (
1477
1522
indexRoutingTable -> indicesRouting .put (indexRoutingTable .getIndex ().getName (), indexRoutingTable )
1478
1523
);
@@ -1481,8 +1526,12 @@ ClusterState readClusterStateInParallel(
1481
1526
if (routingTableDiff != null ) {
1482
1527
newRoutingTable = routingTableDiff .apply (previousState .getRoutingTable ());
1483
1528
}
1484
- clusterStateBuilder . routingTable (newRoutingTable );
1529
+ routingTableTransformer . accept (newRoutingTable );
1485
1530
1531
+ clusterStateBuilder .metadata (metadataBuilder )
1532
+ .routingTable (newRoutingTable )
1533
+ .version (manifest .getStateVersion ())
1534
+ .stateUUID (manifest .getStateUUID ());
1486
1535
return clusterStateBuilder .build ();
1487
1536
}
1488
1537
@@ -1638,41 +1687,40 @@ public ClusterState getClusterStateUsingDiff(ClusterMetadataManifest manifest, C
1638
1687
manifest .getDiffManifest () != null
1639
1688
&& manifest .getDiffManifest ().getIndicesRoutingDiffPath () != null
1640
1689
&& !manifest .getDiffManifest ().getIndicesRoutingDiffPath ().isEmpty (),
1641
- includeEphemeral
1690
+ includeEphemeral ,
1691
+ (metadataBuilder ) -> {
1692
+ // remove the deleted indices from the metadata
1693
+ for (String index : diff .getIndicesDeleted ()) {
1694
+ metadataBuilder .remove (index );
1695
+ }
1696
+ // remove the deleted metadata customs from the metadata
1697
+ if (diff .getCustomMetadataDeleted () != null ) {
1698
+ for (String customType : diff .getCustomMetadataDeleted ()) {
1699
+ metadataBuilder .removeCustom (customType );
1700
+ }
1701
+ }
1702
+ },
1703
+ (routingTable ) -> {
1704
+ Map <String , IndexRoutingTable > indexRoutingTables = routingTable .getIndicesRouting ();
1705
+ if (manifest .getCodecVersion () == CODEC_V2 || manifest .getCodecVersion () == CODEC_V3 ) {
1706
+ for (String indexName : diff .getIndicesRoutingDeleted ()) {
1707
+ indexRoutingTables .remove (indexName );
1708
+ }
1709
+ }
1710
+ }
1642
1711
);
1643
1712
ClusterState .Builder clusterStateBuilder = ClusterState .builder (updatedClusterState );
1644
- Metadata .Builder metadataBuilder = Metadata .builder (updatedClusterState .metadata ());
1645
- // remove the deleted indices from the metadata
1646
- for (String index : diff .getIndicesDeleted ()) {
1647
- metadataBuilder .remove (index );
1648
- }
1649
- // remove the deleted metadata customs from the metadata
1650
- if (diff .getCustomMetadataDeleted () != null ) {
1651
- for (String customType : diff .getCustomMetadataDeleted ()) {
1652
- metadataBuilder .removeCustom (customType );
1653
- }
1654
- }
1655
-
1656
1713
// remove the deleted cluster state customs from the metadata
1657
1714
if (diff .getClusterStateCustomDeleted () != null ) {
1658
1715
for (String customType : diff .getClusterStateCustomDeleted ()) {
1659
1716
clusterStateBuilder .removeCustom (customType );
1660
1717
}
1661
1718
}
1662
1719
1663
- HashMap <String , IndexRoutingTable > indexRoutingTables = new HashMap <>(
1664
- updatedClusterState .getRoutingTable ().getIndicesRouting ()
1665
- );
1666
- if (manifest .getCodecVersion () == CODEC_V2 || manifest .getCodecVersion () == CODEC_V3 ) {
1667
- for (String indexName : diff .getIndicesRoutingDeleted ()) {
1668
- indexRoutingTables .remove (indexName );
1669
- }
1670
- }
1671
-
1672
1720
ClusterState clusterState = clusterStateBuilder .stateUUID (manifest .getStateUUID ())
1673
1721
.version (manifest .getStateVersion ())
1674
- .metadata (metadataBuilder )
1675
- .routingTable (new RoutingTable ( manifest . getRoutingTableVersion (), indexRoutingTables ))
1722
+ .metadata (updatedClusterState . metadata () )
1723
+ .routingTable (updatedClusterState . routingTable ( ))
1676
1724
.build ();
1677
1725
if (!remoteClusterStateValidationMode .equals (RemoteClusterStateValidationMode .NONE )
1678
1726
&& manifest .getClusterStateChecksum () != null ) {
0 commit comments