[ 
https://issues.apache.org/jira/browse/ATLAS-628?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hemanth Yamijala updated ATLAS-628:
-----------------------------------
    Attachment: ATLAS-628-1.patch

Added Zookeeper lock to guard setup steps. This was required because some 
install scenarios probably could still run even the setup in parallel from 
multiple instances.

There is one discussion point based on offline feedback that this could well be 
moved into the Atlas server itself (if a lock is added). I am still to evaluate 
that option fully. Adding this patch here for a quick look and any comments are 
welcome.

> Starting two Atlas instances at the same time causes exceptions in HA mode.
> ---------------------------------------------------------------------------
>
>                 Key: ATLAS-628
>                 URL: https://issues.apache.org/jira/browse/ATLAS-628
>             Project: Atlas
>          Issue Type: Bug
>    Affects Versions: 0.7-incubating
>            Reporter: Hemanth Yamijala
>            Assignee: Hemanth Yamijala
>            Priority: Blocker
>             Fix For: 0.7-incubating
>
>         Attachments: ATLAS-628-1.patch, ATLAS-628.patch
>
>
> Configure HA parameters for Atlas. Use SOLR and HBase as backends. From two 
> terminals start two instances of Atlas at roughly the same time. This causes 
> failure exceptions and at least one instance does not start up properly (in 
> either active or passive mode). The relevant stack trace is:
> {code}
> Caused by: java.lang.ExceptionInInitializerError
>     at 
> org.apache.atlas.repository.graph.GraphBackedMetadataRepository.<clinit>(GraphBackedMetadataRepository.java:67)
>     at java.lang.Class.forName0(Native Method)
>     at java.lang.Class.forName(Class.java:278)
>     at 
> com.google.inject.internal.cglib.core.$ReflectUtils.defineClass(ReflectUtils.java:386)
>     at 
> com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:219)
>     at 
> com.google.inject.internal.cglib.proxy.$Enhancer.createHelper(Enhancer.java:377)
>     at 
> com.google.inject.internal.cglib.proxy.$Enhancer.createClass(Enhancer.java:317)
>     at 
> com.google.inject.internal.ProxyFactory$ProxyConstructor.<init>(ProxyFactory.java:252)
>     at com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:178)
>     at 
> com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:90)
>     at 
> com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29)
>     at 
> com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37)
>     at 
> com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33)
>     at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37)
>     at 
> com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599)
>     at 
> com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379)
>     at 
> com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342)
>     at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257)
>     at com.google.common.cache.LocalCache.get(LocalCache.java:4000)
>     at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4004)
>     at 
> com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874)
>     at 
> com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4880)
>     at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
>     at 
> com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50)
>     at 
> com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136)
>     at 
> com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547)
>     at 
> com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884)
>     at 
> com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
>     at 
> com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
>     at 
> com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
>     at 
> com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:890)
>     at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46)
>     at 
> com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50)
>     at 
> com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:134)
>     ... 24 more
> Caused by: java.lang.IllegalArgumentException: Database has already been 
> initialized but not frozen
>     at 
> com.google.common.base.Preconditions.checkArgument(Preconditions.java:92)
>     at 
> com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1294)
>     at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:93)
>     at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:73)
>     at 
> org.apache.atlas.repository.graph.TitanGraphProvider.getGraphInstance(TitanGraphProvider.java:105)
>     at 
> org.apache.atlas.repository.graph.GraphHelper.<clinit>(GraphHelper.java:64)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to