/** stop currently running threads if any (e.g. when changing a case) */ synchronized void stopAll() { // stop queue worker if (queueWorker != null) { queueWorker.cancel(true); queueWorker = null; } // empty queues scheduler.getFileScheduler().empty(); scheduler.getDataSourceScheduler().empty(); // stop module workers if (abstractFileIngester != null) { // send signals to all file modules for (IngestModuleAbstractFile s : this.abstractFileModules) { if (isModuleRunning(s)) { try { s.stop(); } catch (Exception e) { logger.log( Level.WARNING, "Unexpected exception while stopping module: " + s.getName(), e); } } } // stop fs ingester thread boolean cancelled = abstractFileIngester.cancel(true); if (!cancelled) { logger.log(Level.INFO, "Unable to cancel file ingest worker, likely already stopped"); } abstractFileIngester = null; } List<IngestDataSourceThread> toStop = new ArrayList<IngestDataSourceThread>(); toStop.addAll(dataSourceIngesters); for (IngestDataSourceThread dataSourceWorker : toStop) { IngestModuleDataSource s = dataSourceWorker.getModule(); // stop the worker thread if thread is running boolean cancelled = dataSourceWorker.cancel(true); if (!cancelled) { logger.log( Level.INFO, "Unable to cancel data source ingest worker for module: " + dataSourceWorker.getModule().getName() + " data source: " + dataSourceWorker.getContent().getName()); } // stop notification to module to cleanup resources if (isModuleRunning(s)) { try { dataSourceWorker.getModule().stop(); } catch (Exception e) { logger.log(Level.WARNING, "Exception while stopping module: " + s.getName(), e); } } } logger.log(Level.INFO, "stopped all"); }