@Override public void discovered(DiscoveryEvent e) { synchronized (_initialServiceRegistrarsLock) { for (ServiceRegistrar registrar : e.getRegistrars()) { if (_logger.isLoggable(Level.FINER)) _logger.finer("Discovery event for registrar with service id: " + registrar.getServiceID() + " (discovered via initial seed locators)"); _initialRegistrars.add(registrar); _initialRegistrarsDiscoveredLatch.countDown(); } } }
@Override public void discarded(DiscoveryEvent e) { for (ServiceRegistrar registrar : e.getRegistrars()) { if (_logger.isLoggable(Level.FINER)) _logger.finer("Discarded event for registrar with service id: " + registrar.getServiceID() + " (discovered via initial seed locators)"); } }
private Map<ServiceID, LookupLocator> getInitialLookupLocatorsMap() { List<ServiceRegistrar> registrars = getRegistrars(); Map<ServiceID, LookupLocator> initialLocatorsMap = new HashMap<ServiceID, LookupLocator>(); for (ServiceRegistrar registrar : registrars) { if (_logger.isLoggable(Level.FINER)) { _logger.finer("Trying to get locator from registrar with service id: " + registrar.getServiceID()); } try { initialLocatorsMap.put(registrar.getServiceID(), registrar.getLocator()); } catch (RemoteException e) { if (_logger.isLoggable(Level.WARNING)) { _logger.log(Level.WARNING, "Failed getting initial locator for registrar with service id: " + registrar.getServiceID(), e); } } } return initialLocatorsMap; }
public void discarded(DiscoveryEvent dEvent) { long t = System.currentTimeMillis(); ServiceRegistrar[] reggies = dEvent.getRegistrars(); for (int i = 0; i < reggies.length; i++) { ReggieStat rStat = removeReggieStat(reggies[i].getServiceID()); if (rStat != null) { rStat.eventTime = t; rStat.type = ReggieStat.DISCARDED; synchronized (discoveryTimes) { discoveryTimes.add(rStat); } } } }
private boolean isDynamicLocatorsEnabledAtRegistrar() { // we check if any of the discovered registrars support dynamic locators List<ServiceRegistrar> registrars = getRegistrars(); for (ServiceRegistrar registrar : registrars) { if (_logger.isLoggable(Level.FINER)) { _logger.finer("Checking if registrar with service id: " + registrar.getServiceID() + " supports dynamic locators"); } try { Administrable administrable = (Administrable) registrar; JoinAdmin joinAdmin = (JoinAdmin) administrable.getAdmin(); for (Entry entry : joinAdmin.getLookupAttributes()) { if (DYNAMIC_LOCATORS_ENABLED_LOOKUP_ATTRIBUTE.equals(entry)) { if (_logger.isLoggable(Level.FINER)) _logger.finer("Registrar with service id: " + registrar.getServiceID() + " supports dynamic locators"); return true; } } if (_logger.isLoggable(Level.FINER)) _logger.finer("Registrar with service id: " + registrar.getServiceID() + " does not support dynamic locators"); } catch (RemoteException e) { if (_logger.isLoggable(Level.WARNING)) { _logger.log(Level.WARNING, "Failed getting lookup attributes from registrar: " + registrar.getServiceID(), e); } } } return false; }
/** * Performs the actual attribute augmentation, replacement, or modification work. This * method is typically overridden by sub-classes of this class. */ protected void doAttributes(ProxyReg proxyReg) throws Exception { log(Level.FINEST, "JoinManager - AddAttributesTask started"); try { if (logger.isLoggable(Level.FINEST)) { log(Level.FINEST, "add attributes [" + Arrays.toString(attrSets) + "] to lus-id [" + proxyReg.proxy.getServiceID() + "]"); } proxyReg.addAttributes(attrSets); } finally { if (latch != null) { latch.countDown(); } } log(Level.FINEST, "JoinManager - AddAttributesTask completed"); }//end AddAttributesTask.doAttributes
private ServiceRegistrar getOurRegistrarInNeeded(final ServiceID serviceID, Map<ServiceID, LookupLocator> initialLocatorsMap) { if (serviceID == null) return null; ServiceRegistrar registrar = null; List<ServiceRegistrar> registrars = getRegistrars(); for (ServiceRegistrar reg : registrars) { if (reg.getServiceID().equals(serviceID)) { if (_logger.isLoggable(Level.FINER)) _logger.finer("Found registrar with service id: " + serviceID); registrar = reg; break; } } if (registrar == null) { if (_logger.isLoggable(Level.WARNING)) _logger.warning("Could not find registrar with service id: " + serviceID + ", this lookup service will not update its state properly"); } return registrar; }
+ registrar.getServiceID() + ", Current locators: " + BootUtil.arrayToCommaDelimitedString(_dlm.getLocators())); Set<LookupLocator> locators = _locators.get(registrar.getServiceID()); if (locators != null) { if (!_enabledSeedRemoval && anySeedLocator(locators)) { if (_logger.isLoggable(Level.FINE)) { _logger.fine("Not removing locators of registrar with service id: " + registrar.getServiceID() + ", as seed removal is disabled"); } else if (!_locatorsPendingRemovalServiceIDs.containsKey(registrar.getServiceID())) { if (_logger.isLoggable(Level.FINE)) { _logger.fine("Adding locators " + locators + " to pending removal locators"); _locatorsPendingRemovalServiceIDs.put(registrar.getServiceID(), locators); final long eventTime = SystemTime.timeMillis(); for (LookupLocator locator : locators) if (_logger.isLoggable(Level.FINER)) { _logger.finer("ServiceRegistrar with serviceID " + registrar.getServiceID() + " already removed");
/** * Determine if any of the already-discovered registrars are no longer members of any of the * groups to discover, and discard those registrars that are no longer members of any of those * groups. */ private void maybeDiscardRegistrars() { synchronized (registrars) { HashMap groupsMap = new HashMap(registrars.size()); for (Iterator iter = registrars.values().iterator(); iter.hasNext(); ) { UnicastResponse ent = (UnicastResponse) iter.next(); if (!groupsOverlap(ent.getGroups())) { // not interested anymore groupsMap.put(ent.getRegistrar(), ent.getGroups()); regInfo.remove(ent.getRegistrar().getServiceID()); iter.remove(); // remove (srvcID,response) mapping }//endif }//end loop if (!groupsMap.isEmpty() && !listeners.isEmpty()) { addNotify((ArrayList) listeners.clone(), groupsMap, DISCARDED); }//endif }//end sync }//end maybeDiscardRegistrars
/** Determine if any of the already-discovered registrars are no longer * members of any of the groups to discover, and discard those registrars * that are no longer members of any of those groups. */ @SuppressWarnings("unchecked") private void maybeDiscardRegistrars() { Map<ServiceRegistrar,String[]> groupsMap = new HashMap<ServiceRegistrar,String[]>(registrars.size()); for(Iterator<UnicastResponse> iter=registrars.values().iterator();iter.hasNext(); ){ UnicastResponse ent = iter.next(); if(!groupsOverlap(ent.getGroups())) { // not interested anymore groupsMap.put(ent.getRegistrar(),ent.getGroups()); regInfo.remove(ent.getRegistrar().getServiceID()); iter.remove(); // remove (srvcID,response) mapping }//endif }//end loop if( !groupsMap.isEmpty() && !listeners.isEmpty() ) { addNotify(listeners, groupsMap, DISCARDED); }//endif }//end maybeDiscardRegistrars
/** * Convenience method that sends a discarded event containing only one registrar to all * registered listeners. This method must be called from within a block that is synchronized on * the registrars map. * * @param reg instance of <code>ServiceRegistrar</code> corresponding to the registrar to * include in the event * @param curGroups <code>String</code> array containing the current member groups of the * registrar referenced by the <code>reg</code> parameter */ private void sendDiscarded(ServiceRegistrar reg, String[] curGroups) { ServiceID srvcID = reg.getServiceID(); if (curGroups == null) { // discard request is from external source UnicastResponse resp = (UnicastResponse) registrars.get(srvcID); if (resp == null) return; curGroups = resp.getGroups(); }//endif if (registrars.remove(srvcID) != null) { regInfo.remove(srvcID); if (!listeners.isEmpty()) { addNotify((ArrayList) listeners.clone(), mapRegToGroups(reg, curGroups), DISCARDED); }//endif }//endif }//end sendDiscarded
/** Convenience method that sends a discarded event containing only * one registrar to all registered listeners. This method must be * called from within a block that is synchronized on the registrars * map. * * @param reg instance of <code>ServiceRegistrar</code> * corresponding to the registrar to include in the * event * @param curGroups <code>String</code> array containing the current * member groups of the registrar referenced by the * <code>reg</code> parameter */ private void sendDiscarded(ServiceRegistrar reg, String[] curGroups) { ServiceID srvcID = reg.getServiceID(); if(curGroups == null) { // discard request is from external source UnicastResponse resp = (UnicastResponse)registrars.get(srvcID); if(resp == null) return; curGroups = resp.getGroups(); }//endif if( registrars.remove(srvcID) != null ) { regInfo.remove(srvcID); if( !listeners.isEmpty() ) { addNotify( listeners, mapRegToGroups(reg,curGroups), DISCARDED); }//endif }//endif }//end sendDiscarded
/** * Create a RegieStat object * * @param type Either <code>ReggieStat.DISCOVERED</code> or <code>ReggieStat.DISCARDED</code> * @param t The time the event occurred * @param reggie The ServiceRegistrar instance being recorded * @throws RemoteException If there are comunication exceptions obtaining information from the * ServiceRegistrar instance */ ReggieStat(int type, long t, ServiceRegistrar reggie, String[] groups) throws RemoteException { if (type < DISCOVERED || type > DISCARDED) throw new IllegalArgumentException("bad type"); if (reggie == null) throw new NullPointerException("reggie is null"); this.type = type; eventTime = t; this.groups = groups; LookupLocator locator = reggie.getLocator(); machine = locator.getHost(); port = locator.getPort(); serviceID = reggie.getServiceID(); }
/** Convenience method that sends a changed event containing only * one registrar to all registered listeners that are interested in * such events. This method must be called from within a block that * is synchronized on the registrars map. * * @param reg instance of <code>ServiceRegistrar</code> * corresponding to the registrar to include in the * event * @param curGroups <code>String</code> array containing the current * member groups of the registrar referenced by the * <code>reg</code> parameter */ private void sendChanged(ServiceRegistrar reg, String[] curGroups) { /* replace old groups with new; prevents repeated changed events */ UnicastResponse resp = registrars.get(reg.getServiceID()); registrars.put(reg.getServiceID(), new UnicastResponse(resp.getHost(), resp.getPort(), curGroups, resp.getRegistrar())); if( !listeners.isEmpty() ) { addNotify(listeners, mapRegToGroups(reg,curGroups), CHANGED); }//endif }//end sendChanged
/** * Convenience method that sends a changed event containing only one registrar to all registered * listeners that are interested in such events. This method must be called from within a block * that is synchronized on the registrars map. * * @param reg instance of <code>ServiceRegistrar</code> corresponding to the registrar to * include in the event * @param curGroups <code>String</code> array containing the current member groups of the * registrar referenced by the <code>reg</code> parameter */ private void sendChanged(ServiceRegistrar reg, String[] curGroups) { /* replace old groups with new; prevents repeated changed events */ UnicastResponse resp = (UnicastResponse) registrars.get(reg.getServiceID()); registrars.put(reg.getServiceID(), new UnicastResponse(resp.getHost(), resp.getPort(), curGroups, resp.getRegistrar())); if (!listeners.isEmpty()) { addNotify((ArrayList) listeners.clone(), mapRegToGroups(reg, curGroups), CHANGED); }//endif }//end sendChanged
_logger.finer("Trying to find find registrar with initial seed locator: " + locator); ServiceID serviceID = locator.getRegistrar(_getRegistrarProxyTimeout).getServiceID(); Set<LookupLocator> set = _locators.get(serviceID);
public void run() { for (int i = 0; i < regs.length; i++) { ServiceID id = regs[i].getServiceID(); if (lookup != null && id.equals(lookup.getServiceID())) { lookup = null; seqNo = Long.MAX_VALUE; } for (int j = 0; j < registrars.getMenuComponentCount(); j++) { JMenuItem item = (JMenuItem) registrars.getMenuComponent(j); if (item instanceof RegistrarMenuItem && id.equals(((RegistrarMenuItem) item).id)) { item.setSelected(false); registrars.remove(item); if (registrars.getMenuComponentCount() == 0) addNone(registrars); break; } } } if (lookup == null) resetTmpl(); } }));
private void addOne(ServiceRegistrar registrar) { LookupLocator loc; try { loc = registrar.getLocator(); } catch (Throwable t) { logger.log(Level.INFO, "obtaining locator failed", t); return; } String host = loc.getHost(); if (loc.getPort() != Constants.discoveryPort) host += ":" + loc.getPort(); JRadioButtonMenuItem reg = new RegistrarMenuItem(host, registrar.getServiceID()); reg.addActionListener(wrap(new Lookup(registrar))); if (!(registrars.getMenuComponent(0) instanceof JRadioButtonMenuItem)) registrars.removeAll(); registrars.add(reg); }
(UnicastResponse) registrars.get(reg.getServiceID()); if (resp == null) {
registrars.get(reg.getServiceID()); if (resp == null) {