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));
+    }
 }