You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2016/06/09 14:09:29 UTC

svn commit: r1747553 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws: ./ server/ server/nodeviz/

Author: degenaro
Date: Thu Jun  9 14:09:29 2016
New Revision: 1747553

URL: http://svn.apache.org/viewvc?rev=1747553&view=rev
Log:
UIMA-3361 DUCC Web Server (WS) Machines page improvements

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/nodeviz/NodeViz.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java Thu Jun  9 14:09:29 2016
@@ -19,6 +19,7 @@
 package org.apache.uima.ducc.ws;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -89,17 +90,18 @@ public class DuccMachinesData {
 		return isSwapping.containsKey(ip);
 	}
 	
-	public ConcurrentSkipListMap<MachineInfo,NodeId> getMachines() {
+	public Map<MachineInfo,NodeId> getMachines() {
 		return getSortedMachines();
 	}
 	
-	public ConcurrentSkipListMap<MachineInfo,NodeId> getSortedMachines() {
-		ConcurrentSkipListMap<MachineInfo,NodeId> retVal = sortedMachines;
+	public Map<MachineInfo,NodeId> getSortedMachines() {
+		Map<MachineInfo,NodeId> retVal = new TreeMap<MachineInfo,NodeId>();
+		retVal.putAll(sortedMachines);
 		return retVal;
 	}
 	
 	private long down_fudge = 10;
-	private long DOWN_AFTER_SECONDS = WebServerComponent.updateIntervalSeconds + down_fudge;
+	private long DOWN_AFTER_SECONDS = WebServerComponent.updateIntervalSecondsNormal + down_fudge;
 	private long SECONDS_PER_MILLI = 1000;
 	
 	private long getAgentMillisMIA() {
@@ -339,8 +341,7 @@ public class DuccMachinesData {
 	 * 
 	 * Put new or updated node metrics into map of Agent node metric reports
 	 */
-	public boolean put(DatedNodeMetricsUpdateDuccEvent duccEvent) {
-		boolean retVal = true;
+	public void put(DatedNodeMetricsUpdateDuccEvent duccEvent) {
 		String location = "put";
 		MachineSummaryInfo msi = new MachineSummaryInfo();
 		NodeMetricsUpdateDuccEvent nodeMetrics = duccEvent.getNodeMetricsUpdateDuccEvent();
@@ -352,10 +353,6 @@ public class DuccMachinesData {
 		}
 		String machineName = nodeMetrics.getNodeIdentity().getName().trim();
 		NodeId nodeId = new NodeId(machineName);
-		// determine if this is new machine (true) or already known machine (false)
-		if(ipToNameMap.containsKey(ip)) {
-			retVal = false;
-		}
 		ipToNameMap.put(ip,nodeId);
 		nameToIpMap.put(nodeId,ip);
 		// mem: total
@@ -370,7 +367,7 @@ public class DuccMachinesData {
 		long lvalMemFree = (long) ((1.0*nodeMemFree)/(1024*1024)+0.0);  // do NOT round up!
 		msi.memFree = lvalMemFree;
 		String memFree = ""+lvalMemFree/*+memUnits*/;
-		// swap: in-usewell
+		// swap: in-use
 		double dvalSwapTotal = nodeMetrics.getNodeMemory().getSwapTotal();
 		long lvalSwapTotal = (long) (dvalSwapTotal/(1024*1024)+0.5);
 		double dvalSwapFree = nodeMetrics.getNodeMemory().getSwapFree();
@@ -425,7 +422,6 @@ public class DuccMachinesData {
 		putMachine(current);
 		updateTotals(nodeId,msi);
 		setPublished();
-		return retVal;
 	}
 	
 	public List<String> getPids(Ip ip, UserId user) {
@@ -594,7 +590,7 @@ public class DuccMachinesData {
 	private void updateMachineFactsListAgent() {
 		MachineFactsList factsList = new MachineFactsList();
 		long quantum = getQuantum();
-		ConcurrentSkipListMap<MachineInfo,NodeId> sortedMachines = getSortedMachines();
+		Map<MachineInfo,NodeId> sortedMachines = getSortedMachines();
 		Iterator<MachineInfo> iterator;
 		iterator = sortedMachines.keySet().iterator();
 		while(iterator.hasNext()) {
@@ -632,16 +628,18 @@ public class DuccMachinesData {
 		// The returnable
 		MachineFactsList mfl = new MachineFactsList();
 		// Working map used to generate the returnable
-		ConcurrentSkipListMap<MachineInfo,NodeId> dbSortedMachines = new ConcurrentSkipListMap<MachineInfo,NodeId>();
+		Map<MachineInfo,NodeId> dbSortedMachines = new TreeMap<MachineInfo,NodeId>();
 		// Get map from DB courtesy of RM
 		DbQuery dbQuery = DbQuery.getInstance();
-		Map<String, IDbMachine> dbMapMachines = dbQuery.getMapMachines();
+		// Working list of known machines, by long name
+		Map<String, IDbMachine> dbMapMachinesLong = dbQuery.getMapMachines();
 		// Working list of known machines, by short name
-		List<String> knownShortNames = new ArrayList<String>();
-		// Update working map and list of short name from DB
-		for(Entry<String, IDbMachine> entry : dbMapMachines.entrySet()) {
+		Map<String, IDbMachine> dbMapMachinesShort = new HashMap<String, IDbMachine>();
+		// Update working map and map of short names
+		for(Entry<String, IDbMachine> entry : dbMapMachinesLong.entrySet()) {
 			String name = entry.getKey();
 			NodeId nodeId = new NodeId(name);
+			dbMapMachinesShort.put(nodeId.getShortName(),entry.getValue());
 			MachineInfo mi = unsortedMachines.get(nodeId);
 			IDbMachine dbMachine = entry.getValue();
 			if(mi != null) {
@@ -651,19 +649,27 @@ public class DuccMachinesData {
 				mi.setMemTotal(""+total);
 				mi.setMemFree(""+free);
 				dbSortedMachines.put(mi, nodeId);
-				String shortName = nodeId.getShortName();
-				knownShortNames.add(shortName);
 			}
 		}
 		// Initialize returnable with "defined" machines
 		ArrayList<String> duccNodes = DuccNodes.getInstance().get();
+		Map<String,String> sortedDuccNodes = new TreeMap<String,String>();
 		for(String name : duccNodes) {
-			NodeId nodeId = new NodeId(name);;
-			String shortName = nodeId.getShortName();
-			// skip defined machine if it already appears in DB
-			if(knownShortNames.contains(shortName)) {
+			NodeId nodeId = new NodeId(name);
+			sortedDuccNodes.put(nodeId.getShortName(),nodeId.getLongName());
+		}
+		// Process defined nodes, unless already present from DB
+		for(Entry<String, String> entry : sortedDuccNodes.entrySet()) {
+			String shortName = entry.getKey();
+			String longName = entry.getValue();
+			// Skip defined machine if it already appears in DB
+			if(dbMapMachinesShort.containsKey(shortName)) {
 				continue;
 			}
+			if(dbMapMachinesLong.containsKey(longName)) {
+				continue;
+			}
+			// Add defined machine
 			String status = "defined";
 			String statusReason = "";
 			String ip = "";
@@ -676,7 +682,7 @@ public class DuccMachinesData {
 			boolean cGroups = false;
 			List<String> aliens = new ArrayList<String>();
 			String heartbeat = "";
-			MachineFacts facts = new MachineFacts(status,statusReason,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
+			MachineFacts facts = new MachineFacts(status,statusReason,ip,longName,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
 			mfl.add(facts);
 		}
 		// Augment returnable with data from Agents & RM (from DB)

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java Thu Jun  9 14:09:29 2016
@@ -416,148 +416,106 @@ public class MachineInfo implements Comp
 		String retVal = getElapsed();
 		return retVal;
 	}	
+
+	// @return true if the short names match
+	
+	@Override
+	public boolean equals(Object object) {
+		boolean retVal = false;
+		if(object != null) {
+			if(object instanceof NodeId) {
+				MachineInfo that = (MachineInfo) object;
+				retVal = (this.hashCode() == that.hashCode());
+			}
+		}
+		return retVal;
+	}
+		
+	// @return use short name as hashCode
 	
+	@Override
+	public int hashCode()
+	{
+		return this.nodeid.getShortName().hashCode();
+	}
 	
-	public int compareTo(MachineInfo machine) {
+	private int compareString(String s1, String s2) {
 		int retVal = 0;
-		MachineInfo m1 = this;
-		MachineInfo m2 = machine;
-		String s1 = m1.name;
-		String s2 = m2.name;
 		if(s1 != null) {
 			if(s2 != null) {
-				if(s1.trim().equals(s2.trim()))
-					return retVal;
+				retVal = s1.compareTo(s2);
 			}
 		}
-		retVal = compareStatus(m1, m2);
-		if(retVal != 0) {
-			return retVal;
-		}
-		retVal = compareSwapInuse(m1, m2);
-		if(retVal != 0) {
-			return retVal;
-		}
-		retVal = compareSwapDelta(m1, m2);
-		if(retVal != 0) {
-			return retVal;
-		}
-		retVal = compareAlienPids(m1, m2);
-		if(retVal != 0) {
-			return retVal;
-		}
-		/*
-		retVal = compareHeartbeat(m1, m2);
-		if(retVal != 0) {
-			return retVal;
-		}
-		*/
-		retVal = compareIp(m1, m2);
-		if(retVal != 0) {
-			return retVal;
+		return retVal;
+	}
+	
+	private int compareToMachineName(MachineInfo that) {
+		int retVal = 0;
+		if(this.nodeid != null) {
+			if(that.nodeid != null) {
+				retVal = compareString(this.nodeid.getShortName(), that.nodeid.getShortName());
+			}
 		}
-		retVal = compareName(m1, m2);
 		return retVal;
 	}
 	
-	/**
-	 * @param m1
-	 * @param m2
-	 * @return 0 if m1 == m2, -1 if m1 < m2, +1 if m1 > m2, where
-	 *           Defined < Down < Up
-	 */
-	private int compareStatus(MachineInfo m1, MachineInfo m2) {
-		String location = "compareStatus";
+	private int compareToMachineStatus(MachineInfo that) {
 		int retVal = 0;
-		try {
-			MachineStatus v1 = m1.getMachineStatus();
-			MachineStatus v2 = m2.getMachineStatus();
-			switch(v1) {
+		MachineStatus v1 = this.getMachineStatus();
+		MachineStatus v2 = that.getMachineStatus();
+		switch(v1) {
+		default:
+		case Defined:
+			switch(v2) {
 			default:
 			case Defined:
-				switch(v2) {
-				default:
-				case Defined:
-					retVal = 0;
-					break;
-				case Down:
-					retVal = -1;
-					break;
-				case Up:
-					retVal = -1;
-					break;
-				}
+				retVal = 0;
 				break;
 			case Down:
-				switch(v2) {
-				default:
-				case Defined:
-					retVal = 1;
-					break;
-				case Down:
-					retVal = 0;
-					break;
-				case Up:
-					retVal = -1;
-					break;
-				}
+				retVal = -1;
 				break;
 			case Up:
-				switch(v2) {
-				default:
-					retVal = 1;
-				case Defined:
-					break;
-				case Down:
-					retVal = 1;
-					break;
-				case Up:
-					retVal = 0;
-					break;
-				}
-				break;
-			}
-			StringBuffer sb = new StringBuffer();
-			sb.append(m1.getName());
-			sb.append(" ");
-			sb.append(m1.getMachineStatus().getLowerCaseName());
-			sb.append(" ");
-			sb.append(m2.getName());
-			sb.append(" ");
-			sb.append(m2.getMachineStatus().getLowerCaseName());
-			sb.append(" ");
-			sb.append(" "+retVal);
-			logger.trace(location, jobid, sb);
-		}
-		
-		catch(Throwable t) {
-			logger.error(location, jobid, t);
-		}
-		return retVal;
-	}
-	
-	private int compareSwapInuse(MachineInfo m1, MachineInfo m2) {
-		int retVal = 0;
-		try {
-			long v1 = Long.parseLong(m1.getSwapInuse());
-			long v2 = Long.parseLong(m2.getSwapInuse());
-			if(v1 > v2) {
-				return -1;
+				retVal = -1;
+				break;
 			}
-			if(v1 < v2) {
-				return 1;
+			break;
+		case Down:
+			switch(v2) {
+			default:
+			case Defined:
+				retVal = 1;
+				break;
+			case Down:
+				retVal = 0;
+				break;
+			case Up:
+				retVal = -1;
+				break;
 			}
-		}
-		catch(Throwable t) {
+			break;
+		case Up:
+			switch(v2) {
+			default:
+				retVal = 1;
+			case Defined:
+				break;
+			case Down:
+				retVal = 1;
+				break;
+			case Up:
+				retVal = 0;
+				break;
+			}
+			break;
 		}
 		return retVal;
 	}
 	
-	private int compareSwapDelta(MachineInfo m1, MachineInfo m2) {
+	private int compareToMachineSwapInuse(MachineInfo that) {
 		int retVal = 0;
 		try {
-			long v1 = m1.getSwapDelta();
-			long v2 = m2.getSwapDelta();
+			long v1 = Long.parseLong(this.getSwapInuse());
+			long v2 = Long.parseLong(that.getSwapInuse());
 			if(v1 > v2) {
 				return -1;
 			}
@@ -570,11 +528,11 @@ public class MachineInfo implements Comp
 		return retVal;
 	}
 	
-	private int compareAlienPids(MachineInfo m1, MachineInfo m2) {
+	private int compareToMachineAlienPIDs(MachineInfo that) {
 		int retVal = 0;
 		try {
-			long v1 = m1.getAlienPidsCount();
-			long v2 = m2.getAlienPidsCount();
+			long v1 = this.getAlienPidsCount();
+			long v2 = that.getAlienPidsCount();
 			if(v1 > v2) {
 				return -1;
 			}
@@ -587,58 +545,27 @@ public class MachineInfo implements Comp
 		return retVal;
 	}
 	
-/*	
-	private int compareHeartbeat(MachineInfo m1, MachineInfo m2) {
+	/**
+	 * Sort order: status, swap-inuse, alien-PIDs, machine short name
+	 */
+	@Override
+	public int compareTo(MachineInfo that) {
 		int retVal = 0;
-		try {
-			long v1 = m1.getHeartbeat();
-			long v2 = m2.getHeartbeat();
-			if(v1 > v2) {
-				return 1;
+		if(that != null) {
+			if(retVal == 0) {
+				retVal = compareToMachineStatus(that);
 			}
-			if(v1 < v2) {
-				return -1;
+			if(retVal == 0) {
+				retVal = compareToMachineSwapInuse(that);
 			}
-		}
-		catch(Throwable t) {
-		}
-		return retVal;
-	}
-*/
-	private int compareIp(MachineInfo m1, MachineInfo m2) {
-		int retVal = 0;
-		if(m1.ip.trim().length() > 0) {
-			if(m2.ip.trim().length() > 0) {
-				retVal = m1.ip.compareTo(m2.ip);
+			if(retVal == 0) {
+				retVal = compareToMachineAlienPIDs(that);
 			}
-		}
-		return retVal;
-	}
-	
-	private int compareName(MachineInfo m1, MachineInfo m2) {
-		return m1.name.compareTo(m2.name);
-	}
-	
-	// @return true if the long names match
-	
-	@Override
-	public boolean equals(Object object) {
-		boolean retVal = false;
-		if(object != null) {
-			if(object instanceof NodeId) {
-				MachineInfo that = (MachineInfo) object;
-				return (this.compareTo(that) == 0);
+			if(retVal == 0) {
+				retVal = compareToMachineName(that);
 			}
 		}
 		return retVal;
 	}
-		
-	// @return use long name as hashCode
-	
-	@Override
-	public int hashCode()
-	{
-		return this.nodeid.hashCode();
-	}
 
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java Thu Jun  9 14:09:29 2016
@@ -62,13 +62,24 @@ implements IWebServer {
 	private static AtomicInteger reservationCount = new AtomicInteger(0);
 	
 	private static AtomicLong updateLast = new AtomicLong(System.currentTimeMillis());
-	public static long updateIntervalSeconds = 60;
-	public static long updateIntervalMilliSeconds = updateIntervalSeconds*1000;
+	public static long updateIntervalSecondsInitial = 5;
+	public static long updateIntervalSecondsNormal = 60;
+	public static AtomicLong updateIntervalCount = new AtomicLong(0);
+	public static long updateIntervalLimit = 12;
 	
 	public WebServerComponent(CamelContext context, CommonConfiguration common) {
 		super("WebServer",context);
 		String methodName = "WebServerComponent";
 		duccLogger.info(methodName, jobid, "##### boot #####");
+		
+		String cp = System.getProperty("java.class.path");
+		String[] cpArray = cp.split(":");
+		int lc = 0;
+		for(String line : cpArray) {
+			duccLogger.trace(methodName, jobid, "cp."+lc+" "+line);
+			lc++;
+		}
+		
 		String[] propertyNames = { "ducc.broker.url" };
 		for(String property : propertyNames) {
 			duccLogger.info(methodName, jobid, property+"="+System.getProperty(property));
@@ -158,17 +169,34 @@ implements IWebServer {
 	
 	/**
 	 * Sort machines if interval has elapsed (60 seconds) 
-	 * or if a new machine has been detected (force == true)
+	 * 
+	 * Note: Use an initial short interval (e.g. every 5 seconds)
+	 * when the Web Server first boots in order to populate quickly.
+	 * After N (e.g. 12) quick recalculations, revert to the normal
+	 * interval (e.g. every 60 seconds).
 	 */
-	private void sortMachines(boolean force) {
+	private void sortMachines() {
+		String methodName = "sortMachines";
 		long last = updateLast.get();
+		long updateIntervalMilliSeconds = updateIntervalSecondsNormal * 1000;
+		if(updateIntervalCount.get() < updateIntervalLimit) {
+			updateIntervalMilliSeconds = updateIntervalSecondsInitial * 1000;
+		}
 		long deadline = last + updateIntervalMilliSeconds;
 		long now = System.currentTimeMillis();
-		if(now > deadline || force) {
+		if(now > deadline) {
 			boolean success = updateLast.compareAndSet(last, now);
 			if(success) {
 				DuccMachinesData.getInstance().updateSortedMachines();
+				updateIntervalCount.incrementAndGet();
+				duccLogger.trace(methodName, jobid, "count: "+updateIntervalCount.get());
 			}
+			else {
+				duccLogger.trace(methodName, jobid, "missed: "+"last="+last+" "+"now="+now);
+			}
+		}
+		else {
+			duccLogger.trace(methodName, jobid, "togo: "+(deadline - now)/1000);
 		}
 	}
 	
@@ -178,8 +206,8 @@ implements IWebServer {
 		duccLogger.trace(methodName, jobid, duccMsg.fetchLabel("received")+"NodeMetricsUpdateDuccEvent");
 		DuccMachinesData dmd = DuccMachinesData.getInstance();
 		DatedNodeMetricsUpdateDuccEvent datedEvent = new DatedNodeMetricsUpdateDuccEvent(duccEvent);
-		boolean force = dmd.put(datedEvent);
-		sortMachines(force);
+		dmd.put(datedEvent);
+		sortMachines();
 		duccLogger.trace(methodName, jobid, duccMsg.fetch("exit"));
 	}
 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java Thu Jun  9 14:09:29 2016
@@ -3098,7 +3098,7 @@ public class DuccHandler extends DuccAbs
 		sb.append("{ ");
 		sb.append("\"aaData\": [ ");
 		DuccMachinesData instance = DuccMachinesData.getInstance();
-		ConcurrentSkipListMap<MachineInfo,NodeId> sortedMachines = instance.getSortedMachines();
+		Map<MachineInfo,NodeId> sortedMachines = instance.getSortedMachines();
 		Iterator<MachineInfo> iterator;
 		// pass 1
 		iterator = sortedMachines.keySet().iterator();
@@ -3512,7 +3512,7 @@ public class DuccHandler extends DuccAbs
 		String cookie = DuccCookies.getCookie(request,DuccCookies.cookieAgents);
 		if(cookie.equals(DuccCookies.valueAgentsShow)) {
 			duccLogger.trace(methodName, jobid, "== show: "+cookie);
-			ConcurrentSkipListMap<MachineInfo,NodeId> machines = DuccMachinesData.getInstance().getMachines();
+			Map<MachineInfo,NodeId> machines = DuccMachinesData.getInstance().getMachines();
 			Iterator<MachineInfo> iterator = machines.keySet().iterator();
 			while(iterator.hasNext()) {
 				MachineInfo machineInfo = iterator.next();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java Thu Jun  9 14:09:29 2016
@@ -1487,7 +1487,7 @@ public class DuccHandlerClassic extends
 		if(cookie.equals(DuccCookies.valueAgentsShow)) {
 			duccLogger.trace(methodName, jobid, "== show: "+cookie);
 			
-			ConcurrentSkipListMap<MachineInfo,NodeId> machines = duccMachinesData.getMachines();
+			Map<MachineInfo,NodeId> machines = duccMachinesData.getMachines();
 			Iterator<MachineInfo> iterator = machines.keySet().iterator();
 			while(iterator.hasNext()) {
 				MachineInfo machineInfo = iterator.next();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Thu Jun  9 14:09:29 2016
@@ -2018,7 +2018,7 @@ public class DuccHandlerJsonFormat exten
 		}
 
 		if(showAgents) {
-			ConcurrentSkipListMap<MachineInfo,NodeId> machines = duccMachinesData.getMachines();
+			Map<MachineInfo,NodeId> machines = duccMachinesData.getMachines();
 			Iterator<MachineInfo> iterator = machines.keySet().iterator();
 			while(iterator.hasNext()) {
 				row = new JsonArray();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/nodeviz/NodeViz.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/nodeviz/NodeViz.java?rev=1747553&r1=1747552&r2=1747553&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/nodeviz/NodeViz.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/nodeviz/NodeViz.java Thu Jun  9 14:09:29 2016
@@ -24,7 +24,6 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentSkipListMap;
 
 import org.apache.uima.ducc.common.Node;
 import org.apache.uima.ducc.common.NodeConfiguration;
@@ -273,7 +272,7 @@ public class NodeViz
         }
 
         logger.debug(methodName, null, "Generateing visualizaiton");
-        ConcurrentSkipListMap<MachineInfo,NodeId> m = machineData.getMachines();
+        Map<MachineInfo,NodeId> m = machineData.getMachines();
 
         for (Entry<MachineInfo, NodeId> entry : m.entrySet()) {
         	//