Return-Path: Delivered-To: apmail-directory-dev-archive@www.apache.org Received: (qmail 41746 invoked from network); 12 Nov 2005 00:04:27 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 12 Nov 2005 00:04:27 -0000 Received: (qmail 6101 invoked by uid 500); 12 Nov 2005 00:04:24 -0000 Delivered-To: apmail-directory-dev-archive@directory.apache.org Received: (qmail 6049 invoked by uid 500); 12 Nov 2005 00:04:24 -0000 Mailing-List: contact dev-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Apache Directory Developers List" Delivered-To: mailing list dev@directory.apache.org Received: (qmail 6038 invoked by uid 99); 12 Nov 2005 00:04:24 -0000 X-ASF-Spam-Status: No, hits=1.3 required=10.0 tests=SPF_FAIL X-Spam-Check-By: apache.org Received: from [192.87.106.226] (HELO ajax.apache.org) (192.87.106.226) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 Nov 2005 16:04:24 -0800 Received: from ajax.apache.org (ajax.apache.org [127.0.0.1]) by ajax.apache.org (Postfix) with ESMTP id 18D18E0 for ; Sat, 12 Nov 2005 01:04:03 +0100 (CET) Message-ID: <86934505.1131753843080.JavaMail.jira@ajax.apache.org> Date: Sat, 12 Nov 2005 01:04:03 +0100 (CET) From: "Stephane Bailliez (JIRA)" To: dev@directory.apache.org Subject: [jira] Commented: (DIRLDAP-71) CachingNormalizer exhibits concurrency flaw under load. In-Reply-To: <1116515560.1131749762892.JavaMail.jira@ajax.apache.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/DIRLDAP-71?page=comments#action_12357459 ] Stephane Bailliez commented on DIRLDAP-71: ------------------------------------------ I might be missing something but there's no need to me to do a containsKey() call. AFAIK you'll never get a null normalized value stored in the cache plus the containsKey() is pretty inefficient as it is iterating over all keys to find if it exists so you'll want to avoid that call. The Normalizer interface should certainly be documented to make it clear that it does not accept null values to be normalized and that it should not return null. > CachingNormalizer exhibits concurrency flaw under load. > ------------------------------------------------------- > > Key: DIRLDAP-71 > URL: http://issues.apache.org/jira/browse/DIRLDAP-71 > Project: Directory LDAP > Type: Bug > Components: Common > Versions: 0.9.3 > Reporter: Jacob S. Barrett > Attachments: CachingNormalizer-Concurrency.patch > > CachingNormalizer doesn't have it's cache protected from concurrent modifications. Under load a state is reached where cache.containsKey(key) is true but the result of cache.get(key) results in an unexpected null value and thus a NullPointerException. This is really only reached when you have more than threads than the max cache size and therefore items in the cache are being purged. The attached path synchronizes the cache. It would be better to use a R/W lock from JSR 166 backport or something similar. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira