/** * Get all attached agent list on this console. * * @return agent list */ public List<AgentIdentity> getAllAttachedAgents() { final List<AgentIdentity> agentIdentities = newArrayList(); AllocateLowestNumber agentIdentity = (AllocateLowestNumber) checkNotNull( ReflectionUtils.getFieldValue( getConsoleFoundation().getComponent(ProcessControl.class), "m_agentNumberMap"), "m_agentNumberMap on ProcessControlImplementation is not available in this grinder version"); agentIdentity.forEach(new AllocateLowestNumber.IteratorCallback() { public void objectAndNumber(Object object, int number) { agentIdentities.add((AgentIdentity) object); } }); return agentIdentities; }
private AgentAndWorkers getAgentAndWorkers(AgentIdentity agentIdentity) { synchronized (m_agentIdentityToAgentAndWorkers) { final AgentAndWorkers existing = m_agentIdentityToAgentAndWorkers.get(agentIdentity); if (existing != null) { return existing; } final AgentAndWorkers created = new AgentAndWorkers(agentIdentity); m_agentIdentityToAgentAndWorkers.put(agentIdentity, created); m_agentNumberMap.add(agentIdentity); return created; } }
@Override public boolean shouldPurge() { final boolean purge = super.shouldPurge(); if (purge) { // Protected against race with add since the caller holds // m_agentIdentityToAgentAndWorkers, and we are about to be // removed from m_agentIdentityToAgentAndWorkers. m_agentNumberMap.remove(m_agentProcessReport.getAgentIdentity()); } return purge; } }
/** * {@inheritDoc} */ @Override public void startWorkerProcesses(final GrinderProperties properties) { m_agentNumberMap.forEach(new AllocateLowestNumber.IteratorCallback() { @Override public void objectAndNumber(final Object object, final int number) { m_consoleCommunication.sendToAddressedAgents( new AgentAddress((AgentIdentity)object), new StartGrinderMessage(properties, number)); } }); }