You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/05/18 19:36:34 UTC
svn commit: r776017 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/regionserver/HLog.java
src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java
Author: stack
Date: Mon May 18 17:36:33 2009
New Revision: 776017
URL: http://svn.apache.org/viewvc?rev=776017&view=rev
Log:
HBASE-1401 close HLog (and open new one) if there hasnt been edits in N minutes/hours
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HLog.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=776017&r1=776016&r2=776017&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon May 18 17:36:33 2009
@@ -256,6 +256,8 @@
HLog#append?)
HBASE-1429 Allow passing of a configuration object to HTablePool
HBASE-1432 LuceneDocumentWrapper is not public
+ HBASE-1401 close HLog (and open new one) if there hasnt been edits in N
+ minutes/hours
OPTIMIZATIONS
HBASE-1412 Change values for delete column and column family in KeyValue
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HLog.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HLog.java?rev=776017&r1=776016&r2=776017&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HLog.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HLog.java Mon May 18 17:36:33 2009
@@ -132,7 +132,6 @@
private final AtomicLong logSeqNum = new AtomicLong(0);
private volatile long filenum = -1;
- private volatile long old_filenum = -1;
private final AtomicInteger numEntries = new AtomicInteger(0);
@@ -274,6 +273,10 @@
* @throws IOException
*/
public byte [] rollWriter() throws FailedLogCloseException, IOException {
+ // Return if nothing to flush.
+ if (this.writer != null && this.numEntries.get() <= 0) {
+ return null;
+ }
byte [] regionToFlush = null;
this.cacheFlushLock.lock();
try {
@@ -283,9 +286,6 @@
synchronized (updateLock) {
// Clean up current writer.
Path oldFile = cleanupCurrentWriter(this.filenum);
- if (this.filenum >= 0) {
- this.old_filenum = this.filenum;
- }
this.filenum = System.currentTimeMillis();
Path newPath = computeFilename(this.filenum);
this.writer = SequenceFile.createWriter(this.fs, this.conf, newPath,
@@ -587,7 +587,7 @@
}
}
}
-
+
private void requestLogRoll() {
if (this.listener != null) {
this.listener.logRollRequested();
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java?rev=776017&r1=776016&r2=776017&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/LogRoller.java Mon May 18 17:36:33 2009
@@ -40,28 +40,43 @@
private final ReentrantLock rollLock = new ReentrantLock();
private final AtomicBoolean rollLog = new AtomicBoolean(false);
private final HRegionServer server;
-
+ private volatile long lastrolltime = System.currentTimeMillis();
+ // Period to roll log.
+ private final long rollperiod;
+
/** @param server */
public LogRoller(final HRegionServer server) {
super();
this.server = server;
+ this.rollperiod =
+ this.server.conf.getLong("hbase.regionserver.logroll.period", 3600000);
}
@Override
public void run() {
while (!server.isStopRequested()) {
+ long now = System.currentTimeMillis();
+ boolean periodic = false;
if (!rollLog.get()) {
- synchronized (rollLog) {
- try {
- rollLog.wait(server.threadWakeFrequency);
- } catch (InterruptedException e) {
- continue;
+ periodic = (now - this.lastrolltime) > this.rollperiod;
+ if (!periodic) {
+ synchronized (rollLog) {
+ try {
+ rollLog.wait(server.threadWakeFrequency);
+ } catch (InterruptedException e) {
+ // Fall through
+ }
}
+ continue;
+ }
+ // Time for periodic roll
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Hlog roll period " + this.rollperiod + "ms elapsed");
}
- continue;
}
rollLock.lock(); // Don't interrupt us. We're working
try {
+ this.lastrolltime = now;
byte [] regionToFlush = server.getLog().rollWriter();
if (regionToFlush != null) {
scheduleFlush(regionToFlush);
@@ -90,7 +105,7 @@
}
LOG.info("LogRoller exiting.");
}
-
+
private void scheduleFlush(final byte [] region) {
boolean scheduled = false;
HRegion r = this.server.getOnlineRegion(region);
@@ -114,7 +129,7 @@
rollLog.notifyAll();
}
}
-
+
/**
* Called by region server to wake up this thread if it sleeping.
* It is sleeping if rollLock is not held.