Skip to content

Commit a7e3c28

Browse files
committed
indexDir compatible fix for issue #3430
1 parent 442e3bb commit a7e3c28

2 files changed

Lines changed: 36 additions & 9 deletions

File tree

bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.apache.bookkeeper.versioning.LongVersion;
5151
import org.apache.bookkeeper.versioning.Version;
5252
import org.apache.bookkeeper.versioning.Versioned;
53+
import org.apache.commons.lang3.StringUtils;
5354
import org.slf4j.Logger;
5455
import org.slf4j.LoggerFactory;
5556

@@ -137,18 +138,14 @@ private boolean verifyLedgerDirs(Cookie c, boolean checkIfSuperSet) {
137138
}
138139

139140
private boolean verifyIndexDirs(Cookie c, boolean checkIfSuperSet) {
140-
// Compatible with old cookie
141-
if (null == indexDirs && null == c.indexDirs) {
142-
return true;
143-
}
144-
if (null == indexDirs || null == c.indexDirs) {
145-
return false;
146-
}
141+
// compatible logic: existed node's cookie has no indexDirs, but indexDirs's default value equals ledgerDirs
142+
String indexDirsInConfig = StringUtils.isNotBlank(indexDirs) ? indexDirs : ledgerDirs;
143+
String indexDirsInCookie = StringUtils.isNotBlank(c.indexDirs) ? c.indexDirs : c.ledgerDirs;
147144

148145
if (!checkIfSuperSet) {
149-
return indexDirs.equals(c.indexDirs);
146+
return indexDirsInConfig.equals(indexDirsInCookie);
150147
} else {
151-
return isSuperSet(decodeDirPathFromCookie(indexDirs), decodeDirPathFromCookie(c.indexDirs));
148+
return isSuperSet(decodeDirPathFromCookie(indexDirsInConfig), decodeDirPathFromCookie(indexDirsInCookie));
152149
}
153150
}
154151

bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CookieIndexDirTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,4 +970,34 @@ public void testBookieIdSetting() throws Exception {
970970
cookie.writeToRegistrationManager(rm, conf, version1);
971971
Assert.assertTrue(cookie.toString().contains(customBookieId));
972972
}
973+
974+
/**
975+
* Compatibility test
976+
* 1. First create bookie without indexDirName
977+
* 2. Configure indexDirName to start bookie
978+
*/
979+
@Test
980+
public void testNewBookieStartingWithOldCookie() throws Exception {
981+
String journalDir = newDirectory();
982+
String[] ledgerDirs = {newDirectory(), newDirectory()};
983+
ServerConfiguration conf = TestBKConfiguration.newServerConfiguration();
984+
conf.setJournalDirName(journalDir)
985+
.setLedgerDirNames(ledgerDirs)
986+
.setBookiePort(bookiePort)
987+
.setMetadataServiceUri(zkUtil.getMetadataServiceUri());
988+
validateConfig(conf);
989+
990+
conf = TestBKConfiguration.newServerConfiguration();
991+
conf.setJournalDirName(journalDir)
992+
.setLedgerDirNames(ledgerDirs)
993+
.setIndexDirName(ledgerDirs)
994+
.setBookiePort(bookiePort)
995+
.setMetadataServiceUri(zkUtil.getMetadataServiceUri());
996+
try {
997+
validateConfig(conf);
998+
} catch (InvalidCookieException ice) {
999+
// error behaviour
1000+
fail("Validate failed, error info: " + ice.getMessage());
1001+
}
1002+
}
9731003
}

0 commit comments

Comments
 (0)