From: Jan Hajnar Date: Wed, 12 Nov 2014 09:21:03 +0000 (+0100) Subject: Bug 2157 - Race condition when adding a RPC implementation with an X-Git-Tag: release/lithium~427^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=8f70f752049bf21def29d83e6113df7f4c193ed6;p=yangtools.git Bug 2157 - Race condition when adding a RPC implementation with an output * added wait for schema in 'getRpcQnamesFor()' method Change-Id: I2baa71f4237a1125db9a6e5ec8077237dc8ef544 Signed-off-by: Jan Hajnar --- diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/RuntimeGeneratedMappingServiceImpl.java b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/RuntimeGeneratedMappingServiceImpl.java index 29a532228d..c0fef76f26 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/RuntimeGeneratedMappingServiceImpl.java +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/RuntimeGeneratedMappingServiceImpl.java @@ -13,26 +13,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; - -import java.net.URI; -import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.ExecutionException; - import javassist.ClassPool; - -import javax.annotation.concurrent.GuardedBy; - import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil; import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl; import org.opendaylight.yangtools.binding.generator.util.Types; @@ -75,6 +56,22 @@ import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.concurrent.GuardedBy; +import java.net.URI; +import java.util.AbstractMap.SimpleEntry; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; + public class RuntimeGeneratedMappingServiceImpl implements BindingIndependentMappingService, SchemaContextListener, SchemaLock, AutoCloseable, SchemaContextHolder, TypeResolver { @@ -159,6 +156,7 @@ SchemaLock, AutoCloseable, SchemaContextHolder, TypeResolver { Type serviceClass = new ReferencedTypeImpl(namespace, BindingMapping.getClassName(module.getName()) + "Service"); serviceTypeToRpc.put(serviceClass, rpcs); + updatePromisedSchemas(serviceClass); } Map typedefs = context.getTypedefs(); @@ -337,8 +335,10 @@ SchemaLock, AutoCloseable, SchemaContextHolder, TypeResolver { Set serviceRef = serviceTypeToRpc.get(new ReferencedTypeImpl(service.getPackage().getName(), service .getSimpleName())); if (serviceRef == null) { - serviceRef = Collections.emptySet(); - } + waitForSchema(service); + serviceRef = serviceTypeToRpc.get(new ReferencedTypeImpl(service.getPackage().getName(), service + .getSimpleName())); + } return serviceRef; }