Fix: Set default state as ADDED for newly added mapping by router

Change-Id: I34eda7f5b229efe273d4a4e61e72082f8f123a2c
This commit is contained in:
Jian Li 2017-04-25 19:12:53 +09:00
parent c56cded49f
commit a1f960b651
4 changed files with 16 additions and 9 deletions

View File

@ -80,7 +80,7 @@ public interface MappingStore extends Store<MappingEvent, MappingStoreDelegate>
* @param type store type * @param type store type
* @param mapping the mapping to add * @param mapping the mapping to add
*/ */
void storeMapping(Type type, Mapping mapping); void storeMapping(Type type, MappingEntry mapping);
/** /**
* Marks a mapping for deletion. Actual deletion will occur when the * Marks a mapping for deletion. Actual deletion will occur when the

View File

@ -191,7 +191,7 @@ public class DistributedMappingStore
} }
@Override @Override
public void storeMapping(Type type, Mapping mapping) { public void storeMapping(Type type, MappingEntry mapping) {
getStore(type).put(mapping.id(), mapping); getStore(type).put(mapping.id(), mapping);
} }

View File

@ -26,6 +26,7 @@ import org.apache.felix.scr.annotations.Service;
import org.onosproject.mapping.DefaultMappingEntry; import org.onosproject.mapping.DefaultMappingEntry;
import org.onosproject.mapping.Mapping; import org.onosproject.mapping.Mapping;
import org.onosproject.mapping.MappingEntry; import org.onosproject.mapping.MappingEntry;
import org.onosproject.mapping.MappingEntry.MappingEntryState;
import org.onosproject.mapping.MappingEvent; import org.onosproject.mapping.MappingEvent;
import org.onosproject.mapping.MappingId; import org.onosproject.mapping.MappingId;
import org.onosproject.mapping.MappingStore; import org.onosproject.mapping.MappingStore;
@ -213,14 +214,15 @@ public class SimpleMappingStore
} }
@Override @Override
public void storeMapping(Type type, Mapping mapping) { public void storeMapping(Type type, MappingEntry mapping) {
List<StoredMappingEntry> entries = List<StoredMappingEntry> entries =
getMappingEntriesInternal(type, mapping.deviceId(), mapping.id()); getMappingEntriesInternal(type, mapping.deviceId(), mapping.id());
synchronized (entries) { synchronized (entries) {
if (!entries.contains(mapping)) { if (!entries.contains(mapping)) {
StoredMappingEntry entry = new DefaultMappingEntry(mapping); StoredMappingEntry entry =
new DefaultMappingEntry(mapping, mapping.state());
entries.add(entry); entries.add(entry);
} }
} }
@ -252,7 +254,7 @@ public class SimpleMappingStore
for (StoredMappingEntry stored : entries) { for (StoredMappingEntry stored : entries) {
if (stored.equals(entry)) { if (stored.equals(entry)) {
if (stored.state() == PENDING_ADD) { if (stored.state() == PENDING_ADD) {
stored.setState(MappingEntry.MappingEntryState.ADDED); stored.setState(MappingEntryState.ADDED);
return new MappingEvent(MAPPING_ADDED, entry); return new MappingEvent(MAPPING_ADDED, entry);
} }
return new MappingEvent(MAPPING_UPDATED, entry); return new MappingEvent(MAPPING_UPDATED, entry);

View File

@ -22,10 +22,12 @@ import org.junit.Test;
import org.onlab.packet.ChassisId; import org.onlab.packet.ChassisId;
import org.onlab.packet.IpPrefix; import org.onlab.packet.IpPrefix;
import org.onosproject.mapping.DefaultMapping; import org.onosproject.mapping.DefaultMapping;
import org.onosproject.mapping.DefaultMappingEntry;
import org.onosproject.mapping.DefaultMappingKey; import org.onosproject.mapping.DefaultMappingKey;
import org.onosproject.mapping.DefaultMappingTreatment; import org.onosproject.mapping.DefaultMappingTreatment;
import org.onosproject.mapping.DefaultMappingValue; import org.onosproject.mapping.DefaultMappingValue;
import org.onosproject.mapping.Mapping; import org.onosproject.mapping.Mapping;
import org.onosproject.mapping.MappingEntry;
import org.onosproject.mapping.MappingKey; import org.onosproject.mapping.MappingKey;
import org.onosproject.mapping.MappingTreatment; import org.onosproject.mapping.MappingTreatment;
import org.onosproject.mapping.MappingValue; import org.onosproject.mapping.MappingValue;
@ -59,8 +61,8 @@ public class DistributedMappingStoreTest {
private static final String IP_ADDRESS = "1.2.3.4/24"; private static final String IP_ADDRESS = "1.2.3.4/24";
private DistributedMappingStore mappingStore; private DistributedMappingStore mappingStore;
private Mapping mapping1; private MappingEntry mapping1;
private Mapping mapping2; private MappingEntry mapping2;
private Device device1; private Device device1;
private Device device2; private Device device2;
@ -103,20 +105,23 @@ public class DistributedMappingStoreTest {
"foo.inc", "0", "0", "0", null, "foo.inc", "0", "0", "0", null,
DefaultAnnotations.builder().build()); DefaultAnnotations.builder().build());
mapping1 = DefaultMapping.builder() Mapping originalMapping1 = DefaultMapping.builder()
.forDevice(DEVICE_ID_1) .forDevice(DEVICE_ID_1)
.withId(1000L) .withId(1000L)
.withKey(key) .withKey(key)
.withValue(value) .withValue(value)
.build(); .build();
mapping2 = DefaultMapping.builder() Mapping originalMapping2 = DefaultMapping.builder()
.forDevice(DEVICE_ID_2) .forDevice(DEVICE_ID_2)
.withId(2000L) .withId(2000L)
.withKey(key) .withKey(key)
.withValue(value) .withValue(value)
.build(); .build();
mapping1 = new DefaultMappingEntry(originalMapping1);
mapping2 = new DefaultMappingEntry(originalMapping2);
mappingStore.activate(); mappingStore.activate();
} }