package com.brucezee.jspider.berkeley;
import com.brucezee.jspider.Request;
import com.brucezee.jspider.Task;
import com.brucezee.jspider.monitor.SchedulerMonitor;
import com.brucezee.jspider.scheduler.Scheduler;
import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 基于BDB文件数据库的请求任务调度器
* Created by brucezee on 2017/1/13.
*/
public class BdbPersistentScheduler implements Scheduler, SchedulerMonitor, Closeable {
private BdbPersistentQueue<Request> queue; //基于BDB实现的队列
private AtomicInteger count = new AtomicInteger(0); //计数器
/**
* 构造方法
* @param queue 基于BDB实现的队列
*/
public BdbPersistentScheduler(BdbPersistentQueue<Request> queue) {
this.queue = queue;
}
/**
* 构造方法
* @param dbDir 数据库文件路径
* @param dbName 数据库名称
*/
public BdbPersistentScheduler(String dbDir, String dbName) {
this(new BdbPersistentQueue(dbDir, dbName, Request.class));
}
@Override
public boolean push(Task task, Request request) {
queue.add(request);
count.incrementAndGet();
return true;
}
@Override
public Request poll(Task task) {
return queue.poll();
}
@Override
public int getTotalCount(Task task) {
return count.get();
}
@Override
public int getLeftCount(Task task) {
return queue.size();
}
@Override
public void close() throws IOException {
queue.close();
}
}