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 7469B200CED for ; Fri, 14 Jul 2017 05:01:04 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 7301616D351; Fri, 14 Jul 2017 03:01:04 +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 BC78516D352 for ; Fri, 14 Jul 2017 05:01:03 +0200 (CEST) Received: (qmail 30748 invoked by uid 500); 14 Jul 2017 03:01:02 -0000 Mailing-List: contact dev-help@phoenix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@phoenix.apache.org Delivered-To: mailing list dev@phoenix.apache.org Received: (qmail 30722 invoked by uid 99); 14 Jul 2017 03:01:02 -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, 14 Jul 2017 03:01:02 +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 472111A0634 for ; Fri, 14 Jul 2017 03:01:02 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -100.002 X-Spam-Level: X-Spam-Status: No, score=-100.002 tagged_above=-999 required=6.31 tests=[RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] 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 nI4mOFzCWzxR for ; Fri, 14 Jul 2017 03:01:01 +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 CEDF25FD81 for ; Fri, 14 Jul 2017 03:01:00 +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 66C08E0069 for ; Fri, 14 Jul 2017 03:01:00 +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 1F50724711 for ; Fri, 14 Jul 2017 03:01:00 +0000 (UTC) Date: Fri, 14 Jul 2017 03:01:00 +0000 (UTC) From: "James Taylor (JIRA)" To: dev@phoenix.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (PHOENIX-4021) Remove CachingHTableFactory MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Fri, 14 Jul 2017 03:01:04 -0000 [ https://issues.apache.org/jira/browse/PHOENIX-4021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16086768#comment-16086768 ] James Taylor commented on PHOENIX-4021: --------------------------------------- Looks like ParallelWriterIndexCommitter would already use IndexWriterUtils#CoprocessorHConnectionTableFactory based on calling IndexWriterUtils.getDefaultDelegateHTableFactory(env) in the setup method. The factory caches an HConnection, so we should be ok there. I think the only thing we'd need to do would be to clone the config, override the RPC controller factory, and provide a version of IndexWriterUtils.getDefaultDelegateHTableFactory(env) that passes in the config {code} @Override public void setup(IndexWriter parent, RegionCoprocessorEnvironment env, String name) { this.env = env; Configuration conf = env.getConfiguration(); // Clone config and setup RpcControllerFactory so that RS-RS index update calls // are higher priority than normal RPC calls to prevent deadlocks. conf = PropertiesUtil.cloneConfig(conf); conf.setClass(RpcControllerFactory.CUSTOM_CONTROLLER_CONF_KEY, InterRegionServerIndexRpcControllerFactory.class, RpcControllerFactory.class); setup(IndexWriterUtils.getDefaultDelegateHTableFactory(env, conf), {code} [~samarthjain] - since we're already caching the HConnection in the factory, I think we should be ok. > Remove CachingHTableFactory > --------------------------- > > Key: PHOENIX-4021 > URL: https://issues.apache.org/jira/browse/PHOENIX-4021 > Project: Phoenix > Issue Type: Bug > Affects Versions: 4.11.0 > Reporter: Geoffrey Jacoby > Assignee: Geoffrey Jacoby > Labels: globalMutableSecondaryIndex > Fix For: 4.12.0 > > Attachments: PHOENIX-4021.patch > > > CachingHTableFactory is used as a performance optimization when writing to global indexes so that HTable instances are cached and later automatically cleaned up, rather than instantiated each time we write to an index. > This should be removed for two reasons: > 1. It opens us up to race conditions, because HTables aren't threadsafe, but CachingHTableFactory doesn't guard against two threads both grabbing the same HTable and using it simultaneously. Since all ops going through a region share the same IndexWriter and ParallelWriterIndexCommitter, and hence the same CachingHTableFactory, that means separate operations can both be holding the same HTable. > 2. According to discussion on PHOENIX-3159, and offline discussions I've had with [~apurtell], HBase 1.x and above make creating throwaway HTable instances cheap so the caching is no longer needed. > For 4.x-HBase-1.x and master, we should remove CachingHTableFactory, and for 4.x-HBase-0.98, we should either get rid of it (if it's not too much of a perf hit) or at least make it threadsafe. -- This message was sent by Atlassian JIRA (v6.4.14#64029)