This is an automated email from the ASF dual-hosted git repository. yong pushed a commit to branch branch-4.15 in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
commit 84ff7d599da98cd172b30ed9c51083b0d01d8f8d Author: Raúl Gracia <[email protected]> AuthorDate: Tue Jun 7 12:53:54 2022 +0200 Consider consider Bookie ID when validating the Cookie. (#3308) Signed-off-by: Raúl Gracia <[email protected]> (cherry picked from commit b477f8d506ea493f211dfc96e40d647f5254d3ca) --- .../bookkeeper/bookie/LegacyCookieValidation.java | 37 ++++++++++++---------- .../org/apache/bookkeeper/bookie/CookieTest.java | 24 ++++++++++++++ 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LegacyCookieValidation.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LegacyCookieValidation.java index 481e34294c..803d48e1aa 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LegacyCookieValidation.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LegacyCookieValidation.java @@ -136,23 +136,28 @@ public class LegacyCookieValidation implements CookieValidation { // we are checking all possibilities here, so we don't need to fail if we can only get // loopback address. it will fail anyway when the bookie attempts to listen on loopback address. try { - // ip address - addresses.add(BookieImpl.getBookieAddress( - new ServerConfiguration(conf) - .setUseHostNameAsBookieID(false) - .setAdvertisedAddress(null) - .setAllowLoopback(true) - ).toBookieId()); - // host name - addresses.add(BookieImpl.getBookieAddress( - new ServerConfiguration(conf) - .setUseHostNameAsBookieID(true) - .setAdvertisedAddress(null) - .setAllowLoopback(true) - ).toBookieId()); - // advertised address - if (null != conf.getAdvertisedAddress()) { + if (null != conf.getBookieId()) { + // If BookieID is configured, it takes precedence over default network information used as id. addresses.add(BookieImpl.getBookieId(conf)); + } else { + // ip address + addresses.add(BookieImpl.getBookieAddress( + new ServerConfiguration(conf) + .setUseHostNameAsBookieID(false) + .setAdvertisedAddress(null) + .setAllowLoopback(true) + ).toBookieId()); + // host name + addresses.add(BookieImpl.getBookieAddress( + new ServerConfiguration(conf) + .setUseHostNameAsBookieID(true) + .setAdvertisedAddress(null) + .setAllowLoopback(true) + ).toBookieId()); + // advertised address + if (null != conf.getAdvertisedAddress()) { + addresses.add(BookieImpl.getBookieAddress(conf).toBookieId()); + } } } catch (UnknownHostException e) { throw new BookieException.UnknownBookieIdException(e); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java index 0bbdeab9ff..5dd353bfad 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieTest.java @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Random; import java.util.Set; import org.apache.bookkeeper.bookie.BookieException.InvalidCookieException; import org.apache.bookkeeper.client.BookKeeperAdmin; @@ -52,6 +53,7 @@ import org.apache.bookkeeper.versioning.LongVersion; import org.apache.bookkeeper.versioning.Version; import org.apache.bookkeeper.versioning.Versioned; import org.apache.commons.io.FileUtils; +import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; @@ -755,4 +757,26 @@ public class CookieTest extends BookKeeperClusterTestCase { Cookie cookie = zkCookie.getValue(); cookie.deleteFromRegistrationManager(rm, conf, zkCookie.getVersion()); } + + /** + * Tests that custom Bookie Id is properly set in the Cookie (via {@link LegacyCookieValidation}). + */ + @Test + public void testBookieIdSetting() throws Exception { + final String customBookieId = "myCustomBookieId" + new Random().nextInt(); + ServerConfiguration conf = TestBKConfiguration.newServerConfiguration(); + conf.setJournalDirName(newDirectory()) + .setLedgerDirNames(new String[] { newDirectory() , newDirectory() }) + .setBookiePort(bookiePort) + .setBookieId(customBookieId) + .setMetadataServiceUri(zkUtil.getMetadataServiceUri()); + validateConfig(conf); + Versioned<Cookie> zkCookie = Cookie.readFromRegistrationManager(rm, conf); + Version version1 = zkCookie.getVersion(); + assertTrue("Invalid type expected ZkVersion type", + version1 instanceof LongVersion); + Cookie cookie = zkCookie.getValue(); + cookie.writeToRegistrationManager(rm, conf, version1); + Assert.assertTrue(cookie.toString().contains(customBookieId)); + } }
