bookkeeper git commit: BOOKKEEPER-850: Use nanoseconds to calculate poll timeout when doing group commit (Matteo Merli via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master 6622b46d4 - fe6259c7e


BOOKKEEPER-850: Use nanoseconds to calculate poll timeout when doing group 
commit (Matteo Merli via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/fe6259c7
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/fe6259c7
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/fe6259c7

Branch: refs/heads/master
Commit: fe6259c7eade644c8d2a5e96aba61c1792d64843
Parents: 6622b46
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 00:23:48 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 00:23:48 2015 -0700

--
 CHANGES.txt |  2 ++
 .../org/apache/bookkeeper/bookie/Journal.java   | 20 +++-
 2 files changed, 13 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/fe6259c7/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 308a0a4..c36151d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -69,6 +69,8 @@ Trunk (unreleased changes)
 
   BOOKKEEPER-849: Collect stats with sub-milliseconds precision (Matteo 
Merli via sijie)
 
+  BOOKKEEPER-850: Use nanoseconds to calculate poll timeout when doing 
group commit (Matteo Merli via sijie)
+
   bookkeeper-client:
 
 BOOKKEEPER-810: Allow to configure TCP connect timeout (Charles Xie 
via sijie)

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/fe6259c7/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java
index cc61aa5..48e5f55 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java
@@ -494,7 +494,7 @@ class Journal extends BookieCriticalThread implements 
CheckpointSource {
 final ServerConfiguration conf;
 final ForceWriteThread forceWriteThread;
 // Time after which we will stop grouping and issue the flush
-private final long maxGroupWaitInMSec;
+private final long maxGroupWaitInNanos;
 // Threshold after which we flush any buffered journal entries
 private final long bufferedEntriesThreshold;
 // Threshold after which we flush any buffered journal writes
@@ -546,7 +546,7 @@ class Journal extends BookieCriticalThread implements 
CheckpointSource {
 this.journalWriteBufferSize = conf.getJournalWriteBufferSizeKB() * KB;
 this.maxBackupJournals = conf.getMaxBackupJournals();
 this.forceWriteThread = new ForceWriteThread(this, 
conf.getJournalAdaptiveGroupWrites());
-this.maxGroupWaitInMSec = conf.getJournalMaxGroupWaitMSec();
+this.maxGroupWaitInNanos = 
TimeUnit.MILLISECONDS.toNanos(conf.getJournalMaxGroupWaitMSec());
 this.bufferedWritesThreshold = 
conf.getJournalBufferedWritesThreshold();
 this.bufferedEntriesThreshold = 
conf.getJournalBufferedEntriesThreshold();
 this.cbThreadPool = 
Executors.newFixedThreadPool(conf.getNumJournalCallbackThreads(),
@@ -554,7 +554,7 @@ class Journal extends BookieCriticalThread implements 
CheckpointSource {
 
 // Unless there is a cap on the max wait (which requires group force 
writes)
 // we cannot skip flushing for queue empty
-this.flushWhenQueueEmpty = maxGroupWaitInMSec = 0 || 
conf.getJournalFlushWhenQueueEmpty();
+this.flushWhenQueueEmpty = maxGroupWaitInNanos = 0 || 
conf.getJournalFlushWhenQueueEmpty();
 
 this.removePagesFromCache = conf.getJournalRemovePagesFromCache();
 // read last log mark
@@ -822,17 +822,19 @@ class Journal extends BookieCriticalThread implements 
CheckpointSource {
 if (toFlush.isEmpty()) {
 qe = queue.take();
 } else {
-long pollWaitTime = maxGroupWaitInMSec - 
MathUtils.elapsedMSec(toFlush.getFirst().enqueueTime);
-if (flushWhenQueueEmpty || pollWaitTime  0) {
-pollWaitTime = 0;
+long pollWaitTimeNanos = maxGroupWaitInNanos - 
MathUtils.elapsedNanos(toFlush.get(0).enqueueTime);
+if (flushWhenQueueEmpty || pollWaitTimeNanos  0) {
+pollWaitTimeNanos = 0;
 }
-qe = queue.poll(pollWaitTime, TimeUnit.MILLISECONDS);
+qe = queue.poll(pollWaitTimeNanos, 
TimeUnit.NANOSECONDS);

bookkeeper git commit: BOOKKEEPER-849: Collect stats with sub-milliseconds precision (Matteo Merli via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master 638b33256 - 6622b46d4


BOOKKEEPER-849: Collect stats with sub-milliseconds precision (Matteo Merli via 
sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/6622b46d
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/6622b46d
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/6622b46d

Branch: refs/heads/master
Commit: 6622b46d4979c92cd9c3f450e3832d63513c6a22
Parents: 638b332
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 00:17:45 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 00:17:45 2015 -0700

--
 CHANGES.txt |  2 ++
 .../bookie/BookKeeperServerStats.java   |  1 +
 .../org/apache/bookkeeper/bookie/Bookie.java| 34 +++-
 .../apache/bookkeeper/bookie/EntryMemTable.java | 18 +--
 .../bookie/InterleavedLedgerStorage.java| 11 ---
 .../org/apache/bookkeeper/bookie/Journal.java   | 13 
 .../bookkeeper/client/LedgerCreateOp.java   |  5 +--
 .../bookkeeper/client/LedgerDeleteOp.java   |  6 ++--
 .../apache/bookkeeper/client/LedgerOpenOp.java  |  6 ++--
 .../apache/bookkeeper/client/PendingAddOp.java  | 11 ---
 .../apache/bookkeeper/client/PendingReadOp.java | 10 +++---
 .../bookkeeper/proto/PacketProcessorBase.java   |  6 ++--
 .../bookkeeper/proto/PacketProcessorBaseV3.java |  6 ++--
 .../proto/PerChannelBookieClient.java   | 23 ++---
 .../bookkeeper/proto/ReadEntryProcessor.java|  6 ++--
 .../bookkeeper/proto/ReadEntryProcessorV3.java  |  6 ++--
 .../bookkeeper/proto/WriteEntryProcessor.java   | 10 --
 .../bookkeeper/proto/WriteEntryProcessorV3.java |  7 ++--
 .../replication/ReplicationWorker.java  |  6 ++--
 .../org/apache/bookkeeper/util/MathUtils.java   | 11 +++
 .../bookkeeper/stats/CodahaleOpStatsLogger.java | 19 ---
 .../bookkeeper/stats/CodahaleOpStatsTest.java   |  2 +-
 .../twitter/ostrich/OpStatsLoggerImpl.java  | 22 ++---
 .../twitter/science/OpStatsLoggerImpl.java  | 16 ++---
 .../bookkeeper/stats/NullStatsLogger.java   | 16 +++--
 .../apache/bookkeeper/stats/OpStatsLogger.java  | 27 
 26 files changed, 200 insertions(+), 100 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/6622b46d/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 08c2705..308a0a4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -67,6 +67,8 @@ Trunk (unreleased changes)
 
   BOOKKEEPER-844: Add more metrics about latency and bytes characteristics 
on bookie operations (Tong Yu via sijie)
 
+  BOOKKEEPER-849: Collect stats with sub-milliseconds precision (Matteo 
Merli via sijie)
+
   bookkeeper-client:
 
 BOOKKEEPER-810: Allow to configure TCP connect timeout (Charles Xie 
via sijie)

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/6622b46d/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookKeeperServerStats.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookKeeperServerStats.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookKeeperServerStats.java
index 9036182..c7919f7 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookKeeperServerStats.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookKeeperServerStats.java
@@ -44,6 +44,7 @@ public interface BookKeeperServerStats {
 public final static String BOOKIE_READ_ENTRY = BOOKIE_READ_ENTRY;
 
 // Journal Stats
+public final static String JOURNAL_SCOPE = journal;
 public final static String JOURNAL_ADD_ENTRY = JOURNAL_ADD_ENTRY;
 public final static String JOURNAL_MEM_ADD_ENTRY = JOURNAL_MEM_ADD_ENTRY;
 public final static String JOURNAL_PREALLOCATION = JOURNAL_PREALLOCATION;

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/6622b46d/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
index 8b40853..3078ff1 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Bookie.java
@@ -88,6 +88,7 @@ import static 
org.apache.bookkeeper.bookie.BookKeeperServerStats.LD_INDEX_SCOPE;
 import static org.apache.bookkeeper.bookie.BookKeeperServerStats.READ_BYTES;
 import static 

bookkeeper git commit: BOOKKEEPER-695: Some entry logs are not removed from the bookie storage (Matteo Merli via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master 70da24d50 - b6dd50534


BOOKKEEPER-695: Some entry logs are not removed from the bookie storage (Matteo 
Merli via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/b6dd5053
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/b6dd5053
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/b6dd5053

Branch: refs/heads/master
Commit: b6dd505342051f267ca6af5fba1b70637c1e3fe0
Parents: 70da24d
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 00:44:52 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 00:44:52 2015 -0700

--
 CHANGES.txt |  4 
 .../org/apache/bookkeeper/bookie/EntryLogger.java   | 16 
 .../org/apache/bookkeeper/bookie/EntryLogTest.java  |  6 +-
 3 files changed, 13 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/b6dd5053/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index c9842d1..e55b2d6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -79,6 +79,10 @@ Trunk (unreleased changes)
 
 BOOKKEEPER-848: Use volatile for lastAddConfirmed (Matteo Merli via 
sijie)
 
+  bookkeeper-server:
+
+BOOKKEEPER-695: Some entry logs are not removed from the bookie 
storage (Matteo Merli via sijie)
+
 Release 4.3.0 - 2014-10-03
 
   Non-backward compatible changes:

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/b6dd5053/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
index 0e052b5..725d5bf 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
@@ -782,20 +782,19 @@ public class EntryLogger {
 break;
 }
 if (readFromLogChannel(entryLogId, bc, sizeBuff, pos) != 
sizeBuff.capacity()) {
-throw new IOException(Short read for entry size from entrylog 
 + entryLogId);
+LOG.warn(Short read for entry size from entrylog {}, 
entryLogId);
+return;
 }
 long offset = pos;
 pos += 4;
 sizeBuff.flip();
 int entrySize = sizeBuff.getInt();
-if (entrySize  MB) {
-LOG.warn(Found large size entry of  + entrySize +  at 
location  + pos +  in 
-+ entryLogId);
-}
+
 sizeBuff.clear();
 // try to read ledger id first
 if (readFromLogChannel(entryLogId, bc, lidBuff, pos) != 
lidBuff.capacity()) {
-throw new IOException(Short read for ledger id from entrylog 
 + entryLogId);
+LOG.warn(Short read for ledger id from entrylog {}, 
entryLogId);
+return;
 }
 lidBuff.flip();
 long lid = lidBuff.getLong();
@@ -810,8 +809,9 @@ public class EntryLogger {
 ByteBuffer buff = ByteBuffer.wrap(data);
 int rc = readFromLogChannel(entryLogId, bc, buff, pos);
 if (rc != data.length) {
-throw new IOException(Short read for ledger entry from 
entryLog  + entryLogId
-+ @ + pos + ( + rc + != + 
data.length + ));
+LOG.warn(Short read for ledger entry from entryLog {}@{} ({} 
!= {}), new Object[] { entryLogId, pos,
+rc, data.length });
+return;
 }
 buff.flip();
 // process the entry

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/b6dd5053/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
--
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
index 488f4bf..6b0ecd8 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/EntryLogTest.java
@@ -89,11 +89,7 @@ public class EntryLogTest {
 EntryLogMetadata meta = new EntryLogMetadata(0L);
 ExtractionScanner scanner = new ExtractionScanner(meta);
 
-try {
-logger.scanEntryLog(0L, scanner);
-fail(Should not reach here!);
-

bookkeeper git commit: BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/branch-4.3 49395cf59 - 49261795f


BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/49261795
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/49261795
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/49261795

Branch: refs/heads/branch-4.3
Commit: 49261795f1a7b1b690b4fd81b5e01df8cf1ff1a6
Parents: 49395cf
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 01:14:25 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 01:14:25 2015 -0700

--
 CHANGES.txt |  2 ++
 .../bookkeeper/client/TestLedgerChecker.java| 35 ++--
 2 files changed, 26 insertions(+), 11 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/49261795/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index ecaf17c..9edfa96 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -26,6 +26,8 @@ Release 4.3.1 - unreleased
 
   BOOKKEEPER-834: test case error in test class TestDiskChecker (zhaijia 
via sijie)
 
+  BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)
+
 IMPROVEMENTS:
 
   BOOKKEEPER-800: Expose whether a ledger is closed or not (ivank)

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/49261795/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
--
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
index eb61c21..0316b37 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
@@ -120,7 +120,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
 // /we don't have any missed entries. Quorum satisfied//
 // /So, there should not be any missing replicas.///
 // /
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetTheFragmentIfThereIsNoMissedEntry()
 throws Exception {
 
@@ -164,7 +164,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should give two fragments when 2 bookies failed
  * in same ensemble when ensemble = 3, quorum = 2
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldGetTwoFrgamentsIfTwoBookiesFailedInSameEnsemble()
 throws Exception {
 
@@ -198,7 +198,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should not get any underReplicated fragments, 
if
  * corresponding ledger does not exists.
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetAnyFragmentIfNoLedgerPresent()
 throws Exception {
 
@@ -212,7 +212,20 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
 startNewBookie();
 lh.addEntry(TEST_LEDGER_ENTRY_DATA);
 bkc.deleteLedger(lh.getId());
-
+LOG.info(Waiting to see ledger id {} deletion, lh.getId());
+int retries = 40;
+boolean noSuchLedger = false;
+while (retries  0) {
+try {
+lh.readEntries(0, 0);
+} catch (BKException.BKNoSuchLedgerExistsException bkn) {
+noSuchLedger = true;
+break;
+}
+retries--;
+Thread.sleep(500);
+}
+assertEquals(Ledger exists, true, noSuchLedger);
 SetLedgerFragment result = getUnderReplicatedFragments(lh);
 assertNotNull(Result shouldn't be null, result);
 
@@ -224,7 +237,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should get failed ensemble number of fragments
  * if ensemble bookie failures on next entry
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void 
testShouldGetFailedEnsembleNumberOfFgmntsIfEnsembleBookiesFailedOnNextWrite()
 throws Exception {
 
@@ -258,7 +271,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should not get any fragments as underReplicated
  * if Ledger itself is empty
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetAnyFragmentWithEmptyLedger() throws Exception {
 

bookkeeper git commit: BOOKKEEPER-847: ArrayIndexOutOfBoundsException in LedgerFragmentReplicator::updateEnsembleInfo (zhaijia via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master fe6259c7e - b24cd7fd8


BOOKKEEPER-847: ArrayIndexOutOfBoundsException in 
LedgerFragmentReplicator::updateEnsembleInfo (zhaijia via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/b24cd7fd
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/b24cd7fd
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/b24cd7fd

Branch: refs/heads/master
Commit: b24cd7fd85bb3235036e660ff3a295dc939705e6
Parents: fe6259c
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 00:35:22 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 00:35:22 2015 -0700

--
 CHANGES.txt |  2 ++
 .../client/LedgerFragmentReplicator.java| 20 
 2 files changed, 18 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/b24cd7fd/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index c36151d..9ce143b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -34,6 +34,8 @@ Trunk (unreleased changes)
 
   BOOKKEEPER-840: Deadlock on flushLock on compaction (sijie)
 
+  BOOKKEEPER-847: ArrayIndexOutOfBoundsException in 
LedgerFragmentReplicator::updateEnsembleInfo (zhaijia via sijie)
+
 IMPROVEMENTS:
 
   BOOKKEEPER-800: Expose whether a ledger is closed or not (ivank)

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/b24cd7fd/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
index 4501524..2078245 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerFragmentReplicator.java
@@ -345,10 +345,22 @@ public class LedgerFragmentReplicator {
 ArrayListBookieSocketAddress ensemble = lh.getLedgerMetadata()
 .getEnsembles().get(fragmentStartId);
 int deadBookieIndex = ensemble.indexOf(oldBookie);
-ensemble.remove(deadBookieIndex);
-ensemble.add(deadBookieIndex, newBookie);
-lh.writeLedgerConfig(new UpdateEnsembleCb(ensembleUpdatedCb,
-fragmentStartId, lh, oldBookie, newBookie));
+
+/*
+ * An update to the ensemble info might happen after re-reading ledger 
metadata.
+ * Such an update might reflect a change to the ensemble membership 
such that 
+ * it might not be necessary to replace the bookie.
+ */
+if (deadBookieIndex = 0) {
+ensemble.remove(deadBookieIndex);
+ensemble.add(deadBookieIndex, newBookie);
+lh.writeLedgerConfig(new UpdateEnsembleCb(ensembleUpdatedCb,
+fragmentStartId, lh, oldBookie, newBookie));
+}
+else {
+LOG.warn(Bookie {} doesn't exist in ensemble {} anymore., 
oldBookie, ensemble);
+
ensembleUpdatedCb.processResult(BKException.Code.UnexpectedConditionException, 
null, null);
+}
 }
 
 /**



bookkeeper git commit: BOOKKEEPER-836: disable compaction when disk becomes full, otherwise compaction will fill up disk quickly (zhaijia via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master b6dd50534 - e0d331781


BOOKKEEPER-836: disable compaction when disk becomes full, otherwise compaction 
will fill up disk quickly (zhaijia via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/e0d33178
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/e0d33178
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/e0d33178

Branch: refs/heads/master
Commit: e0d331781ec7a0e415bc6f16c38686aab34cb0c5
Parents: b6dd505
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 00:55:03 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 00:55:03 2015 -0700

--
 CHANGES.txt |  2 +
 .../bookie/GarbageCollectorThread.java  | 53 ---
 .../bookie/InterleavedLedgerStorage.java| 40 +++---
 .../bookkeeper/conf/ServerConfiguration.java| 27 ++
 .../bookkeeper/bookie/CompactionTest.java   | 55 
 5 files changed, 164 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/e0d33178/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index e55b2d6..686b867 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -83,6 +83,8 @@ Trunk (unreleased changes)
 
 BOOKKEEPER-695: Some entry logs are not removed from the bookie 
storage (Matteo Merli via sijie)
 
+BOOKKEEPER-836: disable compaction when disk becomes full, otherwise 
compaction will fill up disk quickly (zhaijia via sijie)
+
 Release 4.3.0 - 2014-10-03
 
   Non-backward compatible changes:

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/e0d33178/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
index 299fb3e..1ca43e0 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
@@ -66,6 +66,8 @@ public class GarbageCollectorThread extends BookieThread {
 final double majorCompactionThreshold;
 final long majorCompactionInterval;
 
+final boolean isForceGCAllowWhenNoSpace;
+
 long lastMinorCompactionTime;
 long lastMajorCompactionTime;
 
@@ -93,6 +95,10 @@ public class GarbageCollectorThread extends BookieThread {
 
 // Boolean to trigger a forced GC.
 final AtomicBoolean forceGarbageCollection = new AtomicBoolean(false);
+// Boolean to disable major compaction, when disk is almost full
+final AtomicBoolean suspendMajorCompaction = new AtomicBoolean(false);
+// Boolean to disable minor compaction, when disk is full
+final AtomicBoolean suspendMinorCompaction = new AtomicBoolean(false);
 
 final GarbageCollector garbageCollector;
 final GarbageCleaner garbageCleaner;
@@ -264,6 +270,7 @@ public class GarbageCollectorThread extends BookieThread {
 minorCompactionInterval = conf.getMinorCompactionInterval() * SECOND;
 majorCompactionThreshold = conf.getMajorCompactionThreshold();
 majorCompactionInterval = conf.getMajorCompactionInterval() * SECOND;
+isForceGCAllowWhenNoSpace = conf.getIsForceGCAllowWhenNoSpace();
 
 if (minorCompactionInterval  0  minorCompactionThreshold  0) {
 if (minorCompactionThreshold  1.0f) {
@@ -321,6 +328,30 @@ public class GarbageCollectorThread extends BookieThread {
 }
 }
 
+public void suspendMajorGC() {
+if (suspendMajorCompaction.compareAndSet(false, true)) {
+LOG.info(Suspend Major Compaction triggered by thread: {}, 
Thread.currentThread().getName());
+}
+}
+
+public void resumeMajorGC() {
+if (suspendMajorCompaction.compareAndSet(true, false)) {
+LOG.info({} Major Compaction back to normal since bookie has 
enough space now., Thread.currentThread().getName());
+}
+}
+
+public void suspendMinorGC() {
+if (suspendMinorCompaction.compareAndSet(false, true)) {
+LOG.info(Suspend Minor Compaction triggered by thread: {}, 
Thread.currentThread().getName());
+}
+}
+
+public void resumeMinorGC() {
+if (suspendMinorCompaction.compareAndSet(true, false)) {
+LOG.info({} Minor Compaction back to normal since bookie has 
enough space now., Thread.currentThread().getName());
+}
+}
+
 @Override
 public void 

bookkeeper git commit: BOOKKEEPER-833: EntryLogId and EntryLogLimit should not be larger than Integer.MAX_VALUE (sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/branch-4.3 9cbbd659c - 49395cf59


BOOKKEEPER-833: EntryLogId and EntryLogLimit should not be larger than 
Integer.MAX_VALUE (sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/49395cf5
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/49395cf5
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/49395cf5

Branch: refs/heads/branch-4.3
Commit: 49395cf5919c03af0f6951055ae1bfd7aef09d04
Parents: 9cbbd65
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 01:08:20 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 01:08:20 2015 -0700

--
 CHANGES.txt |  4 +++
 .../apache/bookkeeper/bookie/EntryLogger.java   | 34 +---
 .../bookkeeper/bookie/SortedLedgerStorage.java  | 11 ++-
 .../bookkeeper/conf/ServerConfiguration.java|  5 +++
 .../bookkeeper/util/BookKeeperConstants.java|  7 
 5 files changed, 48 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/49395cf5/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index d3b1e88..ecaf17c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -44,6 +44,10 @@ Release 4.3.1 - unreleased
 
 BOOKKEEPER-810: Allow to configure TCP connect timeout (Charles Xie 
via sijie)
 
+  bookkeeper-server:
+
+BOOKKEEPER-833: EntryLogId and EntryLogLimit should not be larger than 
Integer.MAX_VALUE (sijie)
+
 Release 4.3.0 - 2014-10-03
 
   Non-backward compatible changes:

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/49395cf5/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
--
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
index 0e052b5..91ac8b4 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
@@ -22,6 +22,7 @@
 package org.apache.bookkeeper.bookie;
 
 import static com.google.common.base.Charsets.UTF_8;
+import static 
org.apache.bookkeeper.util.BookKeeperConstants.MAX_LOG_SIZE_LIMIT;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -167,7 +168,7 @@ public class EntryLogger {
 addListener(listener);
 }
 // log size limit
-this.logSizeLimit = conf.getEntryLogSizeLimit();
+this.logSizeLimit = Math.min(conf.getEntryLogSizeLimit(), 
MAX_LOG_SIZE_LIMIT);
 this.entryLogPreAllocationEnabled = 
conf.isEntryLogFilePreAllocationEnabled();
 
 // Initialize the entry log header buffer. This cannot be a static 
object
@@ -439,7 +440,12 @@ public class EntryLogger {
 // It would better not to overwrite existing entry log files
 File newLogFile = null;
 do {
-String logFileName = Long.toHexString(++preallocatedLogId) + 
.log;
+if (preallocatedLogId = Integer.MAX_VALUE) {
+preallocatedLogId = 0;
+} else {
+++preallocatedLogId;
+}
+String logFileName = Long.toHexString(preallocatedLogId) + 
.log;
 for (File dir : list) {
 newLogFile = new File(dir, logFileName);
 currentDir = dir;
@@ -622,15 +628,16 @@ public class EntryLogger {
 }
 
 synchronized long addEntry(long ledger, ByteBuffer entry, boolean rollLog) 
throws IOException {
-if (rollLog) {
-// Create new log if logSizeLimit reached or current disk is full
-boolean createNewLog = shouldCreateNewEntryLog.get();
-if (createNewLog || reachEntryLogLimit(entry.remaining() + 4)) {
-createNewLog();
-// Reset the flag
-if (createNewLog) {
-shouldCreateNewEntryLog.set(false);
-}
+int entrySize = entry.remaining() + 4;
+boolean reachEntryLogLimit =
+rollLog ? reachEntryLogLimit(entrySize) : 
readEntryLogHardLimit(entrySize);
+// Create new log if logSizeLimit reached or current disk is full
+boolean createNewLog = shouldCreateNewEntryLog.get();
+if (createNewLog || reachEntryLogLimit) {
+createNewLog();
+// Reset the flag
+if (createNewLog) {
+shouldCreateNewEntryLog.set(false);
 }
 }
 ByteBuffer buff = ByteBuffer.allocate(4);
@@ -651,6 +658,10 @@ 

bookkeeper git commit: BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)

2015-04-21 Thread sijie
Repository: bookkeeper
Updated Branches:
  refs/heads/master da1a2fa6b - 26b17cba5


BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)


Project: http://git-wip-us.apache.org/repos/asf/bookkeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/bookkeeper/commit/26b17cba
Tree: http://git-wip-us.apache.org/repos/asf/bookkeeper/tree/26b17cba
Diff: http://git-wip-us.apache.org/repos/asf/bookkeeper/diff/26b17cba

Branch: refs/heads/master
Commit: 26b17cba50aded931afb2e66d549fbeb8f4f1d39
Parents: da1a2fa
Author: Sijie Guo si...@apache.org
Authored: Tue Apr 21 01:19:24 2015 -0700
Committer: Sijie Guo si...@apache.org
Committed: Tue Apr 21 01:19:24 2015 -0700

--
 CHANGES.txt |  2 ++
 .../bookkeeper/client/TestLedgerChecker.java| 35 ++--
 2 files changed, 26 insertions(+), 11 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/26b17cba/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 060d814..d3976d9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -36,6 +36,8 @@ Trunk (unreleased changes)
 
   BOOKKEEPER-847: ArrayIndexOutOfBoundsException in 
LedgerFragmentReplicator::updateEnsembleInfo (zhaijia via sijie)
 
+  BOOKKEEPER-846: TestLedgerChecker times out (rakeshr via sijie)
+
 IMPROVEMENTS:
 
   BOOKKEEPER-800: Expose whether a ledger is closed or not (ivank)

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/26b17cba/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
--
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
index eb61c21..0316b37 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/TestLedgerChecker.java
@@ -120,7 +120,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
 // /we don't have any missed entries. Quorum satisfied//
 // /So, there should not be any missing replicas.///
 // /
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetTheFragmentIfThereIsNoMissedEntry()
 throws Exception {
 
@@ -164,7 +164,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should give two fragments when 2 bookies failed
  * in same ensemble when ensemble = 3, quorum = 2
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldGetTwoFrgamentsIfTwoBookiesFailedInSameEnsemble()
 throws Exception {
 
@@ -198,7 +198,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should not get any underReplicated fragments, 
if
  * corresponding ledger does not exists.
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetAnyFragmentIfNoLedgerPresent()
 throws Exception {
 
@@ -212,7 +212,20 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
 startNewBookie();
 lh.addEntry(TEST_LEDGER_ENTRY_DATA);
 bkc.deleteLedger(lh.getId());
-
+LOG.info(Waiting to see ledger id {} deletion, lh.getId());
+int retries = 40;
+boolean noSuchLedger = false;
+while (retries  0) {
+try {
+lh.readEntries(0, 0);
+} catch (BKException.BKNoSuchLedgerExistsException bkn) {
+noSuchLedger = true;
+break;
+}
+retries--;
+Thread.sleep(500);
+}
+assertEquals(Ledger exists, true, noSuchLedger);
 SetLedgerFragment result = getUnderReplicatedFragments(lh);
 assertNotNull(Result shouldn't be null, result);
 
@@ -224,7 +237,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should get failed ensemble number of fragments
  * if ensemble bookie failures on next entry
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void 
testShouldGetFailedEnsembleNumberOfFgmntsIfEnsembleBookiesFailedOnNextWrite()
 throws Exception {
 
@@ -258,7 +271,7 @@ public class TestLedgerChecker extends 
BookKeeperClusterTestCase {
  * Tests that LedgerChecker should not get any fragments as underReplicated
  * if Ledger itself is empty
  */
-@Test(timeout = 3000)
+@Test(timeout = 6)
 public void testShouldNotGetAnyFragmentWithEmptyLedger()