/* * Copyright 1999-2015 dangdang.com. * <p> * 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. * </p> */ package com.dangdang.ddframe.job.lite.internal.instance; import com.dangdang.ddframe.job.lite.api.strategy.JobInstance; import com.dangdang.ddframe.job.lite.internal.server.ServerService; import com.dangdang.ddframe.job.lite.internal.storage.JobNodeStorage; import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter; import java.util.LinkedList; import java.util.List; /** * 作业运行实例服务. * * @author zhangliang */ public final class InstanceService { private final JobNodeStorage jobNodeStorage; private final InstanceNode instanceNode; private final ServerService serverService; public InstanceService(final CoordinatorRegistryCenter regCenter, final String jobName) { jobNodeStorage = new JobNodeStorage(regCenter, jobName); instanceNode = new InstanceNode(jobName); serverService = new ServerService(regCenter, jobName); } /** * 持久化作业运行实例上线相关信息. */ public void persistOnline() { jobNodeStorage.fillEphemeralJobNode(instanceNode.getLocalInstanceNode(), ""); } /** * 删除作业运行状态. */ public void removeInstance() { jobNodeStorage.removeJobNodeIfExisted(instanceNode.getLocalInstanceNode()); } /** * 清理作业触发标记. */ public void clearTriggerFlag() { jobNodeStorage.updateJobNode(instanceNode.getLocalInstanceNode(), ""); } /** * 获取可分片的作业运行实例. * * @return 可分片的作业运行实例 */ public List<JobInstance> getAvailableJobInstances() { List<JobInstance> result = new LinkedList<>(); for (String each : jobNodeStorage.getJobNodeChildrenKeys(InstanceNode.ROOT)) { JobInstance jobInstance = new JobInstance(each); if (serverService.isEnableServer(jobInstance.getIp())) { result.add(new JobInstance(each)); } } return result; } /** * 判断当前作业运行实例的节点是否仍然存在. * * @return 当前作业运行实例的节点是否仍然存在 */ public boolean isLocalJobInstanceExisted() { return jobNodeStorage.isJobNodeExisted(instanceNode.getLocalInstanceNode()); } }