Return-Path: X-Original-To: apmail-hadoop-common-issues-archive@minotaur.apache.org Delivered-To: apmail-hadoop-common-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3B852C06A for ; Sat, 13 Dec 2014 15:26:17 +0000 (UTC) Received: (qmail 82590 invoked by uid 500); 13 Dec 2014 15:26:17 -0000 Delivered-To: apmail-hadoop-common-issues-archive@hadoop.apache.org Received: (qmail 82551 invoked by uid 500); 13 Dec 2014 15:26:17 -0000 Mailing-List: contact common-issues-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-issues@hadoop.apache.org Delivered-To: mailing list common-issues@hadoop.apache.org Received: (qmail 82538 invoked by uid 99); 13 Dec 2014 15:26:16 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 13 Dec 2014 15:26:16 +0000 Date: Sat, 13 Dec 2014 15:26:16 +0000 (UTC) From: "Hudson (JIRA)" To: common-issues@hadoop.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HADOOP-11238) Update the NameNode's Group Cache in the background when possible MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/HADOOP-11238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14245375#comment-14245375 ] Hudson commented on HADOOP-11238: --------------------------------- FAILURE: Integrated in Hadoop-Mapreduce-trunk #1991 (See [https://builds.apache.org/job/Hadoop-Mapreduce-trunk/1991/]) HADOOP-11238. Update the NameNode's Group Cache in the background when possible (Chris Li via Colin P. McCabe) (cmccabe: rev e5a692519956aefb3a540ed0137b63cf598ac10d) * hadoop-common-project/hadoop-common/CHANGES.txt * hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestGroupsCaching.java * hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Groups.java > Update the NameNode's Group Cache in the background when possible > ----------------------------------------------------------------- > > Key: HADOOP-11238 > URL: https://issues.apache.org/jira/browse/HADOOP-11238 > Project: Hadoop Common > Issue Type: Bug > Affects Versions: 2.5.1 > Reporter: Chris Li > Assignee: Chris Li > Priority: Minor > Attachments: HADOOP-11238.003.patch, HADOOP-11238.003.patch, HADOOP-11238.patch, HADOOP-11238.patch > > > This patch addresses an issue where the namenode pauses during group resolution by only allowing a single group resolution query on expiry. There are two scenarios: > 1. When there is not yet a value in the cache, all threads which make a request will block while a single thread fetches the value. > 2. When there is already a value in the cache and it is expired, the new value will be fetched in the background while the old value is used by other threads > This is handled by guava's cache. > Negative caching is a feature built into the groups cache, and since guava's caches don't support different expiration times, we have a separate negative cache which masks the guava cache: if an element exists in the negative cache and isn't expired, we return it. > In total the logic for fetching a group is: > 1. If username exists in static cache, return the value (this was already present) > 2. If username exists in negative cache and negative cache is not expired, raise an exception as usual > 3. Otherwise Defer to guava cache (see two scenarios above) > Original Issue Below: > ---------------------------- > Our namenode pauses for 12-60 seconds several times every hour. During these pauses, no new requests can come in. > Around the time of pauses, we have log messages such as: > 2014-10-22 13:24:22,688 WARN org.apache.hadoop.security.Groups: Potential performance problem: getGroups(user=xxxxx) took 34507 milliseconds. > The current theory is: > 1. Groups has a cache that is refreshed periodically. Each entry has a cache expiry. > 2. When a cache entry expires, multiple threads can see this expiration and then we have a thundering herd effect where all these threads hit the wire and overwhelm our LDAP servers (we are using ShellBasedUnixGroupsMapping with sssd, how this happens has yet to be established) > 3. group resolution queries begin to take longer, I've observed it taking 1.2 seconds instead of the usual 0.01-0.03 seconds when measuring in the shell `time groups myself` > 4. If there is mutual exclusion somewhere along this path, a 1 second pause could lead to a 60 second pause as all the threads compete for the resource. The exact cause hasn't been established > Potential solutions include: > 1. Increasing group cache time, which will make the issue less frequent > 2. Rolling evictions of the cache so we prevent the large spike in LDAP queries > 3. Gate the cache refresh so that only one thread is responsible for refreshing the cache -- This message was sent by Atlassian JIRA (v6.3.4#6332)