Merge "Add RPC to read per xtrId mappings for an EID."
authorVina Ermagan <vermagan@cisco.com>
Sat, 17 Sep 2016 00:49:31 +0000 (00:49 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Sat, 17 Sep 2016 00:49:31 +0000 (00:49 +0000)
1  2 
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/mapcache/IMappingSystem.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingService.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java

index a94182d1acbb57a6d18a1a7363728040945b1436,5b39e4d8343ef1f078093bf057d1462448f6b625..c280064b0b4e7bc2c788db999bf6504d2f12260c
@@@ -8,6 -8,7 +8,7 @@@
  
  package org.opendaylight.lispflowmapping.interfaces.mapcache;
  
+ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkey;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
@@@ -54,6 -55,19 +55,19 @@@ public interface IMappingSystem 
       */
      Object getMapping(Eid dst);
  
+     /**
+      * Retrieves mapping for the provided dst key for a particular xtr id.
+      * @param src
+      *            Source Key to be looked up.
+      * @param dst
+      *            Destination Key to be looked up.
+      * @param xtrId
+      *            Xtr Id for which this look to be done. If null, this method works like
+      *            regular getMapping(src, dst)
+      * @return Returns the object found in the simple map cache or null if nothing is found.
+      */
+     Object getMapping(Eid src, Eid dst, XtrId xtrId);
      /**
       * Retrieves mapping from table for provided key.
       *
       * @return String consisting of all mappings
       */
      String printMappings();
 +
 +    /**
 +     * Set cluster master status.
 +     *
 +     * @param isMaster
 +     *            is|isn't master
 +     */
 +    void setIsMaster(final boolean isMaster);
 +
 +    /**
 +     * Get cluster master status.
 +     *
 +     * @return isMaster
 +     *            is|isn't master
 +     */
 +    boolean isMaster();
  }
index 0928f2098932930a24537cd31c923456caa89bdf,db2220c123077c3e7ba1913399fc4fb250619e5f..d5feb2982a6b776bda962ca777d649fdc9d17ddf
@@@ -44,6 -44,9 +44,9 @@@ import org.opendaylight.yang.gen.v1.urn
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingInput;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingOutput;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingOutputBuilder;
+ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdInput;
+ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdOutput;
+ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingWithXtrIdOutputBuilder;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingsInput;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingsOutput;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
@@@ -90,7 -93,6 +93,7 @@@ public class MappingService implements 
      private boolean overwritePolicy = ConfigIni.getInstance().mappingOverwriteIsSet();
      private boolean notificationPolicy = ConfigIni.getInstance().smrIsSet();
      private boolean iterateMask = true;
 +    private boolean isMaster = false;
  
      public MappingService(final DataBroker broker,
              final NotificationPublishService notificationPublishService,
          return mappingSystem.getMapping(srcKey, dstKey);
      }
  
+     @Override
+     public Future<RpcResult<GetMappingWithXtrIdOutput>> getMappingWithXtrId(GetMappingWithXtrIdInput input) {
+         Preconditions.checkNotNull(input, "get-mapping RPC input must be not null!");
+         LOG.trace("RPC received to get the following mapping: " + input.toString());
+         RpcResultBuilder<GetMappingWithXtrIdOutput> rpcResultBuilder;
+         MappingRecord reply = (MappingRecord) mappingSystem.getMapping(null, convertToBinaryIfNecessary(input.getEid()),
+                 input.getXtrId());
+         if (reply == null) {
+             String message = "No mapping was found in the mapping database";
+             rpcResultBuilder = RpcResultBuilder.<GetMappingWithXtrIdOutput>failed()
+                     .withError(RpcError.ErrorType.APPLICATION, NOT_FOUND_TAG, message);
+         } else {
+             final MappingRecord convertedReply = convertFromBinaryIfNecessary(reply);
+             rpcResultBuilder = RpcResultBuilder.success(new GetMappingWithXtrIdOutputBuilder()
+                     .setMappingRecord(convertedReply));
+         }
+         return Futures.immediateFuture(rpcResultBuilder.build());
+     }
      @Override
      public Future<RpcResult<Void>> removeKey(RemoveKeyInput input) {
          Preconditions.checkNotNull(input, "remove-key RPC input must be not null!");
          }
          return originalLocators;
      }
 +
 +    @Override
 +    public void setIsMaster(boolean isMaster) {
 +        this.isMaster = isMaster;
 +        mappingSystem.setIsMaster(isMaster);
 +    }
 +
 +    @Override
 +    public boolean isMaster() {
 +        return isMaster;
 +    }
  }
index 8bc331e5c1638de5fc04767138b3d37e4c226c48,1b3ca2b8d049b88d919f69e487e44a0a4e79f76b..47f7c70146f29beb080132c730e72f1ea0f4ca3f
@@@ -31,6 -31,7 +31,7 @@@ import org.opendaylight.yang.gen.v1.urn
  import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
  import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
+ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
  import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
@@@ -61,7 -62,6 +62,7 @@@ public class MappingSystem implements I
      private IMapCache pmc;
      private final EnumMap<MappingOrigin, IMapCache> tableMap = new EnumMap<>(MappingOrigin.class);
      private DataStoreBackEnd dsbe;
 +    private boolean isMaster = false;
  
      public MappingSystem(ILispDAO dao, boolean iterateMask, boolean notifications, boolean overwrite) {
          this.dao = dao;
          return getMapping((Eid)null, dst);
      }
  
+     @Override
+     public Object getMapping(Eid src, Eid dst, XtrId xtrId) {
+         // Note: If xtrId is null, we need to go through regular policy checking else Policy doesn't matter
+         if (xtrId == null) {
+             return getMapping(src, dst);
+         }
+         return smc.getMapping(src, dst, xtrId.getValue());
+     }
      @Override
      public Object getMapping(MappingOrigin origin, Eid key) {
          if (origin.equals(MappingOrigin.Southbound)) {
          dao.removeAll();
          buildMapCaches();
      }
 +
 +    @Override
 +    public void setIsMaster(boolean isMaster) {
 +        this.isMaster = isMaster;
 +    }
 +
 +    @Override
 +    public boolean isMaster() {
 +        return isMaster;
 +    }
  }