Return-Path: X-Original-To: apmail-accumulo-dev-archive@www.apache.org Delivered-To: apmail-accumulo-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F2DDC1089E for ; Wed, 26 Mar 2014 07:11:07 +0000 (UTC) Received: (qmail 16950 invoked by uid 500); 26 Mar 2014 07:11:07 -0000 Delivered-To: apmail-accumulo-dev-archive@accumulo.apache.org Received: (qmail 16878 invoked by uid 500); 26 Mar 2014 07:11:06 -0000 Mailing-List: contact dev-help@accumulo.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@accumulo.apache.org Delivered-To: mailing list dev@accumulo.apache.org Received: (qmail 16870 invoked by uid 99); 26 Mar 2014 07:11:05 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 Mar 2014 07:11:05 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of busbey@cloudera.com designates 209.85.192.43 as permitted sender) Received: from [209.85.192.43] (HELO mail-qg0-f43.google.com) (209.85.192.43) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 Mar 2014 07:11:00 +0000 Received: by mail-qg0-f43.google.com with SMTP id f51so358662qge.2 for ; Wed, 26 Mar 2014 00:10:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-type; bh=YYlaPCQmwEnIkUiNQkMFgUs3iVBiSulR8SjPryjnMRE=; b=FBp3HVHskQmNe51PNluPSZM3lx+Aql37Hf6GE6csUDlT/xPm3ggrKQdfxiZ+87zNQd rD3ZJvBwDGSFVl3bTnBq+o5zOnU0Z8GRydo9OtgvaHZfDaXKf4yzdFhEXzIEjXtjFC9F OkY6v6tvPt63M7vVK6d/KnSOx+eaUNdNQZYtaAEdVQRQ8VzIF5k/J8pFTlPT1lIihkie 7xit7F+w8pXGv+TeQbkcZtWuOKSUAvtucxXnM2YXr60uKVS4t6XRQAUG/Us3F0yXHDJA wKYEU2zM8lPl1IB20RZNFQUqBl1Ua7zrSp3zGyunpuM/Mjk+1CvObGZlrBdbZHJhRMMx /ppQ== X-Gm-Message-State: ALoCoQmSHdtzMLnLx4TLdF2+t73ebVftW8K+992LfLPJSsxUVK37Rk2nIok0LV03dhmqyK4yd/Io X-Received: by 10.140.83.37 with SMTP id i34mr256554qgd.100.1395817840066; Wed, 26 Mar 2014 00:10:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.232.65 with HTTP; Wed, 26 Mar 2014 00:10:19 -0700 (PDT) From: Sean Busbey Date: Wed, 26 Mar 2014 02:10:19 -0500 Message-ID: Subject: [DISCUSS] MiniAccumuloCluster goals and approach To: "dev@accumulo apache. org" Content-Type: multipart/alternative; boundary=001a11c0f62c87547104f57d2a89 X-Virus-Checked: Checked by ClamAV on apache.org --001a11c0f62c87547104f57d2a89 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable ACCUMULO-2143 has developed a conversation about MiniAccumuloCluster's intended use and the way we currently implement the difference between MAC for external use and MAC for internal Accumulo testing[1]. In particular, Josh had a few major concerns ----- It doesn't make sense to me why MiniAccumuloCluster is a concrete class which, ultimately still tied to a MiniAccumuloClusterImpl. MiniAccumuloCluster *requires* a MiniAccumuloClusterImpl or something that extends it. This is what's really chafing me about the separation of "accumulo user" and "accumulo developer" methods =E2=80=93 you *always* hav= e them both. Not to mention, this hierarchy is really obnoxious to create a new implementation of AccumuloMiniCluster(Impl) because I have to carry all of the cruft of the "original" implementation with me. Bringing this back around to this ticket, while I still don't agree with the reasoning that exposing the FileSystem or ZooKeeper object that MiniAccumuloClusterImpl is getting us anything other than the ability to say "we didn't change this [arbitrary] API". For "users" who might not care what the underlying FileSystem or ZooKeeper connection, it's merely an extra two items in their editor's code-completion. For "users" who would care to use this information, we now make them jump through extra hoops to get it. That just doesn't make any sense to me for something we haven't even released. To be honest, I really want to re-open ACCUMULO-2151, make MiniAccumuloCluster an interface, MiniAccumuloClusterImpl an implementation of said interface, and create some factory class to make instances, ala Connector.tableOperations, Connector.securityOperations, etc. Right now there's a class we call an "API" that cannot be generically extended for the sake of saying "we have an API". ---- I wanted to avoid having a drawn out discussion on a jira, where folks my not notice it. Especially with things being late in 1.6.0 development and the potential this has to impact the API. Personally, I don't have much of a dog in the fight. There's always some arbitrary line for where the public API will be, presuming we want to have any kind of balance between providing a stable based for others to build on and being able to refactor things. I would like us to hold to our API promises[2] and I would rather we not leak implementation details unnecessarily. I suspect the choice to make MiniAccumuloCluster a class rather than an interface with a factory was driven by the restrictions we put on API changes between major versions and the fact that 1.5 had a class you could instantiate via constructors[3]. It's possible we can address some of the major reusability concerns by moving most of the implementation back into MAC, liberally using package access for members, and making the internal-use MAC extend the public one. [1]: https://issues.apache.org/jira/browse/ACCUMULO-2143 [2]: http://accumulo.apache.org/governance/releasing.html [3]: https://issues.apache.org/jira/browse/ACCUMULO-2151 --001a11c0f62c87547104f57d2a89--