com.github.ltsopensource.queue.mongo.MongoExecutingJobQueue Maven / Gradle / Ivy
package com.github.ltsopensource.queue.mongo;
import com.github.ltsopensource.core.cluster.Config;
import com.github.ltsopensource.core.commons.utils.CollectionUtils;
import com.github.ltsopensource.core.support.JobQueueUtils;
import com.github.ltsopensource.queue.ExecutingJobQueue;
import com.github.ltsopensource.queue.domain.JobPo;
import com.github.ltsopensource.store.jdbc.exception.DupEntryException;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.DuplicateKeyException;
import com.mongodb.WriteResult;
import org.mongodb.morphia.query.Query;
import java.util.List;
/**
* @author Robert HG ([email protected]) on 5/28/15.
*/
public class MongoExecutingJobQueue extends AbstractMongoJobQueue implements ExecutingJobQueue {
public MongoExecutingJobQueue(Config config) {
super(config);
// table name (Collection name) for single table
setTableName(JobQueueUtils.EXECUTING_JOB_QUEUE);
// create table
DBCollection dbCollection = template.getCollection();
List indexInfo = dbCollection.getIndexInfo();
// create index if not exist
if (CollectionUtils.sizeOf(indexInfo) <= 1) {
template.ensureIndex("idx_jobId", "jobId", true, true);
template.ensureIndex("idx_taskId_taskTrackerNodeGroup", "taskId, taskTrackerNodeGroup", true, true);
template.ensureIndex("idx_realTaskId_taskTrackerNodeGroup", "realTaskId, taskTrackerNodeGroup");
template.ensureIndex("idx_jobType", "jobType");
template.ensureIndex("idx_taskTrackerIdentity", "taskTrackerIdentity");
template.ensureIndex("idx_gmtCreated", "gmtCreated");
}
}
@Override
protected String getTargetTable(String taskTrackerNodeGroup) {
return JobQueueUtils.EXECUTING_JOB_QUEUE;
}
@Override
public boolean add(JobPo jobPo) {
try {
template.save(jobPo);
} catch (DuplicateKeyException e) {
// already exist
throw new DupEntryException(e);
}
return true;
}
@Override
public boolean remove(String jobId) {
Query query = template.createQuery(JobPo.class);
query.field("jobId").equal(jobId);
WriteResult wr = template.delete(query);
return wr.getN() == 1;
}
@Override
public List getJobs(String taskTrackerIdentity) {
Query query = template.createQuery(JobPo.class);
query.field("taskTrackerIdentity").equal(taskTrackerIdentity);
return query.asList();
}
@Override
public List getDeadJobs(long deadline) {
Query query = template.createQuery(JobPo.class);
query.filter("gmtCreated < ", deadline);
return query.asList();
}
@Override
public JobPo getJob(String taskTrackerNodeGroup, String taskId) {
Query query = template.createQuery(JobPo.class);
query.field("taskId").equal(taskId).
field("taskTrackerNodeGroup").equal(taskTrackerNodeGroup);
return query.get();
}
@Override
public JobPo getJob(String jobId) {
Query query = template.createQuery(JobPo.class);
query.field("jobId").equal(jobId);
return query.get();
}
}