sijie closed pull request #1760: Kill LedgerMetadata#isConflictWith URL: https://github.com/apache/bookkeeper/pull/1760
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java index 8c5e3b8515..aabae8ffc3 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java @@ -34,7 +34,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -683,66 +682,6 @@ public static boolean areByteArrayValMapsEqual(Map<String, byte[]> first, Map<St return true; } - /** - * Is the metadata conflict with new updated metadata. - * - * @param newMeta - * Re-read metadata - * @return true if the metadata is conflict. - */ - boolean isConflictWith(LedgerMetadata newMeta) { - /* - * if length & close have changed, then another client has - * opened the ledger, can't resolve this conflict. - */ - - if (metadataFormatVersion != newMeta.metadataFormatVersion - || ensembleSize != newMeta.ensembleSize - || writeQuorumSize != newMeta.writeQuorumSize - || ackQuorumSize != newMeta.ackQuorumSize - || length != newMeta.length - || state != newMeta.state - || !digestType.equals(newMeta.digestType) - || !Arrays.equals(password, newMeta.password) - || !LedgerMetadata.areByteArrayValMapsEqual(customMetadata, newMeta.customMetadata)) { - return true; - } - - // verify the ctime - if (storeSystemtimeAsLedgerCreationTime != newMeta.storeSystemtimeAsLedgerCreationTime) { - return true; - } else if (storeSystemtimeAsLedgerCreationTime) { - return ctime != newMeta.ctime; - } - - if (state == LedgerMetadataFormat.State.CLOSED - && lastEntryId != newMeta.lastEntryId) { - return true; - } - // if ledger is closed, we can just take the new ensembles - if (newMeta.state != LedgerMetadataFormat.State.CLOSED) { - // allow new metadata to be one ensemble less than current metadata - // since ensemble change might kick in when recovery changed metadata - int diff = ensembles.size() - newMeta.ensembles.size(); - if (0 != diff && 1 != diff) { - return true; - } - // ensemble distribution should be same - // we don't check the detail ensemble, since new bookie will be set - // using recovery tool. - Iterator<Long> keyIter = ensembles.keySet().iterator(); - Iterator<Long> newMetaKeyIter = newMeta.ensembles.keySet().iterator(); - for (int i = 0; i < newMeta.ensembles.size(); i++) { - Long curKey = keyIter.next(); - Long newMetaKey = newMetaKeyIter.next(); - if (!curKey.equals(newMetaKey)) { - return true; - } - } - } - return false; - } - @Override public String toString() { return toStringRepresentation(true); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java index dc947dde72..5f802cb604 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java @@ -99,62 +99,6 @@ public void testStoreSystemtimeAsLedgerCtimeDisabled() assertFalse(format.hasCtime()); } - @Test - public void testIsConflictWithStoreSystemtimeAsLedgerCtimeDisabled() { - LedgerMetadata lm1 = new LedgerMetadata( - 3, - 3, - 2, - DigestType.CRC32, - passwd, - Collections.emptyMap(), - false); - LedgerMetadata lm2 = new LedgerMetadata(lm1); - - lm1.setCtime(1L); - lm2.setCtime(2L); - assertFalse(lm1.isConflictWith(lm2)); - } - - @Test - public void testIsConflictWithStoreSystemtimeAsLedgerCtimeEnabled() { - LedgerMetadata lm1 = new LedgerMetadata( - 3, - 3, - 2, - DigestType.CRC32, - passwd, - Collections.emptyMap(), - true); - LedgerMetadata lm2 = new LedgerMetadata(lm1); - - lm1.setCtime(1L); - lm2.setCtime(2L); - assertTrue(lm1.isConflictWith(lm2)); - } - - @Test - public void testIsConflictWithDifferentStoreSystemtimeAsLedgerCtimeFlags() { - LedgerMetadata lm1 = new LedgerMetadata( - 3, - 3, - 2, - DigestType.CRC32, - passwd, - Collections.emptyMap(), - true); - LedgerMetadata lm2 = new LedgerMetadata( - 3, - 3, - 2, - DigestType.CRC32, - passwd, - Collections.emptyMap(), - false); - - assertTrue(lm1.isConflictWith(lm2)); - } - @Test public void testToString() { LedgerMetadata lm1 = new LedgerMetadata( diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java index 6eca0de22f..fa184972da 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java @@ -97,9 +97,6 @@ private int getUpdatedLedgersCount(BookKeeper bk, List<LedgerHandle> ledgers, Bo List<BookieSocketAddress> ensemble; int updatedLedgersCount = 0; for (LedgerHandle lh : ledgers) { - // ledger#close() would hit BadVersion exception as rename - // increments cversion. But LedgerMetadata#isConflictWith() - // gracefully handles this conflicts. lh.close(); LedgerHandle openLedger = bk.openLedger(lh.getId(), digestType, PASSWORD.getBytes()); ensemble = openLedger.getLedgerMetadata().getEnsemble(0); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerOpTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerOpTest.java index 91628e7e8d..2830a2c97d 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerOpTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerOpTest.java @@ -110,9 +110,6 @@ public void testManyLedgers(boolean useShortHostName) throws Exception { updateLedgerOp.updateBookieIdInLedgers(curBookieAddr, toBookieAddr, 5, Integer.MIN_VALUE, progressable); for (LedgerHandle lh : ledgers) { - // ledger#close() would hit BadVersion exception as rename - // increments cversion. But LedgerMetadata#isConflictWith() - // gracefully handles this conflicts. lh.close(); LedgerHandle openLedger = bk.openLedger(lh.getId(), digestType, PASSWORD.getBytes()); ensemble = openLedger.getLedgerMetadata().getEnsemble(0); @@ -218,9 +215,6 @@ public void testChangeEnsembleAfterRenaming(boolean useShortHostName) throws Exc bsConfs.add(serverConf1); bs.add(startBookie(serverConf1)); - // ledger#asyncAddEntry() would hit BadVersion exception as rename incr - // cversion. But LedgerMetadata#isConflictWith() gracefully handles - // this conflicts. final CountDownLatch latch = new CountDownLatch(1); final AtomicInteger rc = new AtomicInteger(BKException.Code.OK); lh.asyncAddEntry("foobar".getBytes(), new AddCallback() { @@ -304,9 +298,6 @@ private int getUpdatedLedgersCount(BookKeeper bk, List<LedgerHandle> ledgers, Bo List<BookieSocketAddress> ensemble; int updatedLedgersCount = 0; for (LedgerHandle lh : ledgers) { - // ledger#close() would hit BadVersion exception as rename - // increments cversion. But LedgerMetadata#isConflictWith() - // gracefully handles this conflicts. lh.close(); LedgerHandle openLedger = bk.openLedger(lh.getId(), digestType, PASSWORD.getBytes()); ensemble = openLedger.getLedgerMetadata().getEnsemble(0); ---------------------------------------------------------------- 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: us...@infra.apache.org With regards, Apache Git Services