You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2013/06/21 18:51:00 UTC
svn commit: r1495508 - in /zookeeper/bookkeeper/trunk: ./
bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/
bookkeeper-server/src/main/java/org/apache/bookkeeper/client/
bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/
Author: ivank
Date: Fri Jun 21 16:51:00 2013
New Revision: 1495508
URL: http://svn.apache.org/r1495508
Log:
BOOKKEEPER-619: Bookie should not create local cookie files if zookeeper is uninitialized (ivank)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1495508&r1=1495507&r2=1495508&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Fri Jun 21 16:51:00 2013
@@ -30,6 +30,8 @@ Trunk (unreleased changes)
BOOKKEEPER-617: BOOKKEEPER-544 breaks hedwig-server/bin/hedwig script (ivank)
+ BOOKKEEPER-619: Bookie should not create local cookie files if zookeeper is uninitialized (ivank)
+
bookkeeper-server:
BOOKKEEPER-567: ReadOnlyBookieTest hangs on shutdown (sijie via ivank)
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java?rev=1495508&r1=1495507&r2=1495508&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java Fri Jun 21 16:51:00 2013
@@ -367,6 +367,12 @@ public class Bookie extends Thread {
private String getInstanceId(ZooKeeper zk) throws KeeperException,
InterruptedException {
String instanceId = null;
+ if (zk.exists(conf.getZkLedgersRootPath(), null) == null) {
+ LOG.error("BookKeeper metadata doesn't exist in zookeeper. "
+ + "Has the cluster been initialized? "
+ + "Try running bin/bookkeeper shell metaformat");
+ throw new KeeperException.NoNodeException("BookKeeper metadata");
+ }
try {
byte[] data = zk.getData(conf.getZkLedgersRootPath() + "/"
+ BookKeeperConstants.INSTANCEID, false, null);
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java?rev=1495508&r1=1495507&r2=1495508&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java Fri Jun 21 16:51:00 2013
@@ -750,7 +750,9 @@ public class BookKeeperAdmin {
} else {
// Confirm with the admin.
confirm = IOUtils
- .confirmPrompt("Are you sure to format bookkeeper metadata ?");
+ .confirmPrompt("Ledger root already exists. "
+ +"Are you sure to format bookkeeper metadata? "
+ +"This may cause data loss.");
}
if (!confirm) {
LOG.error("BookKeeper metadata Format aborted!!");
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java?rev=1495508&r1=1495507&r2=1495508&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java Fri Jun 21 16:51:00 2013
@@ -34,7 +34,9 @@ import junit.framework.Assert;
import org.apache.bookkeeper.bookie.Bookie;
import org.apache.bookkeeper.bookie.BookieException;
+import org.apache.bookkeeper.conf.ClientConfiguration;
import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.client.BookKeeperAdmin;
import org.apache.bookkeeper.proto.BookieServer;
import org.apache.bookkeeper.test.ZooKeeperUtil;
import org.apache.commons.io.FileUtils;
@@ -263,6 +265,41 @@ public class BookieInitializationTest {
}
}
+ /**
+ * Verify that if I try to start a bookie without zk initialized, it won't
+ * prevent me from starting the bookie when zk is initialized
+ */
+ @Test(timeout = 20000)
+ public void testStartBookieWithoutZKInitialized() throws Exception {
+ File tmpDir = File.createTempFile("bookie", "test");
+ tmpDir.delete();
+ tmpDir.mkdir();
+ final String ZK_ROOT = "/ledgers2";
+
+ final ServerConfiguration conf = new ServerConfiguration()
+ .setZkServers(zkutil.getZooKeeperConnectString())
+ .setZkTimeout(5000).setJournalDirName(tmpDir.getPath())
+ .setLedgerDirNames(new String[] { tmpDir.getPath() });
+ conf.setZkLedgersRootPath(ZK_ROOT);
+ try {
+ try {
+ new Bookie(conf);
+ fail("Should throw NoNodeException");
+ } catch (Exception e) {
+ // shouldn't be able to start
+ }
+ ClientConfiguration clientConf = new ClientConfiguration();
+ clientConf.setZkServers(zkutil.getZooKeeperConnectString());
+ clientConf.setZkLedgersRootPath(ZK_ROOT);
+ BookKeeperAdmin.format(clientConf, false, false);
+
+ Bookie b = new Bookie(conf);
+ b.shutdown();
+ } finally {
+ FileUtils.deleteDirectory(tmpDir);
+ }
+ }
+
private void createNewZKClient() throws Exception {
// create a zookeeper client
LOG.debug("Instantiate ZK Client");