Make sure to supply Kryo serializable set to constructor
Change-Id: Ida776fc3e7fbcacb604ae578865f2a280970101c
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
index ca6728f..1f0f62d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/GenericDiscreteResources.java
@@ -16,7 +16,6 @@
package org.onosproject.store.resource.impl;
import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.onosproject.net.resource.DiscreteResource;
@@ -41,7 +40,7 @@
}
private GenericDiscreteResources(Set<DiscreteResource> values) {
- this.values = ImmutableSet.copyOf(values);
+ this.values = values;
}
// for serializer
@@ -62,7 +61,8 @@
@Override
public DiscreteResources difference(DiscreteResources other) {
if (other instanceof GenericDiscreteResources) {
- return of(Sets.difference(this.values(), other.values()));
+ // make sure that the set is serializable
+ return of(new LinkedHashSet<>(Sets.difference(this.values(), other.values())));
} else if (other instanceof EmptyDiscreteResources) {
return this;
}
@@ -84,7 +84,8 @@
@Override
public DiscreteResources add(DiscreteResources other) {
if (other instanceof GenericDiscreteResources) {
- return new GenericDiscreteResources(Sets.union(this.values(), other.values()));
+ // make sure that the set is serializable
+ return of(new LinkedHashSet<>(Sets.union(this.values(), other.values())));
} else if (other instanceof EmptyDiscreteResources) {
return this;
}
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/GenericDiscreteResourcesTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/GenericDiscreteResourcesTest.java
index 3683de3..4f82306 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/GenericDiscreteResourcesTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/GenericDiscreteResourcesTest.java
@@ -21,6 +21,7 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.resource.DiscreteResource;
import org.onosproject.net.resource.Resources;
+import org.onosproject.store.service.Serializer;
import java.util.Optional;
@@ -28,6 +29,8 @@
import static org.junit.Assert.assertThat;
public class GenericDiscreteResourcesTest {
+ private final Serializer serializer = ConsistentResourceStore.SERIALIZER;
+
@Test
public void testIfResourceIsFound() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
@@ -164,4 +167,28 @@
assertThat(sut.values(), is(ImmutableSet.of(res1, res2)));
}
+
+ @Test
+ public void testDifferenceSerializable() {
+ DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b")).resource();
+
+ DiscreteResources set1 = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources set2 = GenericDiscreteResources.of(ImmutableSet.of(res1));
+
+ DiscreteResources difference = set1.difference(set2);
+ assertThat(serializer.decode(serializer.encode(difference)), is(difference));
+ }
+
+ @Test
+ public void testAddSerializable() {
+ DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b")).resource();
+
+ DiscreteResources set1 = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources set2 = GenericDiscreteResources.of(ImmutableSet.of(res2));
+
+ DiscreteResources add = set1.add(set2);
+ assertThat(serializer.decode(serializer.encode(add)), is(add));
+ }
}