From 248378a24ced97cd70409dc4bbf8dab46d2a8bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Thu, 10 May 2012 13:39:23 +0200 Subject: Change DirectoryService. Use the network name as a key, and have only one network with the same name. --- .../orbekk/same/directory/DirectoryServiceImpl.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/directory/src/main/java/com/orbekk/same/directory/DirectoryServiceImpl.java b/directory/src/main/java/com/orbekk/same/directory/DirectoryServiceImpl.java index eee19f3..120ffb4 100644 --- a/directory/src/main/java/com/orbekk/same/directory/DirectoryServiceImpl.java +++ b/directory/src/main/java/com/orbekk/same/directory/DirectoryServiceImpl.java @@ -16,8 +16,10 @@ package com.orbekk.same.directory; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,25 +34,23 @@ import com.orbekk.same.Services.NetworkDirectory; public class DirectoryServiceImpl extends Services.Directory { private Logger logger = LoggerFactory.getLogger(getClass()); public final static long EXPIRE_TIME = 15 * 60l * 1000; // 15 minutes - List networkList = new ArrayList(); + Map networkMap = new HashMap(); synchronized void cleanNetworkList() { long expiredTime = System.currentTimeMillis() - EXPIRE_TIME; - for (Iterator it = networkList.iterator(); it.hasNext();) { - NetworkEntry e = it.next(); - if (e.hasExpired(expiredTime)) { - it.remove(); + for (NetworkEntry entry : networkMap.values()) { + if (entry.hasExpired(expiredTime)) { + networkMap.remove(entry.networkName); } } - logger.info("Cleaned network list. Networks: {}", networkList); + logger.info("Cleaned network list. Networks: {}", networkMap); } public void registerNetwork(String networkName, String masterUrl) { - cleanNetworkList(); NetworkEntry entry = new NetworkEntry(networkName, masterUrl); entry.register(System.currentTimeMillis()); - networkList.remove(entry); - networkList.add(entry); + networkMap.put(networkName, entry); + cleanNetworkList(); } @Override @@ -65,7 +65,7 @@ public class DirectoryServiceImpl extends Services.Directory { RpcCallback done) { cleanNetworkList(); NetworkDirectory.Builder directory = NetworkDirectory.newBuilder(); - for (NetworkEntry e : networkList) { + for (NetworkEntry e : networkMap.values()) { directory.addNetwork(MasterState.newBuilder() .setMasterLocation(e.masterUrl) .setNetworkName(e.networkName) -- cgit v1.2.3