@Override public void run() { try { JobExecutionMonitor monitor = _jobLauncher.launchJob(new ResolvedJobSpec(_jobSpec, _instanceDriver)); if (!(monitor instanceof JobLauncherExecutionDriver.JobExecutionMonitorAndDriver)) { throw new UnsupportedOperationException(JobLauncherExecutionDriver.JobExecutionMonitorAndDriver.class.getName() + " is expected."); } JobExecutionDriver driver = ((JobLauncherExecutionDriver.JobExecutionMonitorAndDriver) monitor).getDriver(); _callbacksDispatcher.onJobLaunch(driver); driver.registerStateListener(new JobStateTracker()); ExecutorsUtils.newThreadFactory(Optional.of(_log), Optional.of("gobblin-instance-driver")).newThread(driver).start(); } catch (Throwable t) { _log.error("Job launch failed: " + t, t); } } }
@Test public void testHappyPath() { Logger log = LoggerFactory.getLogger("testHappyPath"); JobCatalogListenersContainer jobCatalog = mock(JobCatalogListenersContainer.class); JobSpecSchedulerListenersContainer jobScheduler = mock(JobSpecSchedulerListenersContainer.class); JobExecutionDriver mockDriver = mock(JobExecutionDriver.class); JobExecutionState mockState = mock(JobExecutionState.class); JobLifecycleListener listener1 = mock(JobLifecycleListener.class); JobLifecycleListener listener2 = mock(JobLifecycleListener.class); JobLifecycleListenersList disp = new JobLifecycleListenersList(jobCatalog, jobScheduler, log); disp.registerJobLifecycleListener(listener1); disp.onJobLaunch(mockDriver); disp.registerWeakJobLifecycleListener(listener2); disp.onMetadataChange(mockState, "key", "oldValue", "newValue"); verify(jobCatalog).addListener(eq(listener1)); verify(jobScheduler).registerJobSpecSchedulerListener(eq(listener1)); verify(listener1).onJobLaunch(eq(mockDriver)); verify(listener2, never()).onJobLaunch(eq(mockDriver)); verify(jobCatalog).registerWeakJobCatalogListener(eq(listener2)); verify(jobScheduler).registerWeakJobSpecSchedulerListener(eq(listener2)); verify(listener1).onMetadataChange(eq(mockState), eq("key"), eq("oldValue"), eq("newValue")); verify(listener2).onMetadataChange(eq(mockState), eq("key"), eq("oldValue"), eq("newValue")); }
@Override public void run() { try { JobExecutionMonitor monitor = _jobLauncher.launchJob(new ResolvedJobSpec(_jobSpec, _instanceDriver)); if (!(monitor instanceof JobLauncherExecutionDriver.JobExecutionMonitorAndDriver)) { throw new UnsupportedOperationException(JobLauncherExecutionDriver.JobExecutionMonitorAndDriver.class.getName() + " is expected."); } JobExecutionDriver driver = ((JobLauncherExecutionDriver.JobExecutionMonitorAndDriver) monitor).getDriver(); _callbacksDispatcher.onJobLaunch(driver); driver.registerStateListener(new JobStateTracker()); ExecutorsUtils.newThreadFactory(Optional.of(_log), Optional.of("gobblin-instance-driver")).newThread(driver).start(); } catch (Throwable t) { _log.error("Job launch failed: " + t, t); } } }