Don't start services if non is needed
When process isolation feature is enabled, there
may be no services
required to start in the worker process.
In this case, we will get a waring as below:
"Jan 23, 2018 10:43:50 AM
com.google.common.util.concurrent.ServiceManager
<init>
WARNING: ServiceManager configured with no
services. Is your application configured
properly?
com.google.common.util.concurrent.ServiceManager$E
mptyServiceManagerWarning
at com.google.common.util.concurrent.ServiceManage
r.<init>(ServiceManager.java:168)
at org.apache.gobblin.cluster.GobblinTaskRunner.<i
nit>(GobblinTaskRunner.java:167)
at org.apache.gobblin.cluster.ClusterIntegrationTe
st.startWorker(ClusterIntegrationTest.java:196)
at org.apache.gobblin.cluster.ClusterIntegrationTe
st.startCluster(ClusterIntegrationTest.java:189)
at org.apache.gobblin.cluster.ClusterIntegrationTe
st.runSimpleJobAndVerifyResult(ClusterIntegrationT
est.java:93)
at org.apache.gobblin.cluster.ClusterIntegrationTe
st.simpleJobShouldCompleteInTaskIsolationMode(Clus
terIntegrationTest.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Na
tive Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Nat
iveMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
at
java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invo
keMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoke
r.java:643)
at org.testng.internal.Invoker.invokeTestMethod(In
voker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(I
nvoker.java:1128)
at org.testng.internal.TestMethodWorker.invokeTest
Methods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMe
thodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.jav
a:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java
:366)
at org.testng.SuiteRunner.runSequentially(SuiteRun
ner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.j
ava:319)
at
org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunn
erWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWor
ker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.
java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:
1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestN
G.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestN
GStarter.java:123)
"
Fix:
Don't use serviceManager if no service is needed.
Testing:
Ran with the basic integration test and verified
the warning is gone is
the log.
Closes #2259 from HappyRay/do-not-start-services-
if-none-is-needed
Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/9e788351
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/9e788351
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/9e788351
Branch: refs/heads/0.12.0
Commit: 9e788351e37fc0c1da2874bd4c7816240990a1a5
Parents: cd9447a
Author: Ray Yang <[email protected]>
Authored: Mon Feb 5 11:50:15 2018 -0800
Committer: Abhishek Tiwari <[email protected]>
Committed: Mon Feb 5 11:50:15 2018 -0800
----------------------------------------------------------------------
.../gobblin/cluster/GobblinTaskRunner.java | 28 +++++++++++++++-----
1 file changed, 21 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/9e788351/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinTaskRunner.java
----------------------------------------------------------------------
diff --git
a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinTaskRunner.java
b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinTaskRunner.java
index 8816457..a3fddab 100644
---
a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinTaskRunner.java
+++
b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinTaskRunner.java
@@ -164,7 +164,11 @@ public class GobblinTaskRunner {
this.taskStateModelFactory = registerHelixTaskFactory();
services.addAll(getServices());
- this.serviceManager = new ServiceManager(services);
+ if (services.isEmpty()) {
+ this.serviceManager = null;
+ } else {
+ this.serviceManager = new ServiceManager(services);
+ }
logger.debug("GobblinTaskRunner: applicationName {}, helixInstanceName {},
applicationId {}, taskRunnerId {}, config {}, appWorkDir {}",
applicationName, helixInstanceName, applicationId, taskRunnerId,
config, appWorkDirOptional);
@@ -263,8 +267,10 @@ public class GobblinTaskRunner {
this.taskRunnerId);
}
- this.serviceManager.startAsync();
- this.serviceManager.awaitStopped();
+ if (this.serviceManager != null) {
+ this.serviceManager.startAsync();
+ this.serviceManager.awaitStopped();
+ }
}
public synchronized void stop() {
@@ -282,10 +288,7 @@ public class GobblinTaskRunner {
}
try {
- // Give the services 5 minutes to stop to ensure that we are responsive
to shutdown requests
- this.serviceManager.stopAsync().awaitStopped(5, TimeUnit.MINUTES);
- } catch (TimeoutException te) {
- logger.error("Timeout in stopping the service manager", te);
+ stopServices();
} finally {
this.taskStateModelFactory.shutdown();
@@ -295,6 +298,17 @@ public class GobblinTaskRunner {
this.isStopped = true;
}
+ private void stopServices() {
+ if (this.serviceManager != null) {
+ try {
+ // Give the services 5 minutes to stop to ensure that we are
responsive to shutdown requests
+ this.serviceManager.stopAsync().awaitStopped(5, TimeUnit.MINUTES);
+ } catch (TimeoutException te) {
+ logger.error("Timeout in stopping the service manager", te);
+ }
+ }
+ }
+
/**
* Creates and returns a {@link List} of additional {@link Service}s that
should be run in this
* {@link GobblinTaskRunner}. Sub-classes that need additional {@link
Service}s to run, should override this method