You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@bookkeeper.apache.org by GitBox <gi...@apache.org> on 2018/07/31 19:47:12 UTC

[GitHub] ivankelly commented on a change in pull request #1575: Make each ensemble in ensemble list immutable

ivankelly commented on a change in pull request #1575: Make each ensemble in ensemble list immutable
URL: https://github.com/apache/bookkeeper/pull/1575#discussion_r206660056
 
 

 ##########
 File path: bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
 ##########
 @@ -374,18 +375,20 @@ private static void updateEnsembleInfo(
          * Update the ledger metadata's ensemble info to point to the new
          * bookie.
          */
-        ArrayList<BookieSocketAddress> ensemble = lh.getLedgerMetadata()
-                .getEnsembles().get(fragmentStartId);
+        List<BookieSocketAddress> ensemble = lh.getLedgerMetadata().getEnsembles().get(fragmentStartId);
+        List<BookieSocketAddress> newEnsemble = new ArrayList<>(ensemble);
         for (Map.Entry<BookieSocketAddress, BookieSocketAddress> entry : oldBookie2NewBookie.entrySet()) {
-            int deadBookieIndex = ensemble.indexOf(entry.getKey());
+            int deadBookieIndex = newEnsemble.indexOf(entry.getKey());
             // update ensemble info might happen after re-read ledger metadata, so the ensemble might already
             // change. if ensemble is already changed, skip replacing the bookie doesn't exist.
             if (deadBookieIndex >= 0) {
-                ensemble.set(deadBookieIndex, entry.getValue());
+                newEnsemble.set(deadBookieIndex, entry.getValue());
             } else {
                 LOG.info("Bookie {} doesn't exist in ensemble {} anymore.", entry.getKey(), ensemble);
             }
         }
+        List<BookieSocketAddress> immutable = ImmutableList.copyOf(newEnsemble);
+        lh.getLedgerMetadata().updateEnsemble(fragmentStartId, immutable);
 
 Review comment:
   Yes, eventually, though it'll be more a builder pattern.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services