@@ -242,7 +242,7 @@ public ClusterMetadataManifest writeFullMetadata(ClusterState clusterState, Stri
242
242
final List <UploadedIndexMetadata > allUploadedIndexMetadata = writeIndexMetadataParallel (
243
243
clusterState ,
244
244
toUpload ,
245
- ClusterState . UNKNOWN_UUID . equals ( previousClusterUUID ) ? toUpload : Collections .emptyList ()
245
+ Collections .emptyMap ()
246
246
);
247
247
final ClusterMetadataManifest manifest = uploadManifest (
248
248
clusterState ,
@@ -307,9 +307,9 @@ public ClusterMetadataManifest writeIncrementalMetadata(
307
307
}
308
308
309
309
// Write Index Metadata
310
- final Map <String , Long > previousStateIndexMetadataVersionByName = new HashMap <>();
310
+ final Map <String , IndexMetadata > previousStateIndexMetadataByName = new HashMap <>();
311
311
for (final IndexMetadata indexMetadata : previousClusterState .metadata ().indices ().values ()) {
312
- previousStateIndexMetadataVersionByName .put (indexMetadata .getIndex ().getName (), indexMetadata . getVersion () );
312
+ previousStateIndexMetadataByName .put (indexMetadata .getIndex ().getName (), indexMetadata );
313
313
}
314
314
315
315
int numIndicesUpdated = 0 ;
@@ -319,9 +319,12 @@ public ClusterMetadataManifest writeIncrementalMetadata(
319
319
.collect (Collectors .toMap (UploadedIndexMetadata ::getIndexName , Function .identity ()));
320
320
321
321
List <IndexMetadata > toUpload = new ArrayList <>();
322
- List <IndexMetadata > newIndexMetadataList = new ArrayList <>();
322
+ // We prepare a map that contains the previous index metadata for the indexes for which version has changed.
323
+ Map <String , IndexMetadata > prevIndexMetadataByName = new HashMap <>();
323
324
for (final IndexMetadata indexMetadata : clusterState .metadata ().indices ().values ()) {
324
- final Long previousVersion = previousStateIndexMetadataVersionByName .get (indexMetadata .getIndex ().getName ());
325
+ String indexName = indexMetadata .getIndex ().getName ();
326
+ final IndexMetadata prevIndexMetadata = previousStateIndexMetadataByName .get (indexName );
327
+ Long previousVersion = prevIndexMetadata != null ? prevIndexMetadata .getVersion () : null ;
325
328
if (previousVersion == null || indexMetadata .getVersion () != previousVersion ) {
326
329
logger .debug (
327
330
"updating metadata for [{}], changing version from [{}] to [{}]" ,
@@ -331,22 +334,19 @@ public ClusterMetadataManifest writeIncrementalMetadata(
331
334
);
332
335
numIndicesUpdated ++;
333
336
toUpload .add (indexMetadata );
337
+ prevIndexMetadataByName .put (indexName , prevIndexMetadata );
334
338
} else {
335
339
numIndicesUnchanged ++;
336
340
}
337
- previousStateIndexMetadataVersionByName .remove (indexMetadata .getIndex ().getName ());
338
- // Adding the indexMetadata to newIndexMetadataList if there is no previous version present for the index.
339
- if (previousVersion == null ) {
340
- newIndexMetadataList .add (indexMetadata );
341
- }
341
+ previousStateIndexMetadataByName .remove (indexMetadata .getIndex ().getName ());
342
342
}
343
343
344
- List <UploadedIndexMetadata > uploadedIndexMetadataList = writeIndexMetadataParallel (clusterState , toUpload , newIndexMetadataList );
344
+ List <UploadedIndexMetadata > uploadedIndexMetadataList = writeIndexMetadataParallel (clusterState , toUpload , prevIndexMetadataByName );
345
345
uploadedIndexMetadataList .forEach (
346
346
uploadedIndexMetadata -> allUploadedIndexMetadata .put (uploadedIndexMetadata .getIndexName (), uploadedIndexMetadata )
347
347
);
348
348
349
- for (String removedIndexName : previousStateIndexMetadataVersionByName .keySet ()) {
349
+ for (String removedIndexName : previousStateIndexMetadataByName .keySet ()) {
350
350
allUploadedIndexMetadata .remove (removedIndexName );
351
351
}
352
352
final ClusterMetadataManifest manifest = uploadManifest (
@@ -452,7 +452,7 @@ private String writeGlobalMetadata(ClusterState clusterState) throws IOException
452
452
private List <UploadedIndexMetadata > writeIndexMetadataParallel (
453
453
ClusterState clusterState ,
454
454
List <IndexMetadata > toUpload ,
455
- List < IndexMetadata > newIndexMetadataList
455
+ Map < String , IndexMetadata > prevIndexMetadataByName
456
456
) throws IOException {
457
457
assert Objects .nonNull (indexMetadataUploadListeners ) : "indexMetadataUploadListeners can not be null" ;
458
458
int latchCount = toUpload .size () + indexMetadataUploadListeners .size ();
@@ -482,7 +482,7 @@ private List<UploadedIndexMetadata> writeIndexMetadataParallel(
482
482
writeIndexMetadataAsync (clusterState , indexMetadata , latchedActionListener );
483
483
}
484
484
485
- invokeIndexMetadataUploadListeners (newIndexMetadataList , latch , exceptionList );
485
+ invokeIndexMetadataUploadListeners (toUpload , prevIndexMetadataByName , latch , exceptionList );
486
486
487
487
try {
488
488
if (latch .await (getIndexMetadataUploadTimeout ().millis (), TimeUnit .MILLISECONDS ) == false ) {
@@ -527,22 +527,25 @@ private List<UploadedIndexMetadata> writeIndexMetadataParallel(
527
527
* Invokes the index metadata upload listener but does not wait for the execution to complete.
528
528
*/
529
529
private void invokeIndexMetadataUploadListeners (
530
- List <IndexMetadata > newIndexMetadataList ,
530
+ List <IndexMetadata > updatedIndexMetadataList ,
531
+ Map <String , IndexMetadata > prevIndexMetadataByName ,
531
532
CountDownLatch latch ,
532
533
List <Exception > exceptionList
533
534
) {
534
535
for (IndexMetadataUploadListener listener : indexMetadataUploadListeners ) {
535
536
String listenerName = listener .getClass ().getSimpleName ();
536
- listener .onNewIndexUpload (
537
- newIndexMetadataList ,
538
- getIndexMetadataUploadActionListener (newIndexMetadataList , latch , exceptionList , listenerName )
537
+ listener .onUpload (
538
+ updatedIndexMetadataList ,
539
+ prevIndexMetadataByName ,
540
+ getIndexMetadataUploadActionListener (updatedIndexMetadataList , prevIndexMetadataByName , latch , exceptionList , listenerName )
539
541
);
540
542
}
541
543
542
544
}
543
545
544
546
private ActionListener <Void > getIndexMetadataUploadActionListener (
545
547
List <IndexMetadata > newIndexMetadataList ,
548
+ Map <String , IndexMetadata > prevIndexMetadataByName ,
546
549
CountDownLatch latch ,
547
550
List <Exception > exceptionList ,
548
551
String listenerName
@@ -552,18 +555,20 @@ private ActionListener<Void> getIndexMetadataUploadActionListener(
552
555
ActionListener .wrap (
553
556
ignored -> logger .trace (
554
557
new ParameterizedMessage (
555
- "{} : Invoked listener ={} successfully tookTimeNs={}" ,
558
+ "listener= {} : Invoked successfully with indexMetadataList ={} prevIndexMetadataList={} tookTimeNs={}" ,
556
559
listenerName ,
557
560
newIndexMetadataList ,
561
+ prevIndexMetadataByName .values (),
558
562
(System .nanoTime () - startTime )
559
563
)
560
564
),
561
565
ex -> {
562
566
logger .error (
563
567
new ParameterizedMessage (
564
- "{} : Exception during invocation of listener ={} tookTimeNs={}" ,
568
+ "listener= {} : Exception during invocation with indexMetadataList={} prevIndexMetadataList ={} tookTimeNs={}" ,
565
569
listenerName ,
566
570
newIndexMetadataList ,
571
+ prevIndexMetadataByName .values (),
567
572
(System .nanoTime () - startTime )
568
573
),
569
574
ex
0 commit comments