Sho SHIMIZU
Committed by Sho Shimizu

Preserve the original order when registering/unregistering

Change-Id: Id112f7027454132f00ca45b4254aa3f5c2e7b094
...@@ -53,6 +53,7 @@ import org.slf4j.LoggerFactory; ...@@ -53,6 +53,7 @@ import org.slf4j.LoggerFactory;
53 import java.util.Arrays; 53 import java.util.Arrays;
54 import java.util.Collection; 54 import java.util.Collection;
55 import java.util.Iterator; 55 import java.util.Iterator;
56 +import java.util.LinkedHashMap;
56 import java.util.LinkedHashSet; 57 import java.util.LinkedHashSet;
57 import java.util.List; 58 import java.util.List;
58 import java.util.Map; 59 import java.util.Map;
...@@ -162,9 +163,10 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour ...@@ -162,9 +163,10 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour
162 TransactionalMap<DiscreteResourceId, Set<Resource>> childTxMap = 163 TransactionalMap<DiscreteResourceId, Set<Resource>> childTxMap =
163 tx.getTransactionalMap(CHILD_MAP, SERIALIZER); 164 tx.getTransactionalMap(CHILD_MAP, SERIALIZER);
164 165
166 + // the order is preserved by LinkedHashMap
165 Map<DiscreteResource, List<Resource>> resourceMap = resources.stream() 167 Map<DiscreteResource, List<Resource>> resourceMap = resources.stream()
166 .filter(x -> x.parent().isPresent()) 168 .filter(x -> x.parent().isPresent())
167 - .collect(Collectors.groupingBy(x -> x.parent().get())); 169 + .collect(Collectors.groupingBy(x -> x.parent().get(), LinkedHashMap::new, Collectors.toList()));
168 170
169 for (Map.Entry<DiscreteResource, List<Resource>> entry: resourceMap.entrySet()) { 171 for (Map.Entry<DiscreteResource, List<Resource>> entry: resourceMap.entrySet()) {
170 if (!lookup(childTxMap, entry.getKey().id()).isPresent()) { 172 if (!lookup(childTxMap, entry.getKey().id()).isPresent()) {
...@@ -208,8 +210,9 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour ...@@ -208,8 +210,9 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour
208 .filter(Optional::isPresent) 210 .filter(Optional::isPresent)
209 .map(Optional::get) 211 .map(Optional::get)
210 .collect(Collectors.toList()); 212 .collect(Collectors.toList());
213 + // the order is preserved by LinkedHashMap
211 Map<DiscreteResourceId, List<Resource>> resourceMap = resources.stream() 214 Map<DiscreteResourceId, List<Resource>> resourceMap = resources.stream()
212 - .collect(Collectors.groupingBy(x -> x.parent().get().id())); 215 + .collect(Collectors.groupingBy(x -> x.parent().get().id(), LinkedHashMap::new, Collectors.toList()));
213 216
214 // even if one of the resources is allocated to a consumer, 217 // even if one of the resources is allocated to a consumer,
215 // all unregistrations are regarded as failure 218 // all unregistrations are regarded as failure
......