Skip to content

Commit

Permalink
Fixed ConcurrentException in enlinkd
Browse files Browse the repository at this point in the history
Checked various concurrent exception
  • Loading branch information
rssntn67 committed Jul 21, 2017
1 parent 7d34db2 commit a6ae466
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
Expand Up @@ -34,6 +34,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import org.opennms.netmgt.dao.api.BridgeBridgeLinkDao;
import org.opennms.netmgt.dao.api.BridgeMacLinkDao;
Expand All @@ -49,7 +50,7 @@

public class BridgeTopologyDaoInMemory implements BridgeTopologyDao {

volatile Set<BroadcastDomain> m_domains = new HashSet<BroadcastDomain>();
volatile Set<BroadcastDomain> m_domains = new CopyOnWriteArraySet<BroadcastDomain>();
private final static Logger LOG = LoggerFactory.getLogger(BridgeTopologyDaoInMemory.class);

@Override
Expand Down
Expand Up @@ -615,7 +615,9 @@ public void store(int nodeId, List<BridgeMacLink> bft) {
link.setNode(node);
effectiveBFT.put(new BridgeMacLinkHash(link), link);
}
m_nodetoBroadcastDomainMap.put(nodeId, new ArrayList<BridgeMacLink>(effectiveBFT.values()));
synchronized (m_nodetoBroadcastDomainMap) {
m_nodetoBroadcastDomainMap.put(nodeId, new ArrayList<BridgeMacLink>(effectiveBFT.values()));
}
}

public synchronized Map<Integer,List<BridgeMacLink>> getUpdateBftMap() {
Expand Down Expand Up @@ -652,13 +654,18 @@ public BroadcastDomain getBroadcastDomain(int nodeId) {
}

@Override
public synchronized boolean hasUpdatedBft(int nodeid) {
return m_nodetoBroadcastDomainMap.containsKey(nodeid);
public boolean hasUpdatedBft(int nodeid) {
synchronized (m_nodetoBroadcastDomainMap) {
return m_nodetoBroadcastDomainMap.containsKey(nodeid);
}

}

@Override
public synchronized List<BridgeMacLink> useBridgeTopologyUpdateBFT(int nodeid) {
return m_nodetoBroadcastDomainMap.remove(nodeid);
public List<BridgeMacLink> useBridgeTopologyUpdateBFT(int nodeid) {
synchronized (m_nodetoBroadcastDomainMap) {
return m_nodetoBroadcastDomainMap.remove(nodeid);
}
}

@Override
Expand Down
Expand Up @@ -691,6 +691,7 @@ public void run() {
m_notYetParsedBFTMap.put(m_domain.getBridge(nodeid), bft);
}

Set<Integer> nodetoberemovedondomain= new HashSet<Integer>();
synchronized (nodeBftMap) {
for (Integer nodeid: nodeBftMap.keySet()) {
if (nodeswithupdatedbftonbroadcastdomain.contains(nodeid))
Expand All @@ -699,10 +700,13 @@ public void run() {
getNodeId(),
nodeid,
m_domain.getBridgeNodesOnDomain());
m_domain.clearTopologyForBridge(nodeid);
m_domain.removeBridge(nodeid);
nodetoberemovedondomain.add(nodeid);
}
}
for (Integer nodeid: nodetoberemovedondomain) {
m_domain.clearTopologyForBridge(nodeid);
m_domain.removeBridge(nodeid);
}
m_linkd.getQueryManager().cleanBroadcastDomains();

m_domain.setBridgeElements(m_linkd.getQueryManager().getBridgeElements(m_domain.getBridgeNodesOnDomain()));
Expand Down

0 comments on commit a6ae466

Please sign in to comment.