/*
- * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
+ * Copyright (c) 2015, 2017 Cisco Systems, Inc. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
import com.google.common.util.concurrent.Futures;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.Future;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.lispflowmapping.implementation.util.DSBEInputUtil;
import org.opendaylight.lispflowmapping.implementation.util.RPCInputConvertorUtil;
import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
+import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber;
import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService;
import org.opendaylight.lispflowmapping.lisp.type.MappingData;
import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
*
*/
public class MappingService implements OdlMappingserviceService, IMappingService, AutoCloseable {
- protected static final Logger LOG = LoggerFactory.getLogger(MappingService.class);
+ private static final Logger LOG = LoggerFactory.getLogger(MappingService.class);
private static final String NOT_FOUND_TAG = "data-missing";
private static final String DATA_EXISTS_TAG = "data-exists";
private final DataBroker dataBroker;
private final NotificationPublishService notificationPublishService;
- private boolean overwritePolicy = ConfigIni.getInstance().mappingOverwriteIsSet();
+ private boolean mappingMergePolicy = ConfigIni.getInstance().mappingMergeIsSet();
private boolean notificationPolicy = ConfigIni.getInstance().smrIsSet();
private boolean iterateMask = true;
private boolean isMaster = false;
@Override
- public void setMappingOverwrite(boolean overwrite) {
- this.overwritePolicy = overwrite;
+ public void setMappingMerge(boolean mergeMapping) {
+ this.mappingMergePolicy = mergeMapping;
if (mappingSystem != null) {
- mappingSystem.setOverwritePolicy(overwrite);
- ConfigIni.getInstance().setMappingOverwrite(overwrite);
+ mappingSystem.setMappingMerge(mergeMapping);
+ ConfigIni.getInstance().setMappingMerge(mappingMergePolicy);
}
}
LOG.info("Mapping Service initializing...");
dsbe = new DataStoreBackEnd(dataBroker);
- mappingSystem = new MappingSystem(dao, iterateMask, notificationPolicy, overwritePolicy);
+ mappingSystem = new MappingSystem(dao, iterateMask, notificationPublishService, mappingMergePolicy);
mappingSystem.setDataStoreBackEnd(dsbe);
mappingSystem.initialize();
}
}
+ @Override
+ public MappingData addNegativeMapping(Eid key) {
+ return mappingSystem.addNegativeMapping(key);
+ }
+
@Override
public void refreshMappingRegistration(Eid key, XtrId xtrId, Long timestamp) {
mappingSystem.refreshMappingRegistration(key, xtrId, timestamp);
return mappingSystem.getMapping(srcKey, dstKey);
}
+ @Override
+ public void subscribe(Subscriber subscriber, Eid subscribedEid) {
+ mappingSystem.subscribe(subscriber, subscribedEid);
+ }
+
+ @Override
+ public Set<Subscriber> getSubscribers(Eid eid) {
+ return mappingSystem.getSubscribers(eid);
+ }
+
@Override
public Future<RpcResult<GetMappingWithXtrIdOutput>> getMappingWithXtrId(GetMappingWithXtrIdInput input) {
Preconditions.checkNotNull(input, "get-mapping RPC input must be not null!");
@Override
public void removeMapping(MappingOrigin origin, Eid key) {
+ if (origin.equals(MappingOrigin.Southbound)) {
+ mappingSystem.removeMapping(origin, key);
+ }
dsbe.removeMapping(DSBEInputUtil.toMapping(origin, key));
}
return null;
}
+ @Override
+ public Future<RpcResult<Void>> removeAllOperationalContent() {
+ RpcResultBuilder<Void> rpcResultBuilder;
+
+ /*
+ * Since master nodes ignore datastore changes for southbound originated mappings, they need to be removed
+ * explicitly.
+ */
+ if (isMaster) {
+ mappingSystem.cleanSBMappings();
+ }
+ dsbe.removeAllOperationalDatastoreContent();
+
+ rpcResultBuilder = RpcResultBuilder.success();
+
+ return Futures.immediateFuture(rpcResultBuilder.build());
+ }
+
@Override
public Eid getWidestNegativePrefix(Eid key) {
return mappingSystem.getWidestNegativePrefix(key);
}
+ @Override
+ public Set<Eid> getSubtree(MappingOrigin origin, Eid key) {
+ return mappingSystem.getSubtree(origin, key);
+ }
+
@Override
public void addAuthenticationKey(Eid key, MappingAuthkey authKey) {
dsbe.addAuthenticationKey(DSBEInputUtil.toAuthenticationKey(key, authKey));
mappingSystem.removeData(origin, key, subKey);
}
+ @Override
+ public Eid getParentPrefix(Eid key) {
+ return mappingSystem.getParentPrefix(key);
+ }
+
@Override
public String printMappings() {
return mappingSystem.printMappings();
}
+ @Override
+ public String prettyPrintMappings() {
+ return mappingSystem.prettyPrintMappings();
+ }
+
+ @Override
+ public String printKeys() {
+ return mappingSystem.printKeys();
+ }
+
+ @Override
+ public String prettyPrintKeys() {
+ return mappingSystem.prettyPrintKeys();
+ }
+
@Override
public void close() throws Exception {
LOG.info("Mapping Service is being destroyed!");