/** * @return the flush pressure of all stores on this regionserver. The value should be greater than * or equal to 0.0, and any value greater than 1.0 means we enter the emergency state that * global memstore size already exceeds lower limit. */ public double getFlushPressure() { if (memType == MemoryType.HEAP) { return (getGlobalMemStoreHeapSize()) * 1.0 / globalMemStoreLimitLowMark; } else { return Math.max(getGlobalMemStoreOffHeapSize() * 1.0 / globalMemStoreLimitLowMark, getGlobalMemStoreHeapSize() * 1.0 / globalOnHeapMemstoreLimitLowMark); } } }
/** * Return true if we're above the low watermark */ public FlushType isAboveLowWaterMark() { // for onheap memstore we check if the global memstore size and the // global heap overhead is greater than the global memstore lower mark limit if (memType == MemoryType.HEAP) { if (getGlobalMemStoreHeapSize() >= globalMemStoreLimitLowMark) { return FlushType.ABOVE_ONHEAP_LOWER_MARK; } } else { if (getGlobalMemStoreOffHeapSize() >= globalMemStoreLimitLowMark) { // Indicates that the offheap memstore's size is greater than the global memstore // lower limit return FlushType.ABOVE_OFFHEAP_LOWER_MARK; } else if (getGlobalMemStoreHeapSize() >= globalOnHeapMemstoreLimitLowMark) { // Indicates that the offheap memstore's heap overhead is greater than the global memstore // onheap lower limit return FlushType.ABOVE_ONHEAP_LOWER_MARK; } } return FlushType.NORMAL; }
if (getGlobalMemStoreOffHeapSize() >= globalMemStoreLimit) {
" due to global heap pressure. Total memstore off heap size=" + TraditionalBinaryPrefix.long2String( server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) + " memstore heap size=" + TraditionalBinaryPrefix.long2String( server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1)); "Total Memstore Off-Heap size=" + TraditionalBinaryPrefix.long2String( server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) + ", Region memstore size=" + TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));
case ABOVE_OFFHEAP_HIGHER_MARK: logMsg("the global offheap memstore datasize", server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), server.getRegionServerAccounting().getGlobalMemStoreLimit()); break;
@Override public boolean progress() { replayedEdits++; //during replay, rsAccounting should align with global memstore, because //there is only one memstore here Assert.assertEquals(rsAccounting.getGlobalMemStoreDataSize(), region.getMemStoreDataSize()); Assert.assertEquals(rsAccounting.getGlobalMemStoreHeapSize(), region.getMemStoreHeapSize()); Assert.assertEquals(rsAccounting.getGlobalMemStoreOffHeapSize(), region.getMemStoreOffHeapSize()); // abort the replay before finishing, leaving some edits in the memory return replayedEdits < totalEdits - 10; } });
@Override public boolean progress() { replayedEdits++; //during replay, rsAccounting should align with global memstore, because //there is only one memstore here Assert.assertEquals(rsAccounting.getGlobalMemStoreDataSize(), region.getMemStoreDataSize()); Assert.assertEquals(rsAccounting.getGlobalMemStoreHeapSize(), region.getMemStoreHeapSize()); Assert.assertEquals(rsAccounting.getGlobalMemStoreOffHeapSize(), region.getMemStoreOffHeapSize()); // abort the replay before finishing, leaving some edits in the memory return replayedEdits < totalEdits - 10; } });