2 * Copyright (c) 2017 Red Hat, 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
9 package org.opendaylight.genius.mdsalutil.internal;
11 import java.util.concurrent.atomic.AtomicBoolean;
12 import javax.annotation.Nonnull;
13 import javax.inject.Inject;
14 import javax.inject.Singleton;
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
21 import org.opendaylight.genius.datastoreutils.listeners.AbstractClusteredSyncDataTreeChangeListener;
22 import org.opendaylight.genius.mdsalutil.UpgradeState;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.rev170830.Config;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.ops4j.pax.cdi.api.OsgiService;
26 import org.ops4j.pax.cdi.api.OsgiServiceProvider;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
31 @OsgiServiceProvider(classes = UpgradeState.class)
32 public class UpgradeStateListener extends AbstractClusteredSyncDataTreeChangeListener<Config> implements UpgradeState {
33 private static final Logger LOG = LoggerFactory.getLogger(UpgradeStateListener.class);
35 private final AtomicBoolean isUpgradeInProgress = new AtomicBoolean(false);
38 public UpgradeStateListener(@OsgiService final DataBroker dataBroker, final Config config) {
39 super(dataBroker, new DataTreeIdentifier<>(
40 LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Config.class)));
41 // When this config value is set from a file it is not accessible via the yang tree...
42 // so we just write it once here just in case.
44 SingleTransactionDataBroker.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION,
45 InstanceIdentifier.create(Config.class), config);
46 } catch (TransactionCommitFailedException e) {
47 LOG.error("Failed to write mdsalutil config", e);
52 public boolean isUpgradeInProgress() {
53 return isUpgradeInProgress.get();
57 public void add(@Nonnull InstanceIdentifier<Config> instanceIdentifier, @Nonnull Config config) {
58 isUpgradeInProgress.set(config.isUpgradeInProgress());
59 LOG.info("UpgradeStateListener.add: isUpgradeInProgress = {}", config.isUpgradeInProgress());
63 public void remove(@Nonnull InstanceIdentifier<Config> instanceIdentifier, @Nonnull Config config) {
64 isUpgradeInProgress.set(false);
65 LOG.info("UpgradeStateListener.remove: isUpgradeInProgress = {}", false);
69 public void update(@Nonnull InstanceIdentifier<Config> instanceIdentifier,
70 @Nonnull Config originalConfig, @Nonnull Config updatedConfig) {
71 isUpgradeInProgress.set(updatedConfig.isUpgradeInProgress());
72 LOG.info("UpgradeStateListener.update: isUpgradeInProgress = {}", updatedConfig.isUpgradeInProgress());