Hello Users.

---
HBase version is 1.2.9
---

I wonder this region operation is intended.

I set "hbase.regionserver.optionalcacheflushinterval" slightly shorter than the 
default setting.
So cf has old edit, they flush after a random delay.

If the flush queue has a flush request by old edit, a flush request by memstore 
size above MEMSTORE_FLUSH config in the same region is ignored.
Because region already has in regionsInQueue.

As a result, memstore size increase until random delay.

I think a flush request by memstore size above MEMSTORE_FLUSH config is a 
higher priority than a flush request by old edit.


Here are related codes.

---
@Override
public void requestFlush(Region r, boolean forceFlushAllStores) {
    synchronized (regionsInQueue) {
        if (!regionsInQueue.containsKey(r)) { // <- Here
        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores);
        this.regionsInQueue.put(r, fqe);
        this.flushQueue.add(fqe);
        }
    }
}

@Override
public void requestDelayedFlush(Region r, long delay, boolean 
forceFlushAllStores) {
    synchronized (regionsInQueue) {
        if (!regionsInQueue.containsKey(r)) { // <- Here
        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores);
        fqe.requeue(delay);
        this.regionsInQueue.put(r, fqe);
        this.flushQueue.add(fqe);
        }
    }
}
---

Best regards,
Minwoo Kang

Reply via email to