/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with this
 * work for additional information regarding copyright ownership.  The ASF
 * licenses this file to you 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
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * 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.apache.hadoop.hdds.scm.node;

/**
 * The node package deals with node management.
 * <p/>
 * The node manager takes care of node registrations, removal of node and
 * handling of heartbeats.
 * <p/>
 * The node manager maintains statistics that gets send as part of
 * heartbeats.
 * <p/>
 * The container manager polls the node manager to learn the state of
 * datanodes  that it is interested in.
 * <p/>
 */