public void runIt(Pipe pipe) { HsmFlushSchedulable s; Event event; boolean done = false; boolean initDone = false; _log.info(_printoutName + ": Worker event loop started for " + _schedulerName); while ((!Thread.interrupted()) && (!done)) { try { event = pipe.pop(); } catch (InterruptedException e) { break; } synchronized (this) { s = _scheduler; if (s == null) { break; } } try { if ((!initDone) && _poolCollector.isPoolSetupReady() && _poolCollector.isPoolConfigDone()) { s.init(); initDone = true; _poolCollector.queryAllPoolModes(); } if (!initDone) { continue; } switch (event.type) { case Event.FLUSHING_DONE: HFCFlushInfo info = (HFCFlushInfo) event.args[0]; s.flushingDone( info._pool._poolName, info._flushInfo.getStorageClass() + "@" + info._flushInfo.getHsm(), info); break; case Event.POOL_FLUSH_INFO_UPDATED: { HFCPool pool = (HFCPool) event.args[0]; s.poolFlushInfoUpdated(pool._poolName, pool); } break; case Event.POOL_IO_MODE_UPDATED: { HFCPool pool = (HFCPool) event.args[0]; s.poolIoModeUpdated(pool._poolName, pool); } break; case Event.CONFIGURED_POOL_ADDED: { String poolName = (String) event.args[0]; s.configuredPoolAdded(poolName); } break; case Event.CONFIGURED_POOL_REMOVED: { String poolName = (String) event.args[0]; s.configuredPoolRemoved(poolName); } break; case Event.PROPERTIES_UPDATED: { Map<String, Object> properties = (Map<String, Object>) event.args[0]; s.propertiesUpdated(properties); synchronized (_propertyLock) { _propertiesUpdated = System.currentTimeMillis(); _properties = properties; } } break; case Event.POOL_SETUP_UPDATED: s.poolSetupUpdated(); break; case Event.CALL_DRIVER: Args args = (Args) event.args[0]; s.command(args); break; case Event.TIMER: s.timer(); break; case Event.RESET: s.reset(); break; case Event.UNLOAD: done = true; break; } } catch (Throwable t) { _log.warn(_printoutName + ": Exception reported by " + event.type + " : " + t, t); } } _log.info(_printoutName + ": Worker event loop stopped"); _log.info(_printoutName + ": Preparing unload"); synchronized (this) { if (_scheduler == null) { return; } try { _scheduler.prepareUnload(); } catch (Throwable t) { _log.warn(_printoutName + ": Exception in prepareUnload " + t, t); } _scheduler = null; _worker = null; _initDone = false; } }