[ 
https://issues.apache.org/jira/browse/HBASE-22686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16884217#comment-16884217
 ] 

HBase QA commented on HBASE-22686:
----------------------------------

| (x) *{color:red}-1 overall{color}* |
\\
\\
|| Vote || Subsystem || Runtime || Comment ||
| {color:blue}0{color} | {color:blue} reexec {color} | {color:blue} 22m 
25s{color} | {color:blue} Docker mode activated. {color} |
|| || || || {color:brown} Prechecks {color} ||
| {color:blue}0{color} | {color:blue} findbugs {color} | {color:blue}  0m  
0s{color} | {color:blue} Findbugs executables are not available. {color} |
| {color:green}+1{color} | {color:green} hbaseanti {color} | {color:green}  0m  
0s{color} | {color:green} Patch does not have any anti-patterns. {color} |
| {color:green}+1{color} | {color:green} @author {color} | {color:green}  0m  
0s{color} | {color:green} The patch does not contain any @author tags. {color} |
| {color:green}+1{color} | {color:green} test4tests {color} | {color:green}  0m 
 0s{color} | {color:green} The patch appears to include 1 new or modified test 
files. {color} |
|| || || || {color:brown} master Compile Tests {color} ||
| {color:red}-1{color} | {color:red} mvninstall {color} | {color:red}  0m 
11s{color} | {color:red} root in master failed. {color} |
| {color:red}-1{color} | {color:red} compile {color} | {color:red}  1m  
6s{color} | {color:red} hbase-server in master failed with JDK v1.8.0_212. 
{color} |
| {color:red}-1{color} | {color:red} compile {color} | {color:red}  0m 
12s{color} | {color:red} hbase-server in master failed with JDK v1.7.0_222. 
{color} |
| {color:red}-1{color} | {color:red} checkstyle {color} | {color:red}  0m 
16s{color} | {color:red} The patch fails to run checkstyle in hbase-server 
{color} |
| {color:red}-1{color} | {color:red} shadedjars {color} | {color:red}  0m 
10s{color} | {color:red} branch has 7 errors when building our shaded 
downstream artifacts. {color} |
| {color:green}+1{color} | {color:green} javadoc {color} | {color:green}  0m 
40s{color} | {color:green} master passed with JDK v1.8.0_212 {color} |
| {color:red}-1{color} | {color:red} javadoc {color} | {color:red}  0m 
14s{color} | {color:red} hbase-server in master failed with JDK v1.7.0_222. 
{color} |
|| || || || {color:brown} Patch Compile Tests {color} ||
| {color:red}-1{color} | {color:red} mvninstall {color} | {color:red}  0m  
9s{color} | {color:red} root in the patch failed. {color} |
| {color:red}-1{color} | {color:red} compile {color} | {color:red}  0m 
36s{color} | {color:red} hbase-server in the patch failed with JDK v1.8.0_212. 
{color} |
| {color:red}-1{color} | {color:red} javac {color} | {color:red}  0m 36s{color} 
| {color:red} hbase-server in the patch failed with JDK v1.8.0_212. {color} |
| {color:red}-1{color} | {color:red} compile {color} | {color:red}  0m 
13s{color} | {color:red} hbase-server in the patch failed with JDK v1.7.0_222. 
{color} |
| {color:red}-1{color} | {color:red} javac {color} | {color:red}  0m 13s{color} 
| {color:red} hbase-server in the patch failed with JDK v1.7.0_222. {color} |
| {color:red}-1{color} | {color:red} checkstyle {color} | {color:red}  0m 
11s{color} | {color:red} The patch fails to run checkstyle in hbase-server 
{color} |
| {color:green}+1{color} | {color:green} whitespace {color} | {color:green}  0m 
 0s{color} | {color:green} The patch has no whitespace issues. {color} |
