use of com.bonree.brfs.schedulers.ManagerContralFactory in project BRFS by zhangnianli.
the class CopyCheckJob method operation.
@Override
public void operation(JobExecutionContext context) throws Exception {
LOG.info("createCheck Copy Job working");
ManagerContralFactory mcf = ManagerContralFactory.getInstance();
MetaTaskManagerInterface release = mcf.getTm();
StorageRegionManager snm = mcf.getSnm();
ServiceManager sm = mcf.getSm();
List<String> srs = TaskStateLifeContral.getSRs(snm);
TaskStateLifeContral.watchSR(release, srs, TaskType.SYSTEM_COPY_CHECK.name());
// 判断是否有恢复任务,有恢复任务则不进行创建
if (WatchSomeThingJob.getState(WatchSomeThingJob.RECOVERY_STATUSE)) {
LOG.warn("rebalance task is running !! skip check copy task");
return;
}
String taskType = TaskType.SYSTEM_COPY_CHECK.name();
List<Service> services = sm.getServiceListByGroup(Configs.getConfiguration().GetConfig(CommonConfigs.CONFIG_DATA_SERVICE_GROUP_NAME));
if (services == null || services.isEmpty()) {
LOG.warn("skip create {} task, because service is empty", taskType);
return;
}
List<StorageRegion> snList = snm.getStorageRegionList();
if (snList == null || snList.isEmpty()) {
LOG.warn("storagename list is null");
return;
}
// 1.获取sn创建任务的实际那
TaskTypeModel tmodel = release.getTaskTypeInfo(taskType);
if (tmodel == null) {
tmodel = new TaskTypeModel();
tmodel.setSwitchFlag(true);
release.setTaskTypeModel(taskType, tmodel);
}
Map<String, Long> sourceTimes = tmodel.getSnTimes();
LOG.debug("update init sn time :{}", sourceTimes);
// 2.过滤不符合副本校验的sn信息
List<StorageRegion> needSns = CopyCountCheck.filterSn(snList, services.size());
// 3.针对第一次出现的sn补充时间
sourceTimes = CopyCountCheck.repairTime(sourceTimes, needSns);
Map<String, List<String>> losers = CopyCountCheck.collectLossFile(needSns, services, sourceTimes);
LOG.info("update before sn time :{}", sourceTimes);
Pair<TaskModel, Map<String, Long>> pair = CreateSystemTask.creatTaskWithFiles(sourceTimes, losers, needSns, TaskType.SYSTEM_COPY_CHECK, RECOVERY_NUM, 0);
if (pair == null) {
LOG.warn("create pair is empty !!!!");
return;
}
TaskModel task = pair.getFirst();
String taskName = null;
if (task != null) {
List<String> servers = CreateSystemTask.getServerIds(services);
taskName = CreateSystemTask.updateTask(release, task, servers, TaskType.SYSTEM_COPY_CHECK);
}
if (!BrStringUtils.isEmpty(taskName)) {
LOG.info("create {} {} task successfull !!!", taskType, taskName);
}
sourceTimes = pair.getSecond();
// 更新sn临界信息
tmodel = release.getTaskTypeInfo(taskType);
if (tmodel == null) {
tmodel = new TaskTypeModel();
tmodel.setSwitchFlag(true);
LOG.warn("taskType {} metadata loss create against !!", taskType);
}
tmodel.putAllSnTimes(sourceTimes);
release.setTaskTypeModel(taskType, tmodel);
LOG.debug("update sn time {}", sourceTimes);
createTransferTasks(release);
}
use of com.bonree.brfs.schedulers.ManagerContralFactory in project BRFS by zhangnianli.
the class ManagerMetaTaskJob method operation.
@Override
public void operation(JobExecutionContext context) throws Exception {
LOG.info("revise task work");
JobDataMap data = context.getJobDetail().getJobDataMap();
// 任务过期时间 ms
String ttlTimeStr = data.getString(JobDataMapConstract.TASK_EXPIRED_TIME);
LOG.info("task ttl time : {}", ttlTimeStr);
long ttlTime = Long.parseLong(ttlTimeStr);
ManagerContralFactory mcf = ManagerContralFactory.getInstance();
MetaTaskManagerInterface release = mcf.getTm();
// 获取可用服务
String groupName = mcf.getGroupName();
ServiceManager sm = mcf.getSm();
// 2.设置可用服务
List<String> serverIds = getServerIds(sm, groupName);
if (serverIds == null || serverIds.isEmpty()) {
LOG.warn("available server list is null");
return;
}
for (TaskType taskType : TaskType.values()) {
try {
release.reviseTaskStat(taskType.name(), ttlTime, serverIds);
} catch (Exception e) {
LOG.warn("{}", e.getMessage());
EmailPool emailPool = EmailPool.getInstance();
MailWorker.Builder builder = MailWorker.newBuilder(emailPool.getProgramInfo());
builder.setModel(this.getClass().getSimpleName() + "模块服务发生问题");
builder.setException(e);
builder.setMessage("管理任务数据发生错误");
builder.setVariable(data.getWrappedMap());
emailPool.sendEmail(builder);
}
}
LOG.info("revise task success !!!");
}
use of com.bonree.brfs.schedulers.ManagerContralFactory in project BRFS by zhangnianli.
the class OperationTaskJob method operation.
@Override
public void operation(JobExecutionContext context) {
JobDataMap data = context.getJobDetail().getJobDataMap();
String dataPath = data.getString(JobDataMapConstract.DATA_PATH);
ManagerContralFactory mcf = ManagerContralFactory.getInstance();
MetaTaskManagerInterface release = mcf.getTm();
if (release == null) {
throw new NullPointerException("MetaTaskManager is empty !!!");
}
List<TaskType> switchList = mcf.getTaskOn();
if (switchList == null || switchList.isEmpty()) {
LOG.warn("switch task is empty !!!");
return;
}
SchedulerManagerInterface schd = mcf.getStm();
if (schd == null) {
throw new NullPointerException("SchedulerManagerInterface is empty !!!");
}
RunnableTaskInterface runTask = mcf.getRt();
if (runTask == null) {
throw new NullPointerException("RunnableTaskInterface is empty !!!");
}
String typeName;
String currentTaskName;
TaskModel task;
TaskRunPattern runPattern;
int poolSize;
int sumbitSize;
String serverId = mcf.getServerId();
SumbitTaskInterface sumbitTask;
// 判断是否有恢复任务,有恢复任务则不进行创建
boolean rebalanceFlag = WatchSomeThingJob.getState(WatchSomeThingJob.RECOVERY_STATUSE);
for (TaskType taskType : switchList) {
sumbitTask = null;
try {
if (TaskType.SYSTEM_COPY_CHECK.equals(taskType)) {
continue;
}
typeName = taskType.name();
poolSize = schd.getTaskPoolSize(typeName);
sumbitSize = schd.getSumbitedTaskCount(typeName);
// 判断任务是否可以执行
boolean isRun = runTask.taskRunnable(taskType.code(), poolSize, sumbitSize);
if (!isRun) {
LOG.warn("resource is limit !!! skip {} !!!", typeName);
continue;
}
int retryCount = 3;
if (TaskType.SYSTEM_CHECK.equals(taskType) || TaskType.SYSTEM_MERGER.equals(taskType) || TaskType.SYSTEM_DELETE.equals(taskType)) {
retryCount = 0;
}
Pair<String, TaskModel> taskPair = TaskStateLifeContral.getCurrentOperationTask(release, typeName, serverId, retryCount);
if (taskPair == null) {
LOG.warn("taskType :{} taskName: null is vaild ,skiping !!!", typeName);
continue;
}
currentTaskName = taskPair.getFirst();
task = TaskStateLifeContral.changeRunTaskModel(taskPair.getSecond(), dataPath);
// 获取执行策略
runPattern = runTask.taskRunnPattern(task);
if (runPattern == null) {
LOG.warn("TaskRunPattern is null will do it once");
runPattern = new TaskRunPattern();
runPattern.setRepeateCount(1);
runPattern.setSleepTime(1000);
}
// 创建任务提交信息
if (TaskType.SYSTEM_DELETE.equals(taskType)) {
sumbitTask = createSimpleTask(task, runPattern, currentTaskName, mcf.getServerId(), SystemDeleteJob.class.getCanonicalName(), dataPath);
}
if (TaskType.SYSTEM_CHECK.equals(taskType)) {
sumbitTask = createSimpleTask(task, runPattern, currentTaskName, mcf.getServerId(), SystemCheckJob.class.getCanonicalName(), dataPath);
}
if (TaskType.USER_DELETE.equals(taskType)) {
sumbitTask = createSimpleTask(task, runPattern, currentTaskName, mcf.getServerId(), UserDeleteJob.class.getCanonicalName(), dataPath);
}
if (rebalanceFlag && TaskType.SYSTEM_CHECK.equals(taskType)) {
LOG.warn("rebalance task running !! Skip {} sumbit", taskType.name());
continue;
}
if (sumbitTask == null) {
LOG.warn("sumbit type:{}, taskName :{}, taskcontent is null", typeName, currentTaskName);
continue;
}
boolean isSumbit = schd.addTask(typeName, sumbitTask);
LOG.info("sumbit type:{}, taskName :{}, state:{}", typeName, currentTaskName, isSumbit);
if (!isSumbit) {
LOG.warn("next cycle will sumbit against type : {}, taskName : {}", typeName, currentTaskName);
continue;
}
// 更新任务状态
// 更新任务执行的位置
data.put(typeName, currentTaskName);
} catch (Exception e) {
LOG.error("{}", e);
EmailPool emailPool = EmailPool.getInstance();
MailWorker.Builder builder = MailWorker.newBuilder(emailPool.getProgramInfo());
builder.setModel(this.getClass().getSimpleName() + "模块服务发生问题");
builder.setException(e);
builder.setMessage("执行任务发生错误");
builder.setVariable(data.getWrappedMap());
emailPool.sendEmail(builder);
}
}
}
use of com.bonree.brfs.schedulers.ManagerContralFactory in project BRFS by zhangnianli.
the class WatchSomeThingJob method operation.
@Override
public void operation(JobExecutionContext context) throws Exception {
JobDataMap data = context.getJobDetail().getJobDataMap();
ManagerContralFactory mcf = ManagerContralFactory.getInstance();
String zkHost = data.getString(JobDataMapConstract.ZOOKEEPER_ADDRESS);
// 获取client
CuratorClient curatorClient = null;
try {
curatorClient = mcf.getClient();
String basePath = mcf.getZkPath().getBaseRebalancePath();
String tasksPath = basePath + Constants.SEPARATOR + Constants.TASKS_NODE;
boolean isIt = isRecovery(curatorClient, tasksPath);
// 更新map的值
StateMap.put(RECOVERY_STATUSE, isIt);
// 发生副本迁移就删除数据
if (isIt) {
WatchDog.abandonFoods();
}
} catch (Exception e) {
LOG.error("{}", e);
EmailPool emailPool = EmailPool.getInstance();
MailWorker.Builder builder = MailWorker.newBuilder(emailPool.getProgramInfo());
builder.setModel(this.getClass().getSimpleName() + "模块服务发生问题");
builder.setException(e);
builder.setMessage(mcf.getGroupName() + "(" + mcf.getServerId() + ")服务 看门狗发生错误");
builder.setVariable(data.getWrappedMap());
emailPool.sendEmail(builder);
}
}
use of com.bonree.brfs.schedulers.ManagerContralFactory in project BRFS by zhangnianli.
the class CheckCycleJob method operation.
@Override
public void operation(JobExecutionContext context) throws Exception {
LOG.info("cycle check job work !!!");
JobDataMap data = context.getJobDetail().getJobDataMap();
int day = data.getInt(JobDataMapConstract.CHECK_TIME_RANGE);
if (day <= 0) {
LOG.warn("skip cycle job!! because check time range is 0");
return;
}
ManagerContralFactory mcf = ManagerContralFactory.getInstance();
MetaTaskManagerInterface release = mcf.getTm();
StorageRegionManager snm = mcf.getSnm();
ServiceManager sm = mcf.getSm();
if (WatchSomeThingJob.getState(WatchSomeThingJob.RECOVERY_STATUSE)) {
LOG.warn("rebalance task is running !! skip check copy task ,wait next time to check");
return;
}
List services = sm.getServiceListByGroup(mcf.getGroupName());
if ((services == null) || (services.isEmpty())) {
LOG.warn("SKIP create {} task, because service is empty", TaskType.SYSTEM_COPY_CHECK);
return;
}
List<StorageRegion> snList = snm.getStorageRegionList();
if ((snList == null) || (snList.isEmpty())) {
LOG.warn("SKIP storagename list is null");
return;
}
long currentTime = System.currentTimeMillis();
long lGraDay = currentTime - currentTime % 86400000L;
long sGraDay = lGraDay - day * 86400000L;
List<StorageRegion> needSns = CopyCountCheck.filterSn(snList, services.size());
if (needSns == null || needSns.isEmpty()) {
LOG.warn("no storagename need check copy count ! ");
return;
}
Map<String, List<Long>> snTimes = collectionTimes(needSns, sGraDay, lGraDay);
if (snTimes == null || snTimes.isEmpty()) {
LOG.warn("{} - {} time, no data to check copy count", TimeUtils.formatTimeStamp(sGraDay), TimeUtils.formatTimeStamp(lGraDay));
return;
}
List<Map<String, Long>> tTimes = converTimes(snTimes);
for (Map<String, Long> sourceTimes : tTimes) {
if (sourceTimes == null || sourceTimes.isEmpty()) {
continue;
}
createSingleTask(release, needSns, services, TaskType.SYSTEM_COPY_CHECK, sourceTimes);
}
}
Aggregations