Repository: hbase Updated Branches: refs/heads/branch-1 069d1f73f -> 76a076026
HBASE-16640 TimeoutBlockingQueue#remove() should return whether the entry is removed Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/76a07602 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/76a07602 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/76a07602 Branch: refs/heads/branch-1 Commit: 76a07602691fd5b63390b9dbde0a84672602c0be Parents: 069d1f7 Author: tedyu <[email protected]> Authored: Thu Sep 15 17:35:59 2016 -0700 Committer: tedyu <[email protected]> Committed: Thu Sep 15 17:35:59 2016 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/procedure2/ProcedureExecutor.java | 5 +++-- .../hbase/procedure2/util/TimeoutBlockingQueue.java | 8 +++++--- .../procedure2/util/TestTimeoutBlockingQueue.java | 13 ++++++++----- 3 files changed, 16 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/76a07602/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java ---------------------------------------------------------------------- diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java index ee70dd1..4eb2796 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java @@ -601,9 +601,10 @@ public class ProcedureExecutor<TEnvironment> { /** * Remove a chore procedure from the executor * @param chore the chore to remove + * @return whether the chore is removed */ - public void removeChore(final ProcedureInMemoryChore chore) { - waitingTimeout.remove(chore); + public boolean removeChore(final ProcedureInMemoryChore chore) { + return waitingTimeout.remove(chore); } /** http://git-wip-us.apache.org/repos/asf/hbase/blob/76a07602/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java ---------------------------------------------------------------------- diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java index fceabb1..2292e63 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java @@ -92,15 +92,17 @@ public class TimeoutBlockingQueue<E> { } } - public void remove(E e) { + public boolean remove(E e) { + if (e == null) return false; lock.lock(); try { for (int i = 0; i < objects.length; ++i) { - if (objects[i] == e) { + if (e.equals(objects[i])) { objects[i] = null; - return; + return true; } } + return false; } finally { lock.unlock(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/76a07602/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/util/TestTimeoutBlockingQueue.java ---------------------------------------------------------------------- diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/util/TestTimeoutBlockingQueue.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/util/TestTimeoutBlockingQueue.java index 5750650..3c52ea1 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/util/TestTimeoutBlockingQueue.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/util/TestTimeoutBlockingQueue.java @@ -139,18 +139,21 @@ public class TestTimeoutBlockingQueue { TimeoutBlockingQueue<TestObject> queue = new TimeoutBlockingQueue<TestObject>(2, new TestObjectTimeoutRetriever()); - TestObject[] objs = new TestObject[5]; - for (int i = 0; i < objs.length; ++i) { + final int effectiveLen = 5; + TestObject[] objs = new TestObject[6]; + for (int i = 0; i < effectiveLen; ++i) { objs[i] = new TestObject(0, i * 10); queue.add(objs[i]); } + objs[effectiveLen] = new TestObject(0, effectiveLen * 10); queue.dump(); - for (int i = 0; i < objs.length; i += 2) { - queue.remove(objs[i]); + for (int i = 0; i < effectiveLen; i += 2) { + assertTrue(queue.remove(objs[i])); } + assertTrue(!queue.remove(objs[effectiveLen])); - for (int i = 0; i < objs.length; ++i) { + for (int i = 0; i < effectiveLen; ++i) { TestObject x = queue.poll(); assertEquals((i % 2) == 0 ? null : objs[i], x); }
