HBASE-1944 Add a "deferred log flush" attribute to HTD
git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@831445 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
502cfe7b5d
commit
beaac2c27f
|
@ -147,6 +147,7 @@ Release 0.21.0 - Unreleased
|
|||
HBASE-1921 When the Master's session times out and there's only one, cluster is wedged
|
||||
HBASE-1942 Update hadoop jars in trunk; update to r831142
|
||||
HBASE-1943 Remove AgileJSON; unused
|
||||
HBASE-1944 Add a "deferred log flush" attribute to HTD
|
||||
|
||||
OPTIMIZATIONS
|
||||
HBASE-410 [testing] Speed up the test suite
|
||||
|
|
|
@ -75,6 +75,10 @@ public class HTableDescriptor implements WritableComparable<HTableDescriptor> {
|
|||
public static final ImmutableBytesWritable IS_META_KEY =
|
||||
new ImmutableBytesWritable(Bytes.toBytes(IS_META));
|
||||
|
||||
public static final String DEFERRED_LOG_FLUSH = "DEFERRED_LOG_FLUSH";
|
||||
public static final ImmutableBytesWritable DEFERRED_LOG_FLUSH_KEY =
|
||||
new ImmutableBytesWritable(Bytes.toBytes(DEFERRED_LOG_FLUSH));
|
||||
|
||||
|
||||
// The below are ugly but better than creating them each time till we
|
||||
// replace booleans being saved as Strings with plain booleans. Need a
|
||||
|
@ -90,6 +94,8 @@ public class HTableDescriptor implements WritableComparable<HTableDescriptor> {
|
|||
|
||||
public static final int DEFAULT_MAX_FILESIZE = 1024*1024*256;
|
||||
|
||||
public static final boolean DEFAULT_DEFERRED_LOG_FLUSH = false;
|
||||
|
||||
private volatile Boolean meta = null;
|
||||
private volatile Boolean root = null;
|
||||
|
||||
|
@ -366,6 +372,21 @@ public class HTableDescriptor implements WritableComparable<HTableDescriptor> {
|
|||
setValue(READONLY_KEY, readOnly? TRUE: FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if that table's log is hflush by other means
|
||||
*/
|
||||
public boolean isDeferredLogFlush() {
|
||||
return isSomething(DEFERRED_LOG_FLUSH_KEY, DEFAULT_DEFERRED_LOG_FLUSH);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param isDeferredLogFlush true if that table's log is hlfush by oter means
|
||||
* only.
|
||||
*/
|
||||
public void setDeferredLogFlush(final boolean isDeferredLogFlush) {
|
||||
setValue(DEFERRED_LOG_FLUSH_KEY, isDeferredLogFlush? TRUE: FALSE);
|
||||
}
|
||||
|
||||
/** @return name of table */
|
||||
public byte [] getName() {
|
||||
return name;
|
||||
|
|
|
@ -1655,7 +1655,7 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
cacheFlusher.reclaimMemStoreMemory();
|
||||
region.put(put, getLockFromId(put.getLockId()));
|
||||
|
||||
this.hlog.sync(region.getRegionInfo().isMetaRegion());
|
||||
this.syncWal(region);
|
||||
} catch (Throwable t) {
|
||||
throw convertThrowableToIOE(cleanup(t));
|
||||
}
|
||||
|
@ -1666,11 +1666,9 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
// Count of Puts processed.
|
||||
int i = 0;
|
||||
checkOpen();
|
||||
boolean isMetaRegion = false;
|
||||
HRegion region = null;
|
||||
try {
|
||||
HRegion region = getRegion(regionName);
|
||||
isMetaRegion = region.getRegionInfo().isMetaRegion();
|
||||
|
||||
region = getRegion(regionName);
|
||||
this.cacheFlusher.reclaimMemStoreMemory();
|
||||
Integer[] locks = new Integer[puts.length];
|
||||
for (i = 0; i < puts.length; i++) {
|
||||
|
@ -1681,19 +1679,16 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
|
||||
} catch (WrongRegionException ex) {
|
||||
LOG.debug("Batch puts: " + i, ex);
|
||||
return i;
|
||||
} catch (NotServingRegionException ex) {
|
||||
return i;
|
||||
} catch (Throwable t) {
|
||||
throw convertThrowableToIOE(cleanup(t));
|
||||
}
|
||||
// All have been processed successfully.
|
||||
|
||||
this.hlog.sync(isMetaRegion);
|
||||
|
||||
if (i == puts.length) {
|
||||
this.syncWal(region);
|
||||
return -1;
|
||||
} else {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1722,7 +1717,7 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
boolean retval = region.checkAndPut(row, family, qualifier, value, put,
|
||||
getLockFromId(put.getLockId()), true);
|
||||
|
||||
this.hlog.sync(region.getRegionInfo().isMetaRegion());
|
||||
this.syncWal(region);
|
||||
return retval;
|
||||
} catch (Throwable t) {
|
||||
throw convertThrowableToIOE(cleanup(t));
|
||||
|
@ -1871,7 +1866,7 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
HRegion region = getRegion(regionName);
|
||||
region.delete(delete, lid, writeToWAL);
|
||||
|
||||
this.hlog.sync(region.getRegionInfo().isMetaRegion());
|
||||
this.syncWal(region);
|
||||
} catch (WrongRegionException ex) {
|
||||
} catch (NotServingRegionException ex) {
|
||||
// ignore
|
||||
|
@ -1885,13 +1880,12 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
// Count of Deletes processed.
|
||||
int i = 0;
|
||||
checkOpen();
|
||||
boolean isMetaRegion = false;
|
||||
HRegion region = null;
|
||||
try {
|
||||
boolean writeToWAL = true;
|
||||
this.cacheFlusher.reclaimMemStoreMemory();
|
||||
Integer[] locks = new Integer[deletes.length];
|
||||
HRegion region = getRegion(regionName);
|
||||
isMetaRegion = region.getRegionInfo().isMetaRegion();
|
||||
region = getRegion(regionName);
|
||||
|
||||
for (i = 0; i < deletes.length; i++) {
|
||||
this.requestCount.incrementAndGet();
|
||||
|
@ -1907,8 +1901,7 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
throw convertThrowableToIOE(cleanup(t));
|
||||
}
|
||||
|
||||
this.hlog.sync(isMetaRegion);
|
||||
// All have been processed successfully.
|
||||
this.syncWal(region);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -2348,7 +2341,7 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
long retval = region.incrementColumnValue(row, family, qualifier, amount,
|
||||
writeToWAL);
|
||||
|
||||
this.hlog.sync(region.getRegionInfo().isMetaRegion());
|
||||
syncWal(region);
|
||||
|
||||
return retval;
|
||||
} catch (IOException e) {
|
||||
|
@ -2372,6 +2365,13 @@ public class HRegionServer implements HConstants, HRegionInterface,
|
|||
return serverInfo;
|
||||
}
|
||||
|
||||
// Sync the WAL if the table permits it
|
||||
private void syncWal(HRegion region) {
|
||||
if(!region.getTableDesc().isDeferredLogFlush()) {
|
||||
this.hlog.sync(region.getRegionInfo().isMetaRegion());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue