diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index c20384b..0be8a37 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -173,23 +173,7 @@
         Map<DiscreteResourceId, List<Resource>> resourceMap = resources.stream()
                 .collect(Collectors.groupingBy(x -> x.parent().get().id(), LinkedHashMap::new, Collectors.toList()));
 
-        // even if one of the resources is allocated to a consumer,
-        // all unregistrations are regarded as failure
         for (Map.Entry<DiscreteResourceId, List<Resource>> entry : resourceMap.entrySet()) {
-            boolean allocated = entry.getValue().stream().anyMatch(x -> {
-                if (x instanceof DiscreteResource) {
-                    return discreteTxStore.isAllocated(((DiscreteResource) x).id());
-                } else if (x instanceof ContinuousResource) {
-                    return continuousTxStore.isAllocated(((ContinuousResource) x).id());
-                } else {
-                    return false;
-                }
-            });
-            if (allocated) {
-                log.warn("Failed to unregister {}: allocation exists", entry.getKey());
-                return abortTransaction(tx);
-            }
-
             if (!unregister(discreteTxStore, continuousTxStore, entry.getKey(), entry.getValue())) {
                 log.warn("Failed to unregister {}: Failed to remove {} values.",
                         entry.getKey(), entry.getValue().size());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
index c7a7d6e..c8c91c8 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalContinuousResourceStore.java
@@ -102,6 +102,14 @@
             return true;
         }
 
+        // even if one of the resources is allocated to a consumer,
+        // all unregistrations are regarded as failure
+        boolean allocated = values.stream().anyMatch(x -> isAllocated(x.id()));
+        if (allocated) {
+            log.warn("Failed to unregister {}: allocation exists", key);
+            return false;
+        }
+
         Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, new LinkedHashSet<>());
         if (oldValues == null) {
             log.trace("No-Op removing values. key {} did not exist", key);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
index 7aad6a6..796ea49 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/TransactionalDiscreteResourceStore.java
@@ -92,6 +92,14 @@
             return true;
         }
 
+        // even if one of the resources is allocated to a consumer,
+        // all unregistrations are regarded as failure
+        boolean allocated = values.stream().anyMatch(x -> isAllocated(x.id()));
+        if (allocated) {
+            log.warn("Failed to unregister {}: allocation exists", key);
+            return false;
+        }
+
         Set<DiscreteResource> oldValues = childMap.putIfAbsent(key, new LinkedHashSet<>());
         if (oldValues == null) {
             log.trace("No-Op removing values. key {} did not exist", key);
