Implemented the read side of the topology lock
Change-Id: I5ee9a8973f5700c357127b92a581f1f24af87dc1
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
index 45e4188..58c24ad 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
@@ -80,4 +80,17 @@
* @return the network device for the MAC address if found, otherwise null.
*/
public Device getDeviceByMac(MACAddress address);
+
+ /**
+ * Acquire a read lock on the entire topology. The topology will not
+ * change while readers have the lock. Must be released using
+ * {@link releaseLock()}. This method will block until a read lock is
+ * available.
+ */
+ public void acquireLock();
+
+ /**
+ * Release the read lock on the topology.
+ */
+ public void releaseLock();
}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
index 628ad7c..d690821 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -9,6 +9,9 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
import net.floodlightcontroller.util.MACAddress;
@@ -24,6 +27,11 @@
private ConcurrentMap<InetAddress, Set<Device>> addr2Device;
private ConcurrentMap<MACAddress, Device> mac2Device;
+
+ private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
+ private Lock readLock = readWriteLock.readLock();
+ // TODO use the write lock after refactor
+ private Lock writeLock = readWriteLock.writeLock();
public NetworkGraphImpl() {
// TODO: Does these object need to be stored in Concurrent Collection?
@@ -148,4 +156,14 @@
}
}
}
+
+ @Override
+ public void acquireLock() {
+ readLock.lock();
+ }
+
+ @Override
+ public void releaseLock() {
+ readLock.unlock();
+ }
}