/*
 * Copyright 2015 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.ovsdb.controller.driver;

import org.onosproject.ovsdb.controller.OvsdbNodeId;
import org.onosproject.ovsdb.controller.OvsdbClientService;

/**
 * Responsible for keeping track of the current set of nodes connected to the
 * system.
 */
public interface OvsdbAgent {
    /**
     * Add a node that has just connected to the system.
     *
     * @param nodeId the nodeId to add
     * @param ovsdbClient the actual node object.
     */
    void addConnectedNode(OvsdbNodeId nodeId, OvsdbClientService ovsdbClient);

    /**
     * Clear all state in controller node maps for a node that has disconnected
     * from the local controller. Also release control for that node from the
     * global repository. Notify node listeners.
     *
     * @param nodeId the node id to be removed.
     */
    void removeConnectedNode(OvsdbNodeId nodeId);
}
