You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2012/05/02 22:53:40 UTC
svn commit: r1333200 - in
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase:
master/SplitLogManager.java zookeeper/ZKSplitLog.java
Author: mbautin
Date: Wed May 2 20:53:40 2012
New Revision: 1333200
URL: http://svn.apache.org/viewvc?rev=1333200&view=rev
Log:
[HBASE-5860][jira] follow up diff
Author: pkhemani
Summary:
implement Nicolas's feedback
1 do not retry RESCAN creation
2 do not create RESCAN when other RESCAN create pending
Test Plan: -
Reviewers: nspiegelberg, kannan, aaiyer
Reviewed By: aaiyer
CC: hbase-eng@
Differential Revision: https://phabricator.fb.com/D461234
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java?rev=1333200&r1=1333199&r2=1333200&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java Wed May 2 20:53:40 2012
@@ -557,7 +557,7 @@ public class SplitLogManager implements
task.unforcedResubmits++;
}
task.setUnassigned();
- createRescanNode(Long.MAX_VALUE);
+ createRescanNode();
tot_mgr_resubmit.incrementAndGet();
return true;
}
@@ -610,7 +610,7 @@ public class SplitLogManager implements
* signal the workers that a task was resubmitted by creating the
* RESCAN node.
*/
- private void createRescanNode(long retries) {
+ private void createRescanNode() {
// The RESCAN node will be deleted almost immediately by the
// SplitLogManager as soon as it is created because it is being
// created in the DONE state. This behavior prevents a buildup
@@ -620,7 +620,8 @@ public class SplitLogManager implements
// therefore this behavior is safe.
watcher.asyncCreate(ZKSplitLog.getRescanNode(watcher),
TaskState.TASK_DONE.get(serverName), CreateMode.EPHEMERAL_SEQUENTIAL,
- new CreateRescanAsyncCallback(), new Long(retries));
+ new CreateRescanAsyncCallback(), new Long(0));
+ tot_mgr_node_create_rescan_queued.incrementAndGet();
}
private void createRescanSuccess(String path) {
@@ -951,7 +952,7 @@ public class SplitLogManager implements
tryGetDataSetWatch(path);
}
}
- createRescanNode(Long.MAX_VALUE);
+ createRescanNode();
tot_mgr_resubmit_unassigned.incrementAndGet();
LOG.debug("resubmitting unassigned task(s) after timeout");
}
@@ -996,9 +997,18 @@ public class SplitLogManager implements
}
}
+ /**
+ * @return true if there is a pending create of a task node or a RESCAN node
+ * in zookeeper. It doesn't bother about being strict - there are small
+ * windows when it can return wrong results.
+ */
static boolean isAnyCreateZNodePending() {
- return tot_mgr_node_create_queued.get() > tot_mgr_node_create_result.get();
+ return ((tot_mgr_node_create_queued.get() >
+ tot_mgr_node_create_result.get()) ||
+ (tot_mgr_node_create_rescan_queued.get() >
+ tot_mgr_node_create_rescan_result.get()));
}
+
/**
* Asynchronous handler for zk get-data-set-watch on node results.
* Retries on failures.
@@ -1103,6 +1113,7 @@ public class SplitLogManager implements
@Override
public void processResult(int rc, String path, Object ctx, String name) {
+ tot_mgr_node_create_rescan_result.incrementAndGet();
if (rc != 0) {
if (rc == KeeperException.Code.SESSIONEXPIRED.intValue()) {
LOG.error("ZK session expired. Master is expected to shut down. Abandoning retries.");
@@ -1111,11 +1122,8 @@ public class SplitLogManager implements
Long retry_count = (Long)ctx;
LOG.warn("rc=" + KeeperException.Code.get(rc) + " for "+ path +
" retry=" + retry_count);
- if (retry_count == 0) {
- createRescanFailure();
- } else {
- createRescanNode(retry_count - 1);
- }
+ assert retry_count == 0;
+ createRescanFailure();
return;
}
// path is the original arg, name is the actual name that was created
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java?rev=1333200&r1=1333199&r2=1333200&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java Wed May 2 20:53:40 2012
@@ -209,6 +209,10 @@ public class ZKSplitLog {
public static AtomicLong tot_mgr_log_split_err = new AtomicLong(0);
public static AtomicLong tot_mgr_node_create_queued = new AtomicLong(0);
public static AtomicLong tot_mgr_node_create_result = new AtomicLong(0);
+ public static AtomicLong tot_mgr_node_create_rescan_queued =
+ new AtomicLong(0);
+ public static AtomicLong tot_mgr_node_create_rescan_result =
+ new AtomicLong(0);
public static AtomicLong tot_mgr_node_already_exists = new AtomicLong(0);
public static AtomicLong tot_mgr_node_create_err = new AtomicLong(0);
public static AtomicLong tot_mgr_node_create_retry = new AtomicLong(0);