package com.alimama.mdrill.solr.hbaserealtime.queue.client;
import java.io.IOException;
import java.util.zip.CRC32;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class MdrillQueue {
public static byte[] FAMILY = Bytes.toBytes("mdrillQueueFamily");
public static byte[] FAMILYColumn = Bytes.toBytes("mdrillQueueCol");
static final Log LOG = LogFactory.getLog(MdrillQueue.class);
private byte[] queueName;
private HTable table;
public MdrillQueue(Configuration conf, final String queueName)
throws IOException {
this(conf, Bytes.toBytes(queueName));
}
public MdrillQueue(Configuration conf, final byte[] queueName) throws IOException {
Configuration realConf = HBaseConfiguration.create();
HBaseConfiguration.merge(realConf, conf);
this.queueName = queueName;
table = new HTable(realConf, queueName);
}
public void put(Message message) throws IOException {
Put put = new Put(MessageID.toBytes(message.getId()));
put.add(FAMILY, FAMILYColumn, message.getValue());
table.put(put);
}
public ShardScanner getShardScanner(short shard,String partion, byte[] last) throws IOException {
CRC32 crc32 = new CRC32();
crc32.update(partion.getBytes());
return new ShardScanner(table.getConfiguration(), queueName, shard, crc32.getValue(),last);
}
public void close() throws IOException {
table.close();
}
}