[ https://issues.apache.org/jira/browse/OOZIE-2775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16335854#comment-16335854 ]
Attila Sasvari commented on OOZIE-2775: --------------------------------------- [~andras.piros] thanks for the review! Regarding the failure: junit.framework.AssertionFailedError: YARN App state for app application_1516711234396_0003 expected:<FINISHED> but was:<RUNNING> at org.apache.oozie.action.hadoop.TestHiveActionExecutor.testHiveAction(TestHiveActionExecutor.java:158) it happened twice (rerun). Failed test passes locally and I am pretty sure it is unrelated to my changes: the patch does not touches oozie-core and a seperate embedded jetty server and miniservers are used for testing in the core module. > Oozie server does not stop if there is an exception during service > initalization at startup > ------------------------------------------------------------------------------------------- > > Key: OOZIE-2775 > URL: https://issues.apache.org/jira/browse/OOZIE-2775 > Project: Oozie > Issue Type: Bug > Reporter: Attila Sasvari > Assignee: Attila Sasvari > Priority: Major > Attachments: OOZIE-2775-01.patch, OOZIE-2775-02.patch > > > OOZIE-2666 brought in embedded jetty in Oozie. {{com.google.inject.guice}} > was selected for dependency management. Unfortunately if there is an > exception at starting Oozie services (e.g. JPAService initialization, called > via > https://github.com/apache/oozie/blob/master/server/src/main/java/org/apache/oozie/server/EmbeddedOozieServer.java#L194), > Oozie won't stop if it cannot destroy Oozie services. > In OOZIE-2666 a shutdown hook > (https://github.com/apache/oozie/blob/master/server/src/main/java/org/apache/oozie/server/EmbeddedOozieServer.java#L184) > was added to print out startup errors and exceptions, destroy pending oozie > services, and exit eventually, but it does not work. > Steps to reproduce a startup failure (for example simulate that Oozie cannot > find required database driver): > {code} > $ cd oozie > $ mvn clean install assembly:single -DskipTests -DjavaVersion=1.8 > -DtargetVersion=1.7 -Phadoop-2 -Dhadoop.version=2.6.0 -Puber; > $ cd distro/target/oozie-4.4.0-SNAPSHOT-distro/oozie-4.4.0-SNAPSHOT/ > $ export JETTY_OPTS="-Djavax.net.debug=all > -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=y > -Dlog4j.logger.org.eclipse.jetty=TRACE > -Dlog4j.configuration=./conf/oozie-log4j.properties" > $ bin/oozied.sh run > $ mv embedded-oozie-server/webapp/WEB-INF/lib/derby-10.10.1.1.jar .. > <attach to the process with a debugger and continue execution> > {code} > Exception is printed to stdout > {code} > <openjpa-2.4.1-r422266:1730418 fatal general error> > org.apache.openjpa.persistence.PersistenceException: Cannot load JDBC driver > class 'org.apache.derby.jdbc.EmbeddedDriver' > at > org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:106) > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603) > at > org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1520) > at > org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:533) > at > org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:458) > at > org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:121) > at > org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68) > at > org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83) > at > org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:967) > at > org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:958) > at > org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:642) > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:202) > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:153) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59) > at > org.apache.oozie.service.JPAService.getEntityManager(JPAService.java:514) > at org.apache.oozie.service.JPAService.init(JPAService.java:215) > at > org.apache.oozie.service.Services.setServiceInternal(Services.java:387) > at org.apache.oozie.service.Services.setService(Services.java:373) > at org.apache.oozie.service.Services.loadServices(Services.java:305) > at org.apache.oozie.service.Services.init(Services.java:213) > at > org.apache.oozie.server.guice.ServicesProvider.get(ServicesProvider.java:31) > at > org.apache.oozie.server.guice.ServicesProvider.get(ServicesProvider.java:25) > at > com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:55) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) > at > com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:53) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) > at > com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) > at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974) > at > com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013) > at > org.apache.oozie.server.EmbeddedOozieServer.main(EmbeddedOozieServer.java:194) > Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC > driver class 'org.apache.derby.jdbc.EmbeddedDriver' > at > org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429) > at > org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) > at > org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) > at > org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110) > at > org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:86) > at > org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:90) > ... 48 more > Caused by: java.lang.ClassNotFoundException: > org.apache.derby.jdbc.EmbeddedDriver > at java.net.URLClassLoader.findClass(URLClassLoader.java:381) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) > at java.lang.ClassLoader.loadClass(ClassLoader.java:357) > at > org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420) > ... 53 more > Exception in thread "main" java.lang.ExceptionInInitializerError: Could not > instantiate Oozie services. [e.message=E0103: Could not load service classes, > Cannot load JDBC driver class 'org.apache.derby.jdbc.EmbeddedDriver'] > at > org.apache.oozie.server.guice.ServicesProvider.get(ServicesProvider.java:36) > at > org.apache.oozie.server.guice.ServicesProvider.get(ServicesProvider.java:25) > at > com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:55) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) > at > com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:53) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) > at > com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) > at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974) > at > com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013) > at > org.apache.oozie.server.EmbeddedOozieServer.main(EmbeddedOozieServer.java:194) > {code} > I checked the JVM process with {{jstack}} and saw: > {code} > "JDWP Transport Listener: dt_socket" #45 daemon prio=10 os_prio=31 > tid=0x00007fb70b001000 nid=0x3d0b runnable [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "DestroyJavaVM" #44 prio=5 os_prio=31 tid=0x00007fb70ad9b000 nid=0x1003 > waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "Attach Listener" #39 daemon prio=9 os_prio=31 tid=0x00007fb70b383000 > nid=0x670f waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "Scheduler-0" #29 prio=5 os_prio=31 tid=0x00007fb70da9b000 nid=0x5e0f waiting > on condition [0x0000700001ae4000] > java.lang.Thread.State: TIMED_WAITING (parking) > at sun.misc.Unsafe.park(Native Method) > - parking to wait for <0x00000006c00187f0> (a > java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) > at > java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) > at > java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) > at > java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) > at > java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) > at > java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > "FileWatchdog" #15 daemon prio=5 os_prio=31 tid=0x00007fb70b2a3000 nid=0x5a03 > waiting on condition [0x00007000019e1000] > java.lang.Thread.State: TIMED_WAITING (sleeping) > at java.lang.Thread.sleep(Native Method) > at org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:104) > "com.google.inject.internal.util.$Finalizer" #14 daemon prio=5 os_prio=31 > tid=0x00007fb70abaf800 nid=0x5803 in Object.wait() [0x00007000018de000] > java.lang.Thread.State: WAITING (on object monitor) > at java.lang.Object.wait(Native Method) > - waiting on <0x00000006c00188d8> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) > - locked <0x00000006c00188d8> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) > at com.google.inject.internal.util.$Finalizer.run(Finalizer.java:114) > "Service Thread" #12 daemon prio=9 os_prio=31 tid=0x00007fb70e834000 > nid=0x5403 runnable [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "C1 CompilerThread3" #11 daemon prio=9 os_prio=31 tid=0x00007fb70e00a800 > nid=0x5203 waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "C2 CompilerThread2" #10 daemon prio=9 os_prio=31 tid=0x00007fb70a80f000 > nid=0x5003 waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "C2 CompilerThread1" #9 daemon prio=9 os_prio=31 tid=0x00007fb70c002000 > nid=0x4e03 waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "C2 CompilerThread0" #8 daemon prio=9 os_prio=31 tid=0x00007fb70d81a000 > nid=0x1707 waiting on condition [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "JDWP Event Helper Thread" #6 daemon prio=10 os_prio=31 > tid=0x00007fb70a80e000 nid=0x4c03 runnable [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fb70b041000 > nid=0x3e0f runnable [0x0000000000000000] > java.lang.Thread.State: RUNNABLE > "Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fb70e002000 nid=0x3803 in > Object.wait() [0x0000700000d3a000] > java.lang.Thread.State: WAITING (on object monitor) > at java.lang.Object.wait(Native Method) > - waiting on <0x00000006c00265d8> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) > - locked <0x00000006c00265d8> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) > at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) > "Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fb70d802000 > nid=0x3603 in Object.wait() [0x0000700000c37000] > java.lang.Thread.State: WAITING (on object monitor) > at java.lang.Object.wait(Native Method) > - waiting on <0x00000006c0026670> (a java.lang.ref.Reference$Lock) > at java.lang.Object.wait(Object.java:502) > at java.lang.ref.Reference.tryHandlePending(Reference.java:191) > - locked <0x00000006c0026670> (a java.lang.ref.Reference$Lock) > at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) > "VM Thread" os_prio=31 tid=0x00007fb70b82b000 nid=0x3403 runnable > "GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fb70d003800 nid=0x2403 > runnable > "GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fb70d004000 nid=0x2603 > runnable > "GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fb70d004800 nid=0x2803 > runnable > "GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fb70a80a800 nid=0x2a03 > runnable > "GC task thread#4 (ParallelGC)" os_prio=31 tid=0x00007fb70a80b000 nid=0x2c03 > runnable > "GC task thread#5 (ParallelGC)" os_prio=31 tid=0x00007fb70a80b800 nid=0x2e03 > runnable > "GC task thread#6 (ParallelGC)" os_prio=31 tid=0x00007fb70d005000 nid=0x3003 > runnable > "GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007fb70d006000 nid=0x3203 > runnable > "VM Periodic Task Thread" os_prio=31 tid=0x00007fb70b042000 nid=0x5603 > waiting on condition > JNI global references: 5741 > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)