Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 500EC200D01 for ; Fri, 22 Sep 2017 13:38:06 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 4E54A1609A7; Fri, 22 Sep 2017 11:38:06 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 938071609BE for ; Fri, 22 Sep 2017 13:38:05 +0200 (CEST) Received: (qmail 2803 invoked by uid 500); 22 Sep 2017 11:38:04 -0000 Mailing-List: contact issues-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list issues@hbase.apache.org Received: (qmail 2792 invoked by uid 99); 22 Sep 2017 11:38:04 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Sep 2017 11:38:04 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 211DA1A6986 for ; Fri, 22 Sep 2017 11:38:04 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -99.202 X-Spam-Level: X-Spam-Status: No, score=-99.202 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id uJIkCAPFje6q for ; Fri, 22 Sep 2017 11:38:02 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 2EBFF5FE6B for ; Fri, 22 Sep 2017 11:38:02 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 1D6DEE0EF1 for ; Fri, 22 Sep 2017 11:38:01 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 333E7241ED for ; Fri, 22 Sep 2017 11:38:00 +0000 (UTC) Date: Fri, 22 Sep 2017 11:38:00 +0000 (UTC) From: "Abhishek Singh Chouhan (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HBASE-18796) Admin#isTableAvailable returns incorrect result before daughter regions are opened MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Fri, 22 Sep 2017 11:38:06 -0000 [ https://issues.apache.org/jira/browse/HBASE-18796?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16176299#comment-16176299 ] Abhishek Singh Chouhan commented on HBASE-18796: ------------------------------------------------ [~apurtell] The addendum might not be correct solution to this problem and might cause a problem elsewhere. I think we should hold on to committing that. I had a bit more look into the behavior. Scan.next says that we should either get values or we get null if the scanner is exhausted. This doesn't seem to be the case hence we're getting the issue here. In the client scanner values = call(callable, caller, scannerTimeout, true); we get a single element in the Result[] values array. Now we proceed to Result[] resultsToAddToCache = scanResultCache.addAndGet(values, callable.isHeartbeatMessage()); int numberOfCompleteRows = scanResultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore; In CompleteScanResultCache#addAndGet we have the code: {code} Result last = results[results.length - 1]; if (last.mayHaveMoreCellsInRow()) { if (partialResults.isEmpty()) { partialResults.add(last); return updateNumberOfCompleteResultsAndReturn(Arrays.copyOf(results, results.length - 1)); } {code} here since results.length = 1 and last.mayHaveMoreCellsInRow() is true we add the result we got into partialResults however the completed results is 0. We end up in (have to look more into this part) if (scan.getLimit() == 0 || scanExhausted(values)) { closeScanner(); closed = true; break; } and end up returning null to the client which should not be the case. We should open another jira for this. Setting allowpartial in ConnectionImplementation might be the wrong thing to do that has other side effects and might hide the actual problem. Someone with more familiarity on the partial scanning side should have more insights. I'll dig into this more tomorrow. In the meantime if we want to just fix the test we can add isTableEnabled() in the wait for split which would make it more robust since checking just number of regions might be a false indicator of successful split. [~tedyu] [~apurtell] [~lhofhansl] > Admin#isTableAvailable returns incorrect result before daughter regions are opened > ---------------------------------------------------------------------------------- > > Key: HBASE-18796 > URL: https://issues.apache.org/jira/browse/HBASE-18796 > Project: HBase > Issue Type: Bug > Affects Versions: 1.3.1 > Reporter: Abhishek Singh Chouhan > Assignee: Abhishek Singh Chouhan > Fix For: 2.0.0, 3.0.0, 1.4.0, 1.3.2, 1.5.0 > > Attachments: HBASE-18796-addendum.branch-1.patch, HBASE-18796-addendum.master.patch, HBASE-18796.branch-1.001.patch, HBASE-18796.branch-1.001.patch, HBASE-18796.branch-1.002.patch, HBASE-18796.branch-1.003.patch, HBASE-18796.master.001.patch > > > Admin#isTableAvailable checks if it can getServerName for the meta entries it reads. During the time of split server location are added to the meta entries in MetaTableAccessor#splitRegion although the description of the method says "Does not add the location information to the daughter regions since they are not open yet.". At this point during the split daughter regions are not actually open, so we can get to a state where parent is offline, daughters are not yet open but isTableAvailable returns true. -- This message was sent by Atlassian JIRA (v6.4.14#64029)