/* * Copyright 2014-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.mastership; import java.util.Set; import java.util.concurrent.CompletableFuture; import org.onosproject.cluster.NodeId; import org.onosproject.cluster.RoleInfo; import org.onosproject.net.DeviceId; import org.onosproject.net.MastershipRole; import org.onosproject.store.Store; /** * Manages inventory of mastership roles for devices, across controller * instances; not intended for direct use. */ public interface MastershipStore extends Store<MastershipEvent, MastershipStoreDelegate> { // three things to map: NodeId, DeviceId, MastershipRole /** * Requests role of the local node for the specified device. * * @param deviceId device identifier * @return established or newly negotiated mastership role */ CompletableFuture<MastershipRole> requestRole(DeviceId deviceId); /** * Returns the role of a device for a specific controller instance. * * @param nodeId the instance identifier * @param deviceId the device identifiers * @return the role */ MastershipRole getRole(NodeId nodeId, DeviceId deviceId); /** * Returns the master for a device. * * @param deviceId the device identifier * @return the instance identifier of the master */ NodeId getMaster(DeviceId deviceId); /** * Returns the master and backup nodes for a device. * * @param deviceId the device identifier * @return a RoleInfo containing controller IDs */ RoleInfo getNodes(DeviceId deviceId); /** * Returns the devices that a controller instance is master of. * * @param nodeId the instance identifier * @return a set of device identifiers */ Set<DeviceId> getDevices(NodeId nodeId); /** * Sets a device's role for a specified controller instance. * * @param nodeId controller instance identifier * @param deviceId device identifier * @return a mastership event */ CompletableFuture<MastershipEvent> setMaster(NodeId nodeId, DeviceId deviceId); /** * Returns the current master and number of past mastership hand-offs * (terms) for a device. * * @param deviceId the device identifier * @return the current master's ID and the term value for device, or null */ MastershipTerm getTermFor(DeviceId deviceId); /** * Sets a controller instance's mastership role to STANDBY for a device. * If the role is MASTER, another controller instance will be selected * as a candidate master. * * @param nodeId the controller instance identifier * @param deviceId device to revoke mastership role for * @return a mastership event */ CompletableFuture<MastershipEvent> setStandby(NodeId nodeId, DeviceId deviceId); /** * Allows a controller instance to give up its current role for a device. * If the role is MASTER, another controller instance will be selected * as a candidate master. * * @param nodeId the controller instance identifier * @param deviceId device to revoke mastership role for * @return a mastership event */ CompletableFuture<MastershipEvent> relinquishRole(NodeId nodeId, DeviceId deviceId); /** * Removes all the roles for the specified controller instance. * If the role was MASTER, another controller instance will be selected * as a candidate master. * * @param nodeId the controller instance identifier */ void relinquishAllRole(NodeId nodeId); }