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 2012/05/17 19:07:45 UTC
svn commit: r1339715 - in /zookeeper/bookkeeper/trunk: CHANGES.txt
bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
Author: ivank
Date: Thu May 17 17:07:44 2012
New Revision: 1339715
URL: http://svn.apache.org/viewvc?rev=1339715&view=rev
Log:
BOOKKEEPER-251: Noise error message printed when scanning entry log files those have been garbage collected. (sijie via ivank)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1339715&r1=1339714&r2=1339715&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Thu May 17 17:07:44 2012
@@ -112,6 +112,8 @@ Trunk (unreleased changes)
BOOKKEEPER-224: Fix findbugs in bookkeeper-server component (ivank)
+ BOOKKEEPER-251: Noise error message printed when scanning entry log files those have been garbage collected. (sijie via ivank)
+
hedwig-client/
BOOKKEEPER-217: NPE in hedwig client when enable DEBUG (sijie via ivank)
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java?rev=1339715&r1=1339714&r2=1339715&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java Thu May 17 17:07:44 2012
@@ -361,6 +361,19 @@ public class EntryLogger {
}
}
+ /**
+ * Whether the log file exists or not.
+ */
+ boolean logExists(long logId) {
+ for (File d : dirs) {
+ File f = new File(d, Long.toHexString(logId) + ".log");
+ if (f.exists()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private File findFile(long logId) throws FileNotFoundException {
for(File d: dirs) {
File f = new File(d, Long.toHexString(logId)+".log");
Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java?rev=1339715&r1=1339714&r2=1339715&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java Thu May 17 17:07:44 2012
@@ -81,6 +81,9 @@ public class GarbageCollectorThread exte
volatile boolean running = true;
+ // track the last scanned successfully log id
+ long scannedLogId = 0;
+
/**
* A scanner wrapper to check whether a ledger is alive in an entry log file
*/
@@ -458,11 +461,19 @@ public class GarbageCollectorThread exte
// Entry Log ID's are just a long value that starts at 0 and increments
// by 1 when the log fills up and we roll to a new one.
long curLogId = entryLogger.getCurrentLogId();
- for (long entryLogId = 0; entryLogId < curLogId; entryLogId++) {
+ boolean hasExceptionWhenScan = false;
+ for (long entryLogId = scannedLogId; entryLogId < curLogId; entryLogId++) {
// Comb the current entry log file if it has not already been extracted.
if (entryLogMetaMap.containsKey(entryLogId)) {
continue;
}
+
+ // check whether log file exists or not
+ // if it doesn't exist, this log file might have been garbage collected.
+ if (!entryLogger.logExists(entryLogId)) {
+ continue;
+ }
+
LOG.info("Extracting entry log meta from entryLogId: " + entryLogId);
try {
@@ -470,9 +481,17 @@ public class GarbageCollectorThread exte
EntryLogMetadata entryLogMeta = extractMetaFromEntryLog(entryLogger, entryLogId);
entryLogMetaMap.put(entryLogId, entryLogMeta);
} catch (IOException e) {
+ hasExceptionWhenScan = true;
LOG.warn("Premature exception when processing " + entryLogId +
"recovery will take care of the problem", e);
}
+
+ // if scan failed on some entry log, we don't move 'scannedLogId' to next id
+ // if scan succeed, we don't need to scan it again during next gc run,
+ // we move 'scannedLogId' to next id
+ if (!hasExceptionWhenScan) {
+ ++scannedLogId;
+ }
}
return entryLogMetaMap;
}