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/07/04 14:01:38 UTC
svn commit: r1499731 - in /zookeeper/bookkeeper/trunk: ./
bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/
bookkeeper-server/src/main/java/org/apache/bookkeeper/util/
Author: ivank
Date: Thu Jul 4 12:01:37 2013
New Revision: 1499731
URL: http://svn.apache.org/r1499731
Log:
BOOKKEEPER-636: Latest txn logs might be deleted in a race condition which is not recoverable if BK goes down before next txn log created. (vinay via ivank)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/JournalChannel.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/MathUtils.java
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1499731&r1=1499730&r2=1499731&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Thu Jul 4 12:01:37 2013
@@ -40,6 +40,8 @@ Trunk (unreleased changes)
BOOKKEEPER-641: DeathWatcher thread is unnecessarily running even after bookie shutdown (rakeshr via ivank)
+ BOOKKEEPER-636: Latest txn logs might be deleted in a race condition which is not recoverable if BK goes down before next txn log created. (vinay via 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/Journal.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java?rev=1499731&r1=1499730&r2=1499731&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Journal.java Thu Jul 4 12:01:37 2013
@@ -479,7 +479,11 @@ class Journal extends Thread implements
ByteBuffer lenBuff = ByteBuffer.allocate(4);
JournalChannel logFile = null;
try {
- long logId = 0;
+ List<Long> journalIds = listJournalIds(journalDirectory, null);
+ // Should not use MathUtils.now(), which use System.nanoTime() and
+ // could only be used to measure elapsed time.
+ // http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime%28%29
+ long logId = journalIds.isEmpty() ? System.currentTimeMillis() : journalIds.get(journalIds.size() - 1);
BufferedChannel bc = null;
long lastFlushPosition = 0;
@@ -487,7 +491,7 @@ class Journal extends Thread implements
while (true) {
// new journal file to write
if (null == logFile) {
- logId = MathUtils.now();
+ logId = logId + 1;
logFile = new JournalChannel(journalDirectory, logId);
bc = logFile.getBufferedChannel();
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/JournalChannel.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/JournalChannel.java?rev=1499731&r1=1499730&r2=1499731&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/JournalChannel.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/JournalChannel.java Thu Jul 4 12:01:37 2013
@@ -67,6 +67,12 @@ class JournalChannel implements Closeabl
LOG.info("Opening journal {}", fn);
if (!fn.exists()) { // new file, write version
+ if (!fn.createNewFile()) {
+ LOG.error("Journal file {}, that shouldn't exist, already exists. "
+ + " is there another bookie process running?", fn);
+ throw new IOException("File " + fn
+ + " suddenly appeared, is another bookie process running?");
+ }
fc = new RandomAccessFile(fn, "rw").getChannel();
formatVersion = CURRENT_JOURNAL_FORMAT_VERSION;
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/MathUtils.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/MathUtils.java?rev=1499731&r1=1499730&r2=1499731&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/MathUtils.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/util/MathUtils.java Thu Jul 4 12:01:37 2013
@@ -32,13 +32,16 @@ public class MathUtils {
return mod;
}
-
+
/**
* Current time from some arbitrary time base in the past, counting in
* milliseconds, and not affected by settimeofday or similar system clock
* changes. This is appropriate to use when computing how much longer to
* wait for an interval to expire.
- *
+ *
+ * NOTE: only use it for measuring.
+ * http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime%28%29
+ *
* @return current time in milliseconds.
*/
public static long now() {