Implementation files for resourcemanager bundle 35/42035/3
authorkaranrajsingh <karan.raj.s.singh@ericsson.com>
Thu, 14 Jul 2016 11:26:55 +0000 (16:56 +0530)
committerkaranrajsingh <karan.raj.s.singh@ericsson.com>
Wed, 20 Jul 2016 10:47:03 +0000 (16:17 +0530)
This change contains all the implementation files for resourcemanager.

Change-Id: I4278cc9cd121a9d32c48b8f83e1a3e7ff5965ec8
Signed-off-by: karanrajsingh <karan.raj.s.singh@ericsson.com>
resourcemanager/resourcemanager-api/src/main/yang/resource-manager.yang
resourcemanager/resourcemanager-impl/pom.xml
resourcemanager/resourcemanager-impl/src/main/config/default-config.xml
resourcemanager/resourcemanager-impl/src/main/java/org/opendaylight/genius/resourcemanager/ResourceManager.java
resourcemanager/resourcemanager-impl/src/main/java/org/opendaylight/genius/resourcemanager/ResourceManagerServiceProvider.java
resourcemanager/resourcemanager-impl/src/main/java/org/opendaylight/genius/resourcemanager/ResourceManagerUtils.java
resourcemanager/resourcemanager-impl/src/main/yang/resourcemanager-impl.yang

