You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by yo...@apache.org on 2022/08/01 13:44:59 UTC
[bookkeeper] 13/17: Consider consider Bookie ID when validating the Cookie. (#3308)
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 <ra...@emc.com>
AuthorDate: Tue Jun 7 12:53:54 2022 +0200
Consider consider Bookie ID when validating the Cookie. (#3308)
Signed-off-by: Raúl Gracia <ra...@emc.com>
(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));
+ }
}