| {color:red}-1{color} | {color:red} shadedjars {color} | {color:red}  0m  
9s{color} | {color:red} patch has 7 errors when building our shaded downstream 
artifacts. {color} |
| {color:red}-1{color} | {color:red} hadoopcheck {color} | {color:red}  0m 
10s{color} | {color:red} The patch causes 7 errors with Hadoop v2.8.5. {color} |
| {color:red}-1{color} | {color:red} hadoopcheck {color} | {color:red}  0m 
19s{color} | {color:red} The patch causes 7 errors with Hadoop v2.9.2. {color} |
| {color:red}-1{color} | {color:red} hadoopcheck {color} | {color:red}  0m 
27s{color} | {color:red} The patch causes 7 errors with Hadoop v3.1.2. {color} |
| {color:green}+1{color} | {color:green} javadoc {color} | {color:green}  0m 
35s{color} | {color:green} the patch passed with JDK v1.8.0_212 {color} |
| {color:red}-1{color} | {color:red} javadoc {color} | {color:red}  0m 
15s{color} | {color:red} hbase-server in the patch failed with JDK v1.7.0_222. 
{color} |
|| || || || {color:brown} Other Tests {color} ||
| {color:red}-1{color} | {color:red} unit {color} | {color:red}  0m 12s{color} 
| {color:red} hbase-server in the patch failed. {color} |
| {color:green}+1{color} | {color:green} asflicense {color} | {color:green}  0m 
11s{color} | {color:green} The patch does not generate ASF License warnings. 
{color} |
| {color:black}{color} | {color:black} {color} | {color:black} 28m 38s{color} | 
{color:black} {color} |
\\
\\
|| Subsystem || Report/Notes ||
| Docker | Client=18.09.7 Server=18.09.7 base: 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/Dockerfile
 |
| JIRA Issue | HBASE-22686 |
| JIRA Patch URL | 
https://issues.apache.org/jira/secure/attachment/12974579/HBASE-22686.patch |
| Optional Tests |  dupname  asflicense  javac  javadoc  unit  findbugs  
shadedjars  hadoopcheck  hbaseanti  checkstyle  compile  |
| uname | Linux d8e7b6672200 4.4.0-143-generic #169-Ubuntu SMP Thu Feb 7 
07:56:38 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux |
| Build tool | maven |
| Personality | dev-support/hbase-personality.sh |
| git revision | master / 4e46093 |
| maven | version: Apache Maven 3.0.5 |
| Default Java | 1.7.0_222 |
| Multi-JDK versions |  /usr/lib/jvm/java-8-openjdk-amd64:1.8.0_212 
/usr/lib/jvm/java-7-openjdk-amd64:1.7.0_222 |
| mvninstall | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/branch-mvninstall-root.txt
 |
| compile | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/branch-compile-hbase-server-jdk1.8.0_212.txt
 |
| compile | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/branch-compile-hbase-server-jdk1.7.0_222.txt
 |
| checkstyle | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess//testptch/patchprocess/maven-branch-checkstyle-hbase-server.txt
 |
| shadedjars | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/branch-shadedjars.txt
 |
| javadoc | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/branch-javadoc-hbase-server-jdk1.7.0_222.txt
 |
| mvninstall | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-mvninstall-root.txt
 |
| compile | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-compile-hbase-server-jdk1.8.0_212.txt
 |
| javac | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-compile-hbase-server-jdk1.8.0_212.txt
 |
| compile | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-compile-hbase-server-jdk1.7.0_222.txt
 |
| javac | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-compile-hbase-server-jdk1.7.0_222.txt
 |
| checkstyle | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess//testptch/patchprocess/maven-patch-checkstyle-hbase-server.txt
 |
| shadedjars | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-shadedjars.txt
 |
| hadoopcheck | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-javac-2.8.5.txt
 |
| hadoopcheck | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-javac-2.9.2.txt
 |
| hadoopcheck | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-javac-3.1.2.txt
 |
| javadoc | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-javadoc-hbase-server-jdk1.7.0_222.txt
 |
| unit | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/artifact/patchprocess/patch-unit-hbase-server.txt
 |
