2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.netvirt.elan.utils;
10 import com.google.common.base.Optional;
11 import com.google.common.util.concurrent.Futures;
12 import com.google.common.util.concurrent.ListenableFuture;
13 import com.google.common.util.concurrent.MoreExecutors;
14 import com.google.common.util.concurrent.SettableFuture;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.concurrent.Callable;
18 import java.util.function.Function;
19 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
20 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
22 import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
23 import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils;
24 import org.opendaylight.genius.utils.hwvtep.HwvtepSouthboundConstants;
25 import org.opendaylight.netvirt.elan.l2gw.utils.SettableFutureCallback;
26 import org.opendaylight.yangtools.yang.binding.DataObject;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
31 public final class ElanClusterUtils {
32 private static final Logger LOG = LoggerFactory.getLogger(ElanClusterUtils.class);
34 private ElanClusterUtils() {
37 public static void runOnlyInOwnerNode(EntityOwnershipUtils entityOwnershipUtils, String jobDesc, Runnable job) {
38 entityOwnershipUtils.runOnlyInOwnerNode(HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
39 HwvtepSouthboundConstants.ELAN_ENTITY_NAME, DataStoreJobCoordinator.getInstance(), jobDesc, job);
42 public static void runOnlyInOwnerNode(EntityOwnershipUtils entityOwnershipUtils, String jobKey, String jobDesc,
43 Callable<List<ListenableFuture<Void>>> job) {
44 entityOwnershipUtils.runOnlyInOwnerNode(HwvtepSouthboundConstants.ELAN_ENTITY_TYPE,
45 HwvtepSouthboundConstants.ELAN_ENTITY_NAME, DataStoreJobCoordinator.getInstance(), jobKey, jobDesc, job);
48 public static <T extends DataObject> void asyncReadAndExecute(final DataBroker broker,
49 final LogicalDatastoreType datastoreType,
50 final InstanceIdentifier<T> iid,
52 final Function<Optional<T>, Void> function) {
53 DataStoreJobCoordinator.getInstance().enqueueJob(jobKey, () -> {
54 SettableFuture settableFuture = SettableFuture.create();
55 List<ListenableFuture<Void>> futures = Collections.singletonList(settableFuture);
57 ReadWriteTransaction tx = broker.newReadWriteTransaction();
59 Futures.addCallback(tx.read(datastoreType, iid),
60 new SettableFutureCallback<Optional<T>>(settableFuture) {
62 public void onSuccess(Optional<T> data) {
64 super.onSuccess(data);
66 }, MoreExecutors.directExecutor());
69 }, ElanConstants.JOB_MAX_RETRIES);