HBASE-10499 In write heavy scenario one of the regions does not get flushed causing RegionTooBusyException (Ram and Ted)
This commit is contained in:
parent
ab18158e60
commit
74adb11f4c
|
@ -619,7 +619,8 @@ class MemStoreFlusher implements FlushRequester {
|
||||||
return this.globalMemStoreLimit;
|
return this.globalMemStoreLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface FlushQueueEntry extends Delayed {}
|
interface FlushQueueEntry extends Delayed {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Token to insert into the flush queue that ensures that the flusher does not sleep
|
* Token to insert into the flush queue that ensures that the flusher does not sleep
|
||||||
|
@ -639,7 +640,6 @@ class MemStoreFlusher implements FlushRequester {
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
return (this == obj);
|
return (this == obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -709,8 +709,14 @@ class MemStoreFlusher implements FlushRequester {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(Delayed other) {
|
public int compareTo(Delayed other) {
|
||||||
return Long.valueOf(getDelay(TimeUnit.MILLISECONDS) -
|
// Delay is compared first. If there is a tie, compare region's hash code
|
||||||
|
int ret = Long.valueOf(getDelay(TimeUnit.MILLISECONDS) -
|
||||||
other.getDelay(TimeUnit.MILLISECONDS)).intValue();
|
other.getDelay(TimeUnit.MILLISECONDS)).intValue();
|
||||||
|
if (ret != 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
FlushQueueEntry otherEntry = (FlushQueueEntry) other;
|
||||||
|
return hashCode() - otherEntry.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -720,7 +726,8 @@ class MemStoreFlusher implements FlushRequester {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return (int) getDelay(TimeUnit.MILLISECONDS);
|
int hash = (int) getDelay(TimeUnit.MILLISECONDS);
|
||||||
|
return hash ^ region.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -34,8 +34,9 @@ public class TestFlushRegionEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() {
|
||||||
FlushRegionEntry entry = new FlushRegionEntry(Mockito.mock(HRegion.class), true);
|
HRegion r = Mockito.mock(HRegion.class);
|
||||||
FlushRegionEntry other = new FlushRegionEntry(Mockito.mock(HRegion.class), true);
|
FlushRegionEntry entry = new FlushRegionEntry(r, true);
|
||||||
|
FlushRegionEntry other = new FlushRegionEntry(r, true);
|
||||||
|
|
||||||
assertEquals(entry.hashCode(), other.hashCode());
|
assertEquals(entry.hashCode(), other.hashCode());
|
||||||
assertEquals(entry, other);
|
assertEquals(entry, other);
|
||||||
|
|
Loading…
Reference in New Issue