Return-Path: X-Original-To: apmail-commons-dev-archive@www.apache.org Delivered-To: apmail-commons-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 184C217961 for ; Mon, 9 Feb 2015 05:00:16 +0000 (UTC) Received: (qmail 11467 invoked by uid 500); 9 Feb 2015 00:56:15 -0000 Delivered-To: apmail-commons-dev-archive@commons.apache.org Received: (qmail 11326 invoked by uid 500); 9 Feb 2015 00:56:15 -0000 Mailing-List: contact dev-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Commons Developers List" Delivered-To: mailing list dev@commons.apache.org Received: (qmail 11313 invoked by uid 99); 9 Feb 2015 00:56:15 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 09 Feb 2015 00:56:15 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of sebbaz@gmail.com designates 209.85.220.176 as permitted sender) Received: from [209.85.220.176] (HELO mail-vc0-f176.google.com) (209.85.220.176) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 09 Feb 2015 00:55:49 +0000 Received: by mail-vc0-f176.google.com with SMTP id la4so36739vcb.7 for ; Sun, 08 Feb 2015 16:55:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=os8pXywHovveoXmf2PggyLpzbD5QoNCbOajrHBjj6Hs=; b=M3UY8qbWr3DIBDix7JQQsyl9phwB6gJFnhuA3iUFhrzVW2hHxnZ5h9Od8N4ael4+ud hoLANZJ1yyZPc5c1QupMpmEvGgTavan1VQ3LchPLXoJvvXtPMKxF/bUKAdV88u6Hlv9p PNSV7qDlORaXqgL0Lm+4fHVlwmsZWEjosaKLSUijibJSC9uxUeqwCR4f5cW8OWi9T2BT oTYApnSnzf7ocLBGCDVrAsPuXpsWNoRXUXJQ9irN/JRgi+oW6QCZk6c9adSFFxnW19vV +JOHTDbeZ7wuZge8EJRvpj9I9Z0T9ye8Z5AWcjn2QS4hXNW7+4GWMzPPXZaM05/ps43C imXw== MIME-Version: 1.0 X-Received: by 10.52.12.5 with SMTP id u5mr7343032vdb.1.1423443347614; Sun, 08 Feb 2015 16:55:47 -0800 (PST) Received: by 10.52.36.174 with HTTP; Sun, 8 Feb 2015 16:55:47 -0800 (PST) In-Reply-To: <54D79579.9030805@gmail.com> References: <54D51CCE.40306@gmail.com> <54D541F1.3040601@gmail.com> <54D79579.9030805@gmail.com> Date: Mon, 9 Feb 2015 00:55:47 +0000 Message-ID: Subject: Re: [Pool2] Alternative identity hashmap pool implementations From: sebb To: Commons Developers List Content-Type: text/plain; charset=UTF-8 X-Virus-Checked: Checked by ClamAV on apache.org On 8 February 2015 at 16:57, Phil Steitz wrote: > On 2/8/15 8:51 AM, sebb wrote: >> On 6 February 2015 at 22:36, Phil Steitz wrote: >>> On 2/6/15 1:28 PM, sebb wrote: >>>> On 6 February 2015 at 19:58, Phil Steitz wrote: >>>>> On 2/6/15 11:56 AM, sebb wrote: >>>>>> There seem to be a few use-cases for pools that always treat different >>>>>> instances as different entries, rather than using the current equals() >>>>>> check. >>>>> Yes >>>>>> Would it make sense to implement alternative versions that accept an >>>>>> object and wrap it in a class that implements equals() using == and >>>>>> System.identityHashcode? >>>>> Yes, we should definitely support this use case. >>>>>> The IdentityWrapper class was suggested here: >>>>>> >>>>>> https://issues.apache.org/jira/browse/POOL-283?focusedCommentId=14307637&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14307637 >>>>>> >>>>>> I think it could be done by subclassing the existing implementations >>>>>> to provide the wrapping/unwrapping support. >>>>>> >>>>>> There would be an overhead because the wrappers would need to be >>>>>> created every time an object was passed in. The wrappers are very >>>>>> small. >>>>> Once I get the DBCP release I am working on out, I plan to explore >>>>> all three alternatives in my comment on POOL-284. The performance >>>>> regression testing tool that Thomas found and referenced on that >>>>> ticket looks very interesting and could help assessing the cost of >>>>> wrapping / unwrapping or changing the current impl to use >>>>> sync-protected IdentityHashMap. >>>> Changing to IdentityHashMap implies dropping support for >>>> equals()-equivalent pool entries. >>>> Are there no use-cases for such behaviour? >>> Good point. We would probably want to make this configurable. >> We seem to be moving towards changing the implementations to support >> both the current equals() comparison and a new identity comparison >> (whether by wrapper or alternate hashmap implementation). > I agree we need to provide something that works for non-HashMap > compatible objects. > > I am not ready to conclude though that we should change the main / > default impl until we have done some performance testing, which is > very tricky to get right. I haven't played with the tool that > Thomas referenced; but it looks promising for this kind of thing. > In any case, I don't want to do anything that impacts performance > of DBCP and other clients that work fine under the Hashmap compat > requirement. I'm not suggesting changing the default implementation behaviour; that might break some existing apps. >> >> That would allow Pool2 to be used in the same way as Pool1 (with >> suitable config). >> I think that would be better than providing the identity comparing >> pools as independent PoolUtils methods. > > The advantage of the separate impl approach is we can keep the > current impl simple and performant. Perhaps, but I imagine a lot of the code would have to be duplicated. I was thinking instead of changing the code so it uses an abstract Map. When the instance is created, the map type would be chosen accordingly, with the default as now. >> >> Also it should make it easier to change the identity implementation at >> a later date if necessary. >> I.e. the initial impl. could use the IdentityWrapper, as that is known >> to work and is available now. >> If a bettter impl. were developed later it could replace the IdentityWrapper. > > As an alternative impl, I have no problem with this; but I don't > want to add this overhead to the default unless it really can be > shown to be costless (which I doubt). The problem with an alternative impl. is the amount of code that has to be duplicated. > It could be we can just do the "alternative impl" stuff behind the > scenes in config. The main points IMO are > > 0) we don't want to do anything to make current performance worse > 1) we need to make the contract clear Agreed. > 2) we should provide support for reference-based instance management > (both the use case where equals does not discern distinct objects > and where mutability causes equals to "incorrectly" discern > returning instances from references to them in allObjects). Not quite sure what you mean by reference-based here. Is that different from the IdentityWrapper approach? --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org For additional commands, e-mail: dev-help@commons.apache.org