2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.configpusherfeature.internal;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.concurrent.BlockingQueue;
13 import java.util.concurrent.TimeUnit;
15 import org.apache.karaf.features.Feature;
16 import org.apache.karaf.features.FeatureEvent;
17 import org.apache.karaf.features.FeatureEvent.EventType;
18 import org.apache.karaf.features.FeaturesService;
19 import org.opendaylight.controller.config.persist.api.ConfigPusher;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 import com.google.common.collect.LinkedHashMultimap;
25 public class ConfigPushingRunnable implements Runnable {
26 private static final Logger logger = LoggerFactory.getLogger(ConfigPushingRunnable.class);
27 private static final int POLL_TIME = 1;
28 private BlockingQueue<FeatureEvent> queue;
29 private FeatureConfigPusher configPusher;
30 public ConfigPushingRunnable(ConfigPusher p, FeaturesService f,BlockingQueue<FeatureEvent> q) {
32 configPusher = new FeatureConfigPusher(p, f);
37 List<Feature> toInstall = new ArrayList<Feature>();
39 boolean interuppted = false;
43 if(toInstall.isEmpty()) {
46 event = queue.poll(POLL_TIME, TimeUnit.MILLISECONDS);
48 if(event != null && event.getFeature() !=null) {
49 processFeatureEvent(event,toInstall);
51 } else if(toInstall.isEmpty()) {
52 logger.error("ConfigPushingRunnable - exiting");
55 } catch (InterruptedException e) {
56 logger.error("ConfigPushingRunnable - interupted");
58 } catch (Exception e) {
59 logger.error("Exception while processing features {}", e);
64 protected void processFeatureEvent(FeatureEvent event, List<Feature> toInstall) throws InterruptedException, Exception {
65 if(event.getType() == EventType.FeatureInstalled) {
66 toInstall.add(event.getFeature());
67 LinkedHashMultimap<Feature,FeatureConfigSnapshotHolder> result = configPusher.pushConfigs(toInstall);
68 toInstall.removeAll(result.keySet());
69 } else if(event.getType() == EventType.FeatureUninstalled) {
70 toInstall.remove(event.getFeature());
74 protected void logPushResult(LinkedHashMultimap<Feature,FeatureConfigSnapshotHolder> results) {
75 for(Feature f:results.keySet()) {
76 logger.info("Pushed configs for feature {} {}",f,results.get(f));