import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
+import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.GbpSxpIseAdapter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseSourceConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatusBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.GbpSxpIseAdapter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatusBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseSourceConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.ise.source.config.ConnectionConfig;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public void onDataTreeChanged(@Nonnull final Collection<DataTreeModification<IseSourceConfig>> collection) {
for (DataTreeModification<IseSourceConfig> modification : collection) {
final IseSourceConfig iseSourceConfig = modification.getRootNode().getDataAfter();
- //TODO: separate template provider from harvesting
- templateProviderFacade.assignIseSourceConfig(iseSourceConfig);
+ final IseContext iseContext = new IseContext(iseSourceConfig);
+ templateProviderFacade.assignIseContext(iseContext);
if (iseSourceConfig != null) {
+ final Optional<ConnectionConfig> connectionConfig = Optional.ofNullable(iseSourceConfig.getConnectionConfig());
+ LOG.debug("Ise-source config assigned: {} -> {}", iseSourceConfig.getTenant(),
+ connectionConfig.map(ConnectionConfig::getIseRestUrl).orElse(new Uri("n/a")));
pool.submit(() -> {
- final ListenableFuture<Integer> harvestResult = gbpIseSgtHarvester.harvest(iseSourceConfig);
- Futures.addCallback(harvestResult, new FutureCallback<Integer>() {
+ final ListenableFuture<Collection<SgtInfo>> harvestResult = gbpIseSgtHarvester.harvestAll(iseContext);
+ Futures.addCallback(harvestResult, new FutureCallback<Collection<SgtInfo>>() {
@Override
- public void onSuccess(@Nullable final Integer result) {
- LOG.debug("ise harvest finished, outcome: {}", result);
- storeOutcome(true, result.intValue(), null);
+ public void onSuccess(@Nullable final Collection<SgtInfo> result) {
+ final Integer counter = Optional.ofNullable(result).map(Collection::size).orElse(0);
+ LOG.debug("ise harvest finished, outcome: {}", counter);
+ storeOutcome(true, counter, null);
}
@Override
LOG.debug("ise harvest failed", t);
storeOutcome(false, 0, t.getMessage());
}
- });
+ }, MoreExecutors.directExecutor());
try {
harvestResult.get(30, TimeUnit.SECONDS);
LOG.debug("failed to finish ise-sgt-harvest task properly on time", e);
}
});
+ } else {
+ LOG.debug("Ise-source config removed");
}
}
}
@Override
public void close() throws Exception {
- if (!pool.isTerminated()) {
+ if (! pool.isTerminated()) {
pool.shutdown();
final boolean terminated = pool.awaitTermination(10, TimeUnit.SECONDS);
if (! terminated) {