--- /dev/null
+/*
+ * Copyright (c) 2016 Red Hat, Inc. and others. 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,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.genius.idmanager.api;
+
+import java.util.Map;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+
+/**
+ * Monitoring for {@link IdManagerService}.
+ *
+ * @author Michael Vorburger
+ */
+public interface IdManagerMonitor {
+
+ /**
+ * Obtain description of ID pool/s. Suitable for usage e.g. by a CLI tool.
+ *
+ * @return Map with poolName as key, and a String describing the pool
+ * (e.g. with information about availableIds & releasedIds)
+ */
+ Map<String, String> getLocalPoolsDetails();
+
+}
package org.opendaylight.genius.idmanager;
import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
+
import com.google.common.base.Optional;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.Futures;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Timer;
import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
import org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry;
+import org.opendaylight.genius.idmanager.api.IdManagerMonitor;
import org.opendaylight.genius.idmanager.jobs.CleanUpJob;
import org.opendaylight.genius.idmanager.jobs.IdHolderSyncJob;
import org.opendaylight.genius.idmanager.jobs.LocalPoolCreateJob;
import org.opendaylight.genius.idmanager.jobs.LocalPoolDeleteJob;
import org.opendaylight.genius.idmanager.jobs.UpdateIdEntryJob;
import org.opendaylight.genius.mdsalutil.MDSALUtil;
-import org.opendaylight.genius.utils.cache.CacheUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutputBuilder;
import org.slf4j.LoggerFactory;
@Singleton
-public class IdManager implements IdManagerService {
+public class IdManager implements IdManagerService, IdManagerMonitor {
private static final Logger LOG = LoggerFactory.getLogger(IdManager.class);
private static final long DEFAULT_IDLE_TIME = 24 * 60 * 60;
this.broker = db;
this.lockManager = lockManager;
this.idUtils = idUtils;
-
- CacheUtil.createCache(IdUtils.ID_POOL_CACHE);
- localPool = (ConcurrentMap<String, IdLocalPool>) CacheUtil.getCache(IdUtils.ID_POOL_CACHE);
+ this.localPool = new ConcurrentHashMap<>();
populateCache();
}
+ @Override
+ public Map<String, String> getLocalPoolsDetails() {
+ Map<String, String> map = new HashMap<>();
+ localPool.entrySet().stream().forEach(entry -> map.put(entry.getKey(), entry.getValue().toString()));
+ return map;
+ }
+
@PostConstruct
public void start() {
LOG.info("{} start", getClass().getSimpleName());
}
localPool.put(parentPoolName, localPoolCache);
}
+
}
private static final long DEFAULT_AVAILABLE_ID_COUNT = 0;
private static final int DEFAULT_BLOCK_SIZE_DIFF = 10;
public static final int RETRY_COUNT = 6;
- public static final String ID_POOL_CACHE = "ID_POOL_CACHE";
private final ConcurrentHashMap<String, Integer> poolUpdatedMap = new ConcurrentHashMap<>();
<odl:rpc-implementation ref="idManager" />
+ <service ref="idManager" interface="org.opendaylight.genius.idmanager.api.IdManagerMonitor" />
+
</blueprint>
package org.opendaylight.genius.idmanager.shell;
-import java.util.concurrent.ConcurrentMap;
-
+import java.util.Map;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.commands.Option;
import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.opendaylight.genius.idmanager.IdUtils;
-import org.opendaylight.genius.utils.cache.CacheUtil;
+import org.opendaylight.genius.idmanager.api.IdManagerMonitor;
@Command(scope = "idmanager", name = "show", description = "display local pool id cache")
public class IdManagerCacheCli extends OsgiCommandSupport {
required = false, multiValued = false)
String poolName;
- @Override
- protected Object doExecute() throws Exception {
- showIdPoolCache();
- return null;
+ private IdManagerMonitor idManagerMonitor;
+
+ public void setIdManagerMonitor(IdManagerMonitor idManagerMonitor) {
+ this.idManagerMonitor = idManagerMonitor;
}
- private void showIdPoolCache() {
- ConcurrentMap<String, Object> cache = (ConcurrentMap<String, Object>) CacheUtil.getCache(IdUtils.ID_POOL_CACHE);
- if (cache == null) {
- session.getConsole().println("No caches available");
- return;
+ @Override
+ protected Object doExecute() throws Exception {
+ if (idManagerMonitor == null) {
+ session.getConsole().println("No IdManagerMonitor service available");
+ return null;
}
+ Map<String, String> cache = idManagerMonitor.getLocalPoolsDetails();
session.getConsole().println("No of pools in cluster " + cache.keySet().size());
session.getConsole().println(DEMARCATION);
if (poolName == null) {
- for (String idPoolName : cache.keySet()) {
+ cache.keySet().stream().forEach(idPoolName -> {
print(idPoolName, cache.get(idPoolName));
session.getConsole().println(DEMARCATION);
session.getConsole().println(DEMARCATION);
+ });
+ } else {
+ Object idPool = cache.get(poolName);
+ if (idPool == null) {
+ session.getConsole().println("Local Id pool not found for " + poolName);
+ } else {
+ print(poolName, idPool);
}
- return;
}
- Object idPool = cache.get(poolName);
- if (idPool == null) {
- session.getConsole().println("Local Id pool not found for " + poolName);
- return;
- }
- print(poolName, idPool);
+ return null;
}
private void print(String idPoolName, Object idPool) {
- session.getConsole().println("Pool name : " + idPoolName);
- session.getConsole().println("IdPool " + idPool);
+ session.getConsole().println("Pool name: " + idPoolName);
+ session.getConsole().println("IdPool: " + idPool);
}
-}
\ No newline at end of file
+}
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <reference id="idManagerMonitor" interface="org.opendaylight.genius.idmanager.api.IdManagerMonitor" />
+
<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
<command>
- <action class="org.opendaylight.genius.idmanager.shell.IdManagerCacheCli"/>
+ <action class="org.opendaylight.genius.idmanager.shell.IdManagerCacheCli">
+ <property name="idManagerMonitor" ref="idManagerMonitor" />
+ </action>
</command>
</command-bundle>
-</blueprint>
\ No newline at end of file
+</blueprint>