/** * find work site by naming * * @param naming * @return */ public SiteHost[] find(String naming) { Naming s = new Naming(naming); Logger.info("WorkPool.find, find work site by '%s'", s); ArrayList<SiteHost> a = new ArrayList<SiteHost>(); this.lockSingle(); try { SiteSet set = mapNaming.get(s); if (set != null) { a.addAll(set.list()); } } catch (Throwable exp) { Logger.error(exp); } finally { this.unlockSingle(); } if (a.isEmpty()) return null; SiteHost[] hosts = new SiteHost[a.size()]; return a.toArray(hosts); }
/** check timeout site */ private void check() { int size = mapTime.size(); if (size == 0) return; ArrayList<SiteHost> dels = new ArrayList<SiteHost>(size); ArrayList<SiteHost> notifys = new ArrayList<SiteHost>(size); super.lockSingle(); try { long nowTime = System.currentTimeMillis(); for (SiteHost host : mapTime.keySet()) { Long value = mapTime.get(host); if (value == null) { dels.add(host); continue; } long time = value.longValue(); if (nowTime - time >= deleteTime) { dels.add(host); } else if (nowTime - time >= refreshTimeout) { notifys.add(host); } } } catch (Throwable exp) { exp.printStackTrace(); } finally { super.unlockSingle(); } // remove timeout site for (SiteHost host : dels) { Logger.error("WorkPool.check, delete timeout site:%s", host); remove(host); } // notify site SiteHost listen = Launcher.getInstance().getLocalHost(); for (SiteHost host : notifys) { Logger.warning("WorkPool.check, notify timeout site:%s", host); this.sendTimeout(host, listen, 2); } }
/** @return */ public List<SiteHost> gather() { ArrayList<SiteHost> array = new ArrayList<SiteHost>(); array.addAll(mapSite.keySet()); return array; }