@Test public void stop_watching_commands_if_thread_is_interrupted() throws Exception { enableSetting(true); StopRequestWatcherImpl underTest = new StopRequestWatcherImpl(settings, scheduler, commands); underTest.startWatching(); underTest.interrupt(); while (underTest.isAlive()) { Thread.sleep(1L); } assertThat(underTest.isAlive()).isFalse(); }
StopRequestWatcherImpl(AppSettings settings, Scheduler scheduler, ProcessCommands commands) { super("StopRequestWatcherImpl"); this.settings = settings; this.commands = commands; this.scheduler = scheduler; // safeguard, do not block the JVM if thread is not interrupted // (method stopWatching() never called). setDaemon(true); }
@Test public void do_not_watch_command_if_disabled() { enableSetting(false); StopRequestWatcherImpl underTest = new StopRequestWatcherImpl(settings, scheduler, commands); underTest.startWatching(); assertThat(underTest.isAlive()).isFalse(); underTest.stopWatching(); verifyZeroInteractions(commands, scheduler); }
@Override public void stopWatching() { // does nothing is not started interrupt(); } }
public static StopRequestWatcherImpl create(AppSettings settings, Scheduler scheduler, FileSystem fs) { DefaultProcessCommands commands = DefaultProcessCommands.secondary(fs.getTempDir(), ProcessId.APP.getIpcIndex()); return new StopRequestWatcherImpl(settings, scheduler, commands); }
@Test public void create_instance_with_default_delay() throws IOException { FileSystem fs = mock(FileSystem.class); when(fs.getTempDir()).thenReturn(temp.newFolder()); StopRequestWatcherImpl underTest = StopRequestWatcherImpl.create(settings, scheduler, fs); assertThat(underTest.getDelayMs()).isEqualTo(500L); }
@Override public void startWatching() { if (settings.getProps().valueAsBoolean(ENABLE_STOP_COMMAND.getKey())) { start(); } }
public void start(String[] cliArguments) throws IOException { AppSettingsLoader settingsLoader = new AppSettingsLoaderImpl(cliArguments); AppSettings settings = settingsLoader.load(); // order is important - logging must be configured before any other components (AppFileSystem, ...) AppLogging logging = new AppLogging(settings); logging.configure(); AppFileSystem fileSystem = new AppFileSystem(settings); try (AppState appState = new AppStateFactory(settings).create()) { appState.registerSonarQubeVersion(getSonarqubeVersion()); appState.registerClusterName(settings.getProps().nonNullValue(CLUSTER_NAME.getKey())); AppReloader appReloader = new AppReloaderImpl(settingsLoader, fileSystem, appState, logging); fileSystem.reset(); CommandFactory commandFactory = new CommandFactoryImpl(settings.getProps(), fileSystem.getTempDir(), System2.INSTANCE); try (ProcessLauncher processLauncher = new ProcessLauncherImpl(fileSystem.getTempDir())) { Scheduler scheduler = new SchedulerImpl(settings, appReloader, commandFactory, processLauncher, appState); // intercepts CTRL-C Runtime.getRuntime().addShutdownHook(new ShutdownHook(scheduler)); scheduler.schedule(); stopRequestWatcher = StopRequestWatcherImpl.create(settings, scheduler, fileSystem); stopRequestWatcher.startWatching(); scheduler.awaitTermination(); stopRequestWatcher.stopWatching(); } } systemExit.exit(0); }
@Override public void stopWatching() { // does nothing is not started interrupt(); } }
public static StopRequestWatcherImpl create(AppSettings settings, Scheduler scheduler, FileSystem fs) { DefaultProcessCommands commands = DefaultProcessCommands.secondary(fs.getTempDir(), ProcessId.APP.getIpcIndex()); return new StopRequestWatcherImpl(settings, scheduler, commands); }
@Override public void startWatching() { if (settings.getProps().valueAsBoolean(ProcessProperties.ENABLE_STOP_COMMAND)) { start(); } }
StopRequestWatcherImpl(AppSettings settings, Scheduler scheduler, ProcessCommands commands) { super("StopRequestWatcherImpl"); this.settings = settings; this.commands = commands; this.scheduler = scheduler; // safeguard, do not block the JVM if thread is not interrupted // (method stopWatching() never called). setDaemon(true); }