package com.sohu.cache.redis;
import java.util.List;
import com.sohu.cache.entity.AppDesc;
import com.sohu.cache.web.enums.RedisOperateEnum;
/**
* redis 部署配置
* Created by yijunzhang on 14-7-1.
*/
public interface RedisDeployCenter {
/**
* 部署cluster 集群
*
* @param appId 应用id
* @param clusterNodes redis实例集合
* @param maxMemory 实例最大内存,单位MB
* @return 实例是否部署成功
*/
public boolean deployClusterInstance(long appId, List<RedisClusterNode> clusterNodes, int maxMemory);
/**
* 部署redis sentinel实例 实例组
*
* @param appId 应用id
* @param masterHost 主节点地址
* @param slaveHost 从节点地址
* @param maxMemory 实例最大内存,单位MB
* @param sentinelList sentinel-host列表
* @param
* @return 实例是否部署成功
*/
public boolean deploySentinelInstance(long appId, String masterHost, String slaveHost, int maxMemory, List<String> sentinelList);
/**
* 部署Standalone redis实例
*
* @param appId 应用id
* @param host 节点地址
* @param maxMemory 实例最大内存,单位MB
* @return 实例是否部署成功
*/
public boolean deployStandaloneInstance(long appId, String host, int maxMemory);
/**
* 修改app下所有实例的配置
*
* @param appId
* @param parameter
* @param value
* @return
*/
public boolean modifyAppConfig(long appId, String parameter, String value);
/**
* 修改实例配置
* @param appId
* @param host
* @param port
* @param parameter
* @param value
* @return
*/
public boolean modifyInstanceConfig(long appId, String host, int port, String parameter, String value);
/**
* 为应用appId添加sentinel服务器
*
* @param appId
* @param sentinelHost
* @return
*/
public boolean addSentinel(long appId, String sentinelHost) throws Exception;
/**
* 为主节点添加从节点
*
* @param appId
* @param masterInstanceId
* @param slaveHost
* @return
*/
public boolean addSlave(long appId, int masterInstanceId, String slaveHost) throws Exception;
/**
* 填充集群中失败的slots,添加一个master节点
* @param appId
* @param instanceId
* @param masterHost
* @return
* @throws Exception
*/
public RedisOperateEnum addSlotsFailMaster(long appId, int instanceId, String masterHost) throws Exception;
/**
* 创建一个redis实例
*
* @param appDesc
* @param host
* @param port
* @param maxMemory
* @return
*/
public boolean createRunNode(AppDesc appDesc, String host, Integer port, int maxMemory, boolean isCluster);
/**
* sentinel类型应用执行Failover,主从切换
* @param appId
* @return
*/
public boolean sentinelFailover(long appId) throws Exception;
/**
* cluster类型应用执行Failover,主从切换,只能在从节点执行
*
* @param appId
* @return
*/
public boolean clusterFailover(long appId, int slaveInstanceId) throws Exception;
}