X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FControllerContext.java;h=671bd6da8a1dbbb8a6d51cc33c2ac99d52f03101;hb=7b82869e73c5a9c8137521f1bf9b4e446d48440c;hp=ebf0fd896a4089220e0125fa66753ca229ec9576;hpb=c231099ee1cf768de3002e8a290befa172150b7a;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java index ebf0fd896a..671bd6da8a 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java @@ -17,6 +17,7 @@ import com.google.common.base.Strings; import com.google.common.collect.BiMap; import com.google.common.collect.FluentIterable; import com.google.common.collect.HashBiMap; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import java.io.UnsupportedEncodingException; @@ -25,13 +26,14 @@ import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicReference; import javax.ws.rs.core.Response.Status; @@ -90,7 +92,8 @@ public class ControllerContext implements SchemaContextListener { private final Map moduleNameToUri = uriToModuleName.inverse(); - private final Map qnameToRpc = new ConcurrentHashMap<>(); + private final AtomicReference> qnameToRpc = + new AtomicReference<>(Collections.emptyMap()); private volatile SchemaContext globalSchema; private volatile MountService mountService; @@ -852,20 +855,22 @@ public class ControllerContext implements SchemaContextListener { public RpcDefinition getRpcDefinition(final String name) { final QName validName = this.toQName(name); - return validName == null ? null : this.qnameToRpc.get(validName); + return validName == null ? null : this.qnameToRpc.get().get(validName); } @Override public void onGlobalContextUpdated(final SchemaContext context) { if (context != null) { - this.qnameToRpc.clear(); - this.setGlobalSchema(context); - Set _operations = context.getOperations(); - for (final RpcDefinition operation : _operations) { - { - this.qnameToRpc.put(operation.getQName(), operation); - } + final Collection defs = context.getOperations(); + final Map newMap = new HashMap<>(defs.size()); + + for (final RpcDefinition operation : defs) { + newMap.put(operation.getQName(), operation); } + + // FIXME: still not completely atomic + this.qnameToRpc.set(ImmutableMap.copyOf(newMap)); + this.setGlobalSchema(context); } }