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 1B8AA200C09 for ; Wed, 25 Jan 2017 08:36:35 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 187B2160B4E; Wed, 25 Jan 2017 07:36:35 +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 3AD5B160B50 for ; Wed, 25 Jan 2017 08:36:34 +0100 (CET) Received: (qmail 24095 invoked by uid 500); 25 Jan 2017 07:36:33 -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 24084 invoked by uid 99); 25 Jan 2017 07:36:33 -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; Wed, 25 Jan 2017 07:36:33 +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 E500A1A0511 for ; Wed, 25 Jan 2017 07:36:32 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.199 X-Spam-Level: X-Spam-Status: No, score=-1.199 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-2.999] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id Pjo65-Cun7NL for ; Wed, 25 Jan 2017 07:36:31 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 29D1E5F201 for ; Wed, 25 Jan 2017 07:36:31 +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 15CF4E04AB for ; Wed, 25 Jan 2017 07:36:29 +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 432E32529B for ; Wed, 25 Jan 2017 07:36:28 +0000 (UTC) Date: Wed, 25 Jan 2017 07:36:28 +0000 (UTC) From: "Yu Li (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Comment Edited] (HBASE-17471) Region Seqid will be out of order in WAL if using mvccPreAssign MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Wed, 25 Jan 2017 07:36:35 -0000 [ https://issues.apache.org/jira/browse/HBASE-17471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15837325#comment-15837325 ] Yu Li edited comment on HBASE-17471 at 1/25/17 7:36 AM: -------------------------------------------------------- bq. As we tested this patch in our custom HBase-1.1.2, there is no regression either Great, good to know. bq. The order of steps in doMiniBatchMutation will not influence the mvcc assign. The order matters w/o mvcc preassign. However, it's true that here we only need to compare the old and new design for preassign, although you also listed the performance for the "Preassign off" case for master branch. bq. But still, if I have time, I will post data on branch-1 Since you've checked with your custom 1.1.2, I guess no surprise for branch-1. But yes, better to check if time allows. bq. we actually don't need to stamp mvcc/seqid to cells in the wal endits. We only need to stamp them to cells in the memstore I don't think so. We need to stamp mvcc/seqenceId before WAL sync, and keep cells in WAL edits and memstore exactly the same, or else there might be disorder during WAL replay. Regarding the UT improvement, I think we need to differentiate the below two cases: 1. The WAL-only test cases - For this case, I think the change Duo made (create WALKey w/o MVCC) is enough 2. The test cases involving both mvcc and WAL, like those in {{TestHRegion}} - For this case, obviously our test coverage is not enough and missed some cases, and we need to complete them. I took it for granted when [~allan163] mentioned "they are working just because they don't wait on mvcc" he meant case #2. Could you clarify here [~allan163]? Or in another word, does the newly added UT cases in current patch enough to cover all known issues from your observation in product env? Thanks. was (Author: carp84): bq. As we tested this patch in our custom HBase-1.1.2, there is no regression either Great, good to know. bq. The order of steps in doMiniBatchMutation will not influence the mvcc assign. The order matters w/o mvcc preassign. However, it's true that here we only need to compare the old and new design for preassign, although you also listed the performance for the "Preassign off" case for master branch. bq. But still, if I have time, I will post data on branch-1 Since you've checked with your custom 1.1.2, I guess no surprise for branch-1. But yes, better to check if time allows. bq. we actually don't need to stamp mvcc/seqid to cells in the wal endits. We only need to stamp them to cells in the memstore I don't think so. We need to stamp mvcc/seqenceId before WAL sync, and keep cells in WAL edits and memstore exactly the same, or else there might be disorder during WAL replay. Regarding the UT improvement, I think we need to differentiate the below two cases: 1. The WAL-only test cases - For this case, I think the change Duo made (create WALKey w/o MVCC) is enough 2. The test cases involving both mvcc and WAL, like those in {{TestHRegion}} - For this case, obviously our test coverage is not enough and missed some cases, and we need to complete them. I took it for granted when [~allan163] mentioned "they are working just because they don't wait on mvcc" he meant case #2. Could you clarify here [~allan163]? Or in another word, does the newly added UT cases in current patch enough to cover all known issues from your point of view? Thanks. > Region Seqid will be out of order in WAL if using mvccPreAssign > --------------------------------------------------------------- > > Key: HBASE-17471 > URL: https://issues.apache.org/jira/browse/HBASE-17471 > Project: HBase > Issue Type: Bug > Components: wal > Affects Versions: 2.0.0, 1.4.0 > Reporter: Allan Yang > Assignee: Allan Yang > Priority: Critical > Attachments: HBASE-17471-duo.patch, HBASE-17471-duo-v1.patch, HBASE-17471-duo-v2.patch, HBASE-17471.patch, HBASE-17471.tmp, HBASE-17471.v2.patch, HBASE-17471.v3.patch, HBASE-17471.v4.patch, HBASE-17471.v5.patch, HBASE-17471.v6.patch > > > mvccPreAssign was brought by HBASE-16698, which truly improved the performance of writing, especially in ASYNC_WAL scenario. But mvccPreAssign was only used in {{doMiniBatchMutate}}, not in Increment/Append path. If Increment/Append and batch put are using against the same region in parallel, then seqid of the same region may not monotonically increasing in the WAL. Since one write path acquires mvcc/seqid before append, and the other acquires in the append/sync consume thread. > The out of order situation can easily reproduced by a simple UT, which was attached in the attachment. I modified the code to assert on the disorder: > {code} > if(this.highestSequenceIds.containsKey(encodedRegionName)) { > assert highestSequenceIds.get(encodedRegionName) < sequenceid; > } > {code} > I'd like to say, If we allow disorder in WALs, then this is not a issue. > But as far as I know, if {{highestSequenceIds}} is not properly set, some WALs may not archive to oldWALs correctly. > which I haven't figure out yet is that, will disorder in WAL cause data loss when recovering from disaster? If so, then it is a big problem need to be fixed. > I have fix this problem in our costom1.1.x branch, my solution is using mvccPreAssign everywhere, making it un-configurable. Since mvccPreAssign it is indeed a better way than assign seqid in the ringbuffer thread while keeping handlers waiting for it. > If anyone think it is doable, then I will port it to branch-1 and master branch and upload it. > -- This message was sent by Atlassian JIRA (v6.3.4#6332)