|  Test Results | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/testReport/ |
| Max. process+thread count | 86 (vs. ulimit of 10000) |
| modules | C: hbase-server U: hbase-server |
| Console output | 
https://builds.apache.org/job/PreCommit-HBASE-Build/614/console |
| Powered by | Apache Yetus 0.9.0 http://yetus.apache.org |


This message was automatically generated.



> ZkSplitLogWorkerCoordination doesn't allow a regionserver to pick up all of 
> the split work it is capable of
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-22686
>                 URL: https://issues.apache.org/jira/browse/HBASE-22686
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Andrew Purtell
>            Assignee: Andrew Purtell
>            Priority: Major
>             Fix For: 3.0.0, 1.5.0, 2.3.0, 2.2.1, 1.3.6, 1.4.11, 2.1.7
>
>         Attachments: HBASE-22686-branch-1.patch, HBASE-22686-branch-1.patch, 
> HBASE-22686.patch, HBASE-22686.patch
>
>
> A region hosted by a crashed regionserver cannot be reassigned until the 
> crashed regionserver's write-ahead logs have been processed and split into 
> per-region recovered edits files. Reassignment of a region from a crashed 
> server will be held up by the distributed split work backlog. Every 
> regionserver runs a background daemon thread that manages the acquisition and 
> execution of distributed log split tasks. This thread registers a watcher on 
> a znode managed by the master. When the master is processing a server 
> shutdown or crash or cluster restart when it detects the presence of 
> unprocessed WAL files it will register the WAL files for processing under the 
> znode. One or more live regionservers will attempt to get an exclusive lock 
> on an entry. One of them wins, splits the WAL file, deletes the entry, then 
> will acquire more work or go back to sleep if the worklist is empty. A 
> regionserver can acquire at most a fixed number of log split tasks determined 
> by configuration, hbase.regionserver.wal.max.splitters (default 2). If the 
> number of entries/logs to process exceeds the number of available split 
> workers in the cluster, perhaps due to the correlated failure of a 
> significant subset of the fleet, then splitting work will fall behind. 
> Regions may remain in RIT until the backlog is cleared.
> However, the regionserver side coordination logic - 
> ZkSplitLogWorkerCoordination - only allows a regionserver to grab one task 
> one at a time. Nearby javadoc says "This policy puts an upper-limit on the 
> number of simultaneous log splitting that could be happening in a cluster." 
> That upper limit will be the number of currently live regionservers. I don't 
> feel I understand exactly why this is necessary or appropriate because a 
> regionserver can handle more than one task at once and in fact the max number 
> of concurrent split tasks it can accept is configurable.
> {code:java}
>   /**
>    * This function calculates how many splitters it could create based on 
> expected average tasks per
>    * RS and the hard limit upper bound(maxConcurrentTasks) set by 
> configuration. <br>
>    * At any given time, a RS allows spawn MIN(Expected Tasks/RS, Hard Upper 
> Bound)
>    * @param numTasks current total number of available tasks
>    */
>   private int calculateAvailableSplitters(int numTasks) {
>     // at lease one RS(itself) available
>     int availableRSs = 1;
>     try {
>       List<String> regionServers =
>           ZKUtil.listChildrenNoWatch(watcher, watcher.rsZNode);
>       availableRSs = Math.max(availableRSs, (regionServers == null) ? 0 : 
> regionServers.size());
>     } catch (KeeperException e) {
>       // do nothing
>       LOG.debug("getAvailableRegionServers got ZooKeeper exception", e);
>     }
>     int expectedTasksPerRS = (numTasks / availableRSs) + ((numTasks % 
> availableRSs == 0) ? 0 : 1);
>     expectedTasksPerRS = Math.max(1, expectedTasksPerRS); // at least be one
>     // calculate how many more splitters we could spawn
>     return Math.min(expectedTasksPerRS, maxConcurrentTasks)
>         - this.tasksInProgress.get();
>   {code}
> Shouldn't this simply be:
> {code:java}
>   private int calculateAvailableSplitters() {
>     return maxConcurrentTasks - tasksInProgress.get();
>   }
> {code}
> ?
> This is branch-1.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to