index 5f21ed05333c732239d1ca132443d90c8691c0a5..157e45a5365dfebf026c00d3ae65f281bc97206f 100644 (file)
@@ -106,11 +106,7 @@ module resource-manager {
     }
 
     grouping released-resource-ids {
-        leaf delayed-time-sec {
-            type uint32;
-            mandatory true;
-        }
-        list delayed-id-entries {
+        list delayed-resource-entries {
             uses idmgr:delayed-id-entry;
         }
     }
index 49ddf8b89158c79502e74619b29df331fa7193b4..236eb2aa7f5eed0fa21559ff1a4d234c8ce57721 100644 (file)
@@ -32,6 +32,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>idmanager-api</artifactId>
       <version>${genius.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.genius</groupId>
+      <artifactId>mdsalutil-api</artifactId>
+      <version>${genius.mdsalutil.version}</version>
+    </dependency>
     <!-- Testing Dependencies -->
     <dependency>
       <groupId>junit</groupId>
index 10138ec0ab3296777a1881094d4181792e621ad0..aa0bb2b7fedcd00b5364b6a879e0069d02a840dc 100644 (file)
@@ -26,6 +26,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
             <name>binding-rpc-broker</name>
           </rpc-registry>
+          <mdsalutil>
+            <type xmlns:mdsalutil="urn:opendaylight:genius:mdsalutil">mdsalutil:odl-mdsalutil</type>
+            <name>mdsalutil-service</name>
+          </mdsalutil>
         </module>
       </modules>
     </data>
index da07f16b347af49cbc0ac78af396c919318b0c29..13eac85ade10108c55730b170ff3827b8b87906b 100644 (file)
@@ -8,30 +8,75 @@
 
 package org.opendaylight.genius.resourcemanager;
 
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdRangeInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdRangeOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.AllocateResourceInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.AllocateResourceOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.AllocateResourceOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetAvailableResourcesInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetAvailableResourcesOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetAvailableResourcesOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetResourcePoolInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetResourcePoolOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.GetResourcePoolOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ReleaseResourceInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceTypeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceTypeGroupIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceTypeMeterIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceTypeTableIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.getresourcepool.output.AvailableIdsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.released.resource.ids.DelayedResourceEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.released.resource.ids.DelayedResourceEntriesBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ResourceManager implements ResourceManagerService, AutoCloseable {
-    private static final Logger LOG = LoggerFactory.getLogger(ResourceManager.class);
+public class ResourceManager implements ResourceManagerService, AutoCloseable  {
 
+    private static final Logger LOG = LoggerFactory.getLogger(ResourceManager.class);
     private final DataBroker broker;
     private final IdManagerService idManager;
+    private final ConcurrentHashMap<Class<? extends ResourceTypeBase>, String> resourceMap;
+    private final String tablesName = "resource.tables.name";
+    private final String groupsName = "resource.groups.name";
+    private final String metersName = "resource.meters.name";
 
     public ResourceManager(DataBroker broker, IdManagerService idManager) {
         this.broker = broker;
         this.idManager = idManager;
+        this.resourceMap = new ConcurrentHashMap<>();
+        if (System.getProperty(tablesName) != null && System.getProperty(groupsName) != null
+                && System.getProperty(metersName) != null) {
+            resourceMap.put(ResourceTypeTableIds.class, System.getProperty(tablesName));
+            resourceMap.put(ResourceTypeGroupIds.class, System.getProperty(groupsName));
+            resourceMap.put(ResourceTypeMeterIds.class, System.getProperty(metersName));
+        } else {
+            //Updating Map with default values
+            resourceMap.put(ResourceTypeTableIds.class, "tables");
+            resourceMap.put(ResourceTypeGroupIds.class, "groups");
+            resourceMap.put(ResourceTypeMeterIds.class, "meters");
+        }
     }
 
     @Override
@@ -41,25 +86,207 @@ public class ResourceManager implements ResourceManagerService, AutoCloseable {
 
     @Override
     public Future<RpcResult<AllocateResourceOutput>> allocateResource(AllocateResourceInput input) {
-        //TODO
-        return null;
+        try {
+            Preconditions.checkNotNull(input.getResourceType());
+            Preconditions.checkNotNull(input.getIdKey());
+            Preconditions.checkNotNull(input.getSize());
+            Preconditions.checkNotNull(resourceMap.get(input.getResourceType()));
+        } catch (NullPointerException e) {
+            LOG.error("Incorrect parameters for AllocateResourceInput");
+        }
+        AllocateIdRangeInputBuilder allocateIdRangeBuilder = new AllocateIdRangeInputBuilder();
+        allocateIdRangeBuilder.setIdKey(input.getIdKey()).setPoolName(resourceMap.get(input.getResourceType()))
+                .setSize(input.getSize());
+        Future<RpcResult<AllocateIdRangeOutput>> output = idManager.allocateIdRange(allocateIdRangeBuilder.build());
+        AllocateResourceOutputBuilder allocateResourceOutputBuilder = new AllocateResourceOutputBuilder();
+        RpcResultBuilder<AllocateResourceOutput> allocateResourceOutputRpcBuilder = null;
+        List<Long> idValues = new ArrayList<>();
+        try {
+            if (output.get().isSuccessful()) {
+                AllocateIdRangeOutput allocateIdRangeOutput = output.get().getResult();
+                idValues = allocateIdRangeOutput.getIdValues();
+                allocateResourceOutputBuilder.setIdValues(idValues);
+                allocateResourceOutputRpcBuilder = RpcResultBuilder.success();
+                allocateResourceOutputRpcBuilder.withResult(allocateResourceOutputBuilder.build());
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            allocateResourceOutputRpcBuilder = RpcResultBuilder.failed();
+            allocateResourceOutputRpcBuilder.withError(RpcError.ErrorType.APPLICATION, e.getMessage());
+        } catch (NullPointerException e) {
+            LOG.error("Allocate Resource failed for resource {} due to {} ", input.getResourceType(), e);
+            allocateResourceOutputRpcBuilder = RpcResultBuilder.failed();
+            allocateResourceOutputRpcBuilder.withError(RpcError.ErrorType.APPLICATION, e.getMessage());
+        }
+
+        if (allocateResourceOutputRpcBuilder == null) {
+            allocateResourceOutputRpcBuilder = RpcResultBuilder.failed();
+            allocateResourceOutputRpcBuilder.withError(RpcError.ErrorType.APPLICATION, "Resource cannot be  allocated");
+        }
+        return Futures.immediateFuture(allocateResourceOutputRpcBuilder.build());
     }
 
     @Override
     public Future<RpcResult<GetResourcePoolOutput>> getResourcePool(GetResourcePoolInput input) {
-        //TODO
-        return null;
+        IdPool parentIdPool = null;
+        IdPool localIdPool = null;
+        GetResourcePoolOutputBuilder outputBuilder = null;
+        RpcResultBuilder<GetResourcePoolOutput> rpcOutputBuilder = null;
+        long currentTimeSec = System.currentTimeMillis() / 1000;
+        try {
+            Preconditions.checkNotNull(input.getResourceType());
+            Preconditions.checkNotNull(resourceMap.get(input.getResourceType()));
+        } catch (NullPointerException e) {
+            LOG.error("Incorrect parameters for GetResourcePool");
+        }
+
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager
+                .rev160622.getresourcepool.output.AvailableIds> availableIdsList = new ArrayList<>();
+        List<DelayedResourceEntries> delayedIdEntriesList = new ArrayList<>();
+        InstanceIdentifier<IdPool> parentId = ResourceManagerUtils.getIdPoolInstance(resourceMap
+                .get(input.getResourceType()));
+        Optional<IdPool> optionalParentIdPool = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, parentId, broker);
+        if (optionalParentIdPool != null && optionalParentIdPool.isPresent()) {
+            parentIdPool = optionalParentIdPool.get();
+            AvailableIdsHolder availableParentIdsHolder = parentIdPool.getAvailableIdsHolder();
+            if (availableParentIdsHolder.getStart() < availableParentIdsHolder.getEnd()) {
+                availableIdsList.add(new AvailableIdsBuilder().setStart(availableParentIdsHolder.getStart())
+                        .setEnd(availableParentIdsHolder.getEnd()).build());
+            }
+            ReleasedIdsHolder releasedParentIdsHolder = parentIdPool.getReleasedIdsHolder();
+            if (releasedParentIdsHolder != null) {
+                List<DelayedIdEntries> delayedIdParentList = releasedParentIdsHolder.getDelayedIdEntries();
+                if (delayedIdParentList != null && !delayedIdParentList.isEmpty()) {
+                    for (DelayedIdEntries delayedParentEntry : delayedIdParentList) {
+                        delayedIdEntriesList.add(new DelayedResourceEntriesBuilder().setId(delayedParentEntry.getId())
+                                .setReadyTimeSec(delayedParentEntry.getReadyTimeSec()).build());
+                    }
+                }
+            }
+        }
+
+        String localPool = ResourceManagerUtils.getLocalPoolName(resourceMap.get(input.getResourceType()));
+        InstanceIdentifier<IdPool> localId = ResourceManagerUtils.getIdPoolInstance(localPool);
+        Optional<IdPool> optionalLocalId = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, localId,broker);
+        if (optionalLocalId != null && optionalLocalId.isPresent()) {
+            localIdPool = optionalLocalId.get();
+            AvailableIdsHolder availableLocalIdsHolder = localIdPool.getAvailableIdsHolder();
+            if (availableLocalIdsHolder != null
+                    && availableLocalIdsHolder.getStart() < availableLocalIdsHolder.getEnd()) {
+                availableIdsList.add(new AvailableIdsBuilder().setStart(availableLocalIdsHolder.getStart())
+                        .setEnd(availableLocalIdsHolder.getEnd()).build());
+            }
+            ReleasedIdsHolder releasedLocalIdsHolder = localIdPool.getReleasedIdsHolder();
+            if (releasedLocalIdsHolder != null) {
+                List<DelayedIdEntries> delayedIdLocalList = releasedLocalIdsHolder.getDelayedIdEntries();
+                if (delayedIdLocalList != null && !delayedIdLocalList.isEmpty()) {
+                    for (DelayedIdEntries delayedLocalEntry : delayedIdLocalList) {
+                        if (delayedLocalEntry.getReadyTimeSec() > currentTimeSec) {
+                            break;
+                        }
+                        delayedIdEntriesList.add(new DelayedResourceEntriesBuilder().setId(delayedLocalEntry.getId())
+                                .setReadyTimeSec(delayedLocalEntry.getReadyTimeSec()).build());
+                    }
+                }
+
+            }
+        }
+
+        try {
+            outputBuilder = new GetResourcePoolOutputBuilder().setAvailableIds(availableIdsList)
+                    .setDelayedResourceEntries(delayedIdEntriesList);
+            rpcOutputBuilder =  RpcResultBuilder.success();
+            rpcOutputBuilder.withResult(outputBuilder.build());
+        } catch (NullPointerException e) {
+            rpcOutputBuilder =  RpcResultBuilder.failed();
+            rpcOutputBuilder.withError(RpcError.ErrorType.APPLICATION, e.getMessage());
+        }
+        return Futures.immediateFuture(rpcOutputBuilder.build());
     }
 
     @Override
     public Future<RpcResult<GetAvailableResourcesOutput>> getAvailableResources(GetAvailableResourcesInput input) {
-        //TODO
-        return null;
+
+        IdPool parentIdPool = null;
+        IdPool localIdPool = null;
+        long totalIdsAvailableForAllocation = 0;
+        long currentTimeSec = System.currentTimeMillis() / 1000;
+        try {
+            Preconditions.checkNotNull(input.getResourceType());
+            Preconditions.checkNotNull(resourceMap.get(input.getResourceType()));
+        } catch (NullPointerException e) {
+            LOG.error("Incorrect parameters for GetAvailableResources");
+        }
+        InstanceIdentifier<IdPool> parentId = ResourceManagerUtils
+                .getIdPoolInstance(resourceMap.get(input.getResourceType()));
+        Optional<IdPool> optionalParentIdPool = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, parentId, broker);
+        if (optionalParentIdPool != null && optionalParentIdPool.isPresent()) {
+            parentIdPool = optionalParentIdPool.get();
+            AvailableIdsHolder availableParentIdsHolder = parentIdPool.getAvailableIdsHolder();
+            totalIdsAvailableForAllocation = availableParentIdsHolder.getEnd() - availableParentIdsHolder.getCursor();
+            ReleasedIdsHolder releasedParentIdsHolder = parentIdPool.getReleasedIdsHolder();
+            if (releasedParentIdsHolder != null) {
+                List<DelayedIdEntries> delayedIdParentList = releasedParentIdsHolder.getDelayedIdEntries();
+                if (delayedIdParentList != null && !delayedIdParentList.isEmpty()) {
+                    totalIdsAvailableForAllocation += delayedIdParentList.size();
+                }
+            }
+        }
+
+        String localPool = ResourceManagerUtils.getLocalPoolName(resourceMap.get(input.getResourceType()));
+        InstanceIdentifier<IdPool> localId = ResourceManagerUtils.getIdPoolInstance(localPool);
+        Optional<IdPool> optionalLocalId = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, localId,broker);
+        if (optionalLocalId != null && optionalLocalId.isPresent()) {
+            localIdPool = optionalLocalId.get();
+            AvailableIdsHolder availableLocalIdsHolder = localIdPool.getAvailableIdsHolder();
+            if (availableLocalIdsHolder != null) {
+                totalIdsAvailableForAllocation +=
+                        availableLocalIdsHolder.getEnd() - availableLocalIdsHolder.getCursor();
+            }
+            ReleasedIdsHolder releasedLocalIdsHolder = localIdPool.getReleasedIdsHolder();
+            if (releasedLocalIdsHolder != null) {
+                long count = 0;
+                List<DelayedIdEntries> delayedIdLocalList = releasedLocalIdsHolder.getDelayedIdEntries();
+                if (delayedIdLocalList != null && !delayedIdLocalList.isEmpty()) {
+                    for (DelayedIdEntries delayedLocalEntry : delayedIdLocalList) {
+                        if (delayedLocalEntry.getReadyTimeSec() > currentTimeSec) {
+                            break;
+                        }
+                    }
+                    count++;
+                }
+                totalIdsAvailableForAllocation += count;
+            }
+        }
+
+        GetAvailableResourcesOutputBuilder outputBuilder = new GetAvailableResourcesOutputBuilder()
+                .setTotalAvailableIdCount(totalIdsAvailableForAllocation);
+        RpcResultBuilder<GetAvailableResourcesOutput> rpcOutputBuilder = null;
+        rpcOutputBuilder = RpcResultBuilder.success();
+        rpcOutputBuilder.withResult(outputBuilder.build());
+
+        return Futures.immediateFuture(rpcOutputBuilder.build());
     }
 
     @Override
     public Future<RpcResult<Void>> releaseResource(ReleaseResourceInput input) {
-        //TODO
-        return null;
+        try {
+            Preconditions.checkNotNull(input.getResourceType());
+            Preconditions.checkNotNull(input.getIdKey());
+            Preconditions.checkNotNull(resourceMap.get(input.getResourceType()));
+        } catch (NullPointerException e) {
+            LOG.error("Incorrect parameters for the ReleaseResourceInput");
+        }
+        ReleaseIdInputBuilder releaseIdInputBuilder = new ReleaseIdInputBuilder();
+        releaseIdInputBuilder.setIdKey(input.getIdKey()).setPoolName(resourceMap.get(input.getResourceType()));
+        RpcResultBuilder<Void> releaseIdRpcBuilder;
+        try {
+            idManager.releaseId(releaseIdInputBuilder.build());
+            releaseIdRpcBuilder = RpcResultBuilder.success();
+        } catch (NullPointerException e) {
+            LOG.error("Release resource failed for resource {} due to {}", input.getResourceType(), e);
+            releaseIdRpcBuilder = RpcResultBuilder.failed();
+            releaseIdRpcBuilder.withError(RpcError.ErrorType.APPLICATION, e.getMessage());
+        }
+        return Futures.immediateFuture(releaseIdRpcBuilder.build());
     }
-}
+}
\ No newline at end of file
index 1ee8b8778aa208c5a640c22a8b7caee22b6379ad..d526a7bfb09e9bafb3314e3f1ea2c82410595413 100644 (file)
@@ -12,6 +12,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.resourcemanager.rev160622.ResourceManagerService;
 import org.slf4j.Logger;
