package com.alibaba.doris.admin.service;
import java.util.List;
import com.alibaba.doris.admin.dataobject.PhysicalNodeDO;
import com.alibaba.doris.common.StoreNodeSequenceEnum;
/**
* @project :doris
* @author : len.liu
* @datetime : 2011-5-12 下午10:10:20
* @version :0.1
* @Modification:
*/
public interface AdminNodeService {
/**
* 新增一个节点Node,但此操作不将其加入到集群中去
*/
Integer addPhysicalNode(PhysicalNodeDO phsicalNodeDo);
/**
* @return 所有序列的所有Node节点,含集群中提供服务的Nodes以及未分配到集群中的Nodes.
*/
List<PhysicalNodeDO> queryAllPhysicalNodes();
/**
* @return 所有在集群中可用的Node节点,主要包括在集群中提供服务的节点Nodes;
*/
List<PhysicalNodeDO> queryAllUsablePhysicalNodes();
/**
* @return 所有新增的但还没有加入到集群中的节点Nodes
*/
List<PhysicalNodeDO> queryUnUsablePhysicalNodes();
/**
* @param serialId 序列ID
* @return 包含在某条序列中的Nodes
*/
List<PhysicalNodeDO> queryPhysicalNodesBySerialId(String serialId);
/**
* @param physicalId
* @return 根据physicalId返回Node对象,PhysicalId在整个集群中是唯一存在的
*/
PhysicalNodeDO queryPhysicalNodeByPhysicalId(String physicalId);
/**
* @param Id
* @return 根据主键Id返回Node对象
*/
PhysicalNodeDO queryPhysicalNodeById(Integer id);
/**
* 检查重复性:利用ip+port或physicalId
*
* @param physicalNodeDO
* @return
*/
PhysicalNodeDO queryPhysicalNodesByConditions(PhysicalNodeDO physicalNodeDO);
/**
* 检查重复性:利用ip+port或physicalId, 排除当前node
*
* @param physicalNodeDO
* @return
*/
PhysicalNodeDO queryDuplicateNodesForEdit(PhysicalNodeDO physicalNodeDO);
/**
* 根据physical id 修改一个节点Node的状态
*/
void updatePhysicalNodeStatus(String physicalId, int status);
/**
* 更新Node信息
*
* @param physicalNodeDO
*/
public void updatePhysicalNode(PhysicalNodeDO physicalNodeDO);
public void updatePhysicalNodeByNodeId(PhysicalNodeDO physicalNodeDO);
/**
* 删除Node
*
* @param physicalNodeDO
*/
public void deletePhysicalNode(String physicalId);
/**
* 更新NodeList的状态
*
* @param physicalNodeDoList
*/
public void updatePhysicalNodeList(List<PhysicalNodeDO> physicalNodeDoList);
/**
* @return 根据IP返回Node对象集合;
*/
List<PhysicalNodeDO> queryNomalPhysicalNodesByIP(String IP);
/**
* 检查同一台Machine下的Node不可以分配到不同的sequence里面去,即同一台Machine下的Node必须在相同的sequence里面
*
* @param IP准备迁移的Node的machine IP
* @param targetSequence 要迁移的目标序列
* @return
*/
public boolean checkLegalMigrateByIP(String IP, StoreNodeSequenceEnum targetSequence);
/**
* 检查同一台Machine下的Node不可以分配到不同的sequence里面去,即同一台Machine下的Node必须在相同的sequence里面
*
* @param physicalId准备迁移的Node的physicalId
* @param targetSequence 要迁移的目标序列
* @return
*/
public boolean checkLegalMigrateByPhysicalId(String physicalId, StoreNodeSequenceEnum targetSequence);
}