[ https://issues.apache.org/jira/browse/ACCUMULO-2876?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14025629#comment-14025629 ]
Eric Newton commented on ACCUMULO-2876: --------------------------------------- I like the 2nd option (always use the site configuration). > Unexpected looping from HdfsZooInstance.getInstanceID() > ------------------------------------------------------- > > Key: ACCUMULO-2876 > URL: https://issues.apache.org/jira/browse/ACCUMULO-2876 > Project: Accumulo > Issue Type: Improvement > Components: client > Affects Versions: 1.6.0 > Reporter: Bill Havanki > Assignee: Bill Havanki > Priority: Minor > > While working ACCUMULO-2615, I encountered a weird looping behavior rooted at > {{HdfsZooInstance.getInstanceID()}} that seems to accidentally avoid a stack > overflow. I'm a bit blocked at the moment on -2615 since my work exposed the > loop. > Here's a summary of the loop. The unit test {{SystemCredentialsTest}} in the > tserver module exercises it. > * Start at {{HdfsZooInstance.getInstanceID()}}, which calls to an internal > {{_getInstanceID()}} the first time. > * A volume manager is needed to find the instance ID in HDFS, so > {{VolumeManagerImpl.get()}} is called. > * That call needs the "system" configuration, so a call to > {{ServerConfiguration.getSystemConfiguration()}} is made, passing the > {{HdfsZooInstance}} object. > * The system configuration is a {{ZooConfiguration}} object, and that is > created from {{ZooConfiguration.getInstance()}}. > * That factory method creates a {{ZooConfiguration}} object, saved as a > static field. The code then tries to get the instance ID for the passed-in > instance, which is the {{HdfsZooInstance}} object. So we're back at the top > of the loop. > In the last step of the second iteration of the loop, the factory method sees > that the static field for the singleton instance of {{ZooConfiguration}} was > set in the first iteration, so it returns it and doesn't look for the > instance ID. That stops the looping and the call stack unwinds. > (My refactoring work has trouble with this because it gets rid of the single > static field in favor of a map of objects keyed by instance ID.) > This loop indicates a mutual dependency between configurations, the volume > manager, and {{HdfsZooInstance}} that should be resolved. -- This message was sent by Atlassian JIRA (v6.2#6252)