@@ -26,6 +27,15 @@ public class ResourceManagerServiceProvider implements BindingAwareProvider, Aut
     private RpcProviderRegistry rpcProviderRegistry;
     private BindingAwareBroker.RpcRegistration<ResourceManagerService> rpcRegistration;
     private DataBroker dataBroker;
+    private String tablesName = "resource.tables.name";
+    private String tablesStr = "resource.tables.startId";
+    private String tablesEnd = "resource.tables.endId";
+    private String groupsName = "resource.groups.name";
+    private String groupsStr = "resource.groups.startId";
+    private String groupsEnd = "resource.tables.endId";
+    private String metersName = "resource.meters.name";
+    private String metersStr = "resource.meters.startId";
+    private String metersEnd = "resource.meters.endId";
 
     public RpcProviderRegistry getRpcProviderRegistry() {
         return rpcProviderRegistry;
@@ -49,8 +59,46 @@ public class ResourceManagerServiceProvider implements BindingAwareProvider, Aut
         createIdpools();
     }
 
+
     private void createIdpools() {
-        // TODO Create pools for tables, groups and meters
+        //Create Tables Id Pool
+        if (System.getProperty(tablesName) != null && System.getProperty(tablesStr) != null
+                && System.getProperty(tablesEnd) != null) {
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName(System.getProperty(tablesName))
+                    .setLow(Long.valueOf(System.getProperty(tablesStr)))
+                    .setHigh(Long.valueOf(System.getProperty(tablesEnd))).build());
+        } else {
+            LOG.error("Tables Id Pool cannot be created due to null parameters");
+            LOG.trace("Creating pool with default values");
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName("tables")
+                    .setLow((long) 0).setHigh((long) 254).build());
+        }
+
+        //Create Groups Id Pool
+        if (System.getProperty(groupsName) != null && System.getProperty(groupsStr) != null
+                && System.getProperty(groupsEnd) != null) {
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName(System.getProperty(groupsName))
+                    .setLow(Long.valueOf(System.getProperty(groupsStr)))
+                    .setHigh(Long.valueOf(System.getProperty(groupsEnd))).build());
+        } else {
+            LOG.error("Groups Id Pool cannot be created due to null parameters");
+            LOG.trace("Creating pool with default values");
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName("meters")
+                    .setLow((long) 0).setHigh((long) 254).build());
+        }
+
+        //Create Meters Id Pool
+        if (System.getProperty(metersName) != null && System.getProperty(metersStr) != null
+                && System.getProperty(metersEnd) != null) {
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName(System.getProperty(metersName))
+                    .setLow(Long.valueOf(System.getProperty(metersStr)))
+                    .setHigh(Long.valueOf(System.getProperty(metersEnd))).build());
+        } else {
+            LOG.error("Meters Id Pool cannot be created due to null parameters");
+            LOG.trace("Creating pool with default values");
+            idManager.createIdPool(new CreateIdPoolInputBuilder().setPoolName("groups")
+                    .setLow((long) 0).setHigh((long) 254).build());
+        }
     }
 
     public ResourceManagerServiceProvider(RpcProviderRegistry rpcRegistry) {
index fc16e68b0a682dffa5eda411d7fd446ead4fa479..0e45a5a1ef8afcbbe53aa94c17831ce1c00eaa63 100644 (file)
@@ -7,10 +7,40 @@
  */
 package org.opendaylight.genius.resourcemanager;
 
+import com.google.common.net.InetAddresses;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 class ResourceManagerUtils {
     private static final Logger LOGGER = LoggerFactory.getLogger(ResourceManagerUtils.class);
 
+    private static int BLADE_ID;
+
+    static {
+        try {
+            BLADE_ID = InetAddresses.coerceToInteger(InetAddress.getLocalHost());
+        } catch (UnknownHostException e) {
+            LOGGER.error("ResourceManager - Exception - {}", e.getMessage());
+        }
+    }
+
+    protected static InstanceIdentifier<IdPool> getIdPoolInstance(String poolName) {
+        InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idPoolBuilder = InstanceIdentifier
+                .builder(IdPools.class).child(IdPool.class,
+                        new IdPoolKey(poolName));
+        InstanceIdentifier<IdPool> id = idPoolBuilder.build();
+        return id;
+    }
+
+    protected static String getLocalPoolName(String poolName) {
+        return (poolName + "." + BLADE_ID);
+    }
+
 }
index 0bd043dc55e15ed41e4aac48cb4c0dc051e9c777..d7fce2fea40a0f82932c9c5c1d678b63b001ac81 100644 (file)
@@ -5,6 +5,7 @@ module resourcemanager-impl {
 
     import config { prefix config; revision-date 2013-04-05; }
     import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+    import odl-mdsalutil { prefix odl-mdsal; revision-date 2016-04-06;}
 
     description
         "Service definition for resourcemanager project";
@@ -38,6 +39,14 @@ module resourcemanager-impl {
                           }
                      }
                 }
+                container mdsalutil {
+                      uses config:service-ref {
+                            refine type {
+                               mandatory true;
+                               config:required-identity odl-mdsal:odl-mdsalutil;
+                            }
+                      }
+                }
             }
         }
 }