content: package com.alimama.mdrill.solr.hbaserealtime;
  
  import java.util.Map;
  
  import org.apache.solr.common.SolrInputDocument;
  
  
  public class MdrillRealtime {
  	
  	public static interface MdrillRealtimeClient {
  	
  		public void open(String tablename,short shardcount,Map<?,?> params) throws Exception;
  		public void close()  throws Exception;
  
  		/**
  		 * 有则更新无则添加,每次调用都会产生一个递增的Oplog，将来在MdrillRealtimeOpLogs中可以获取
  		 * inc 适用于计数的更新，要保证计数的原子操作,每次调用都会产生一个递增的Oplog，将来在MdrillRealtimeOpLogs中可以获取
  		 */
  		public void updateSet(short shard,String partion,long higo_uuid,MdrillInputDocument set,MdrillInputDocument inc,MdrillInputDocument del)  throws Exception;
  		
  		
  	}
  	
  
  	
  	public static interface MdrillRealtimeOpLogs{
  	
  		public void open(String tablename,int shardcount,int shard,String partion,Map<?,?> params) throws Exception;
  		
  		public void close() throws Exception;
  
  		
  		/**
  		 * 获取下一个大于pos位置的document, 如果服务器出现异常，数据丢了，可以从指定消费的位置继续读取
  		 * @param pos
  		 * @return
  		 */
  		public Oplog getNext(long pos) throws Exception;
  		
  		/**
  		 * 获取插入的值
  		 */
  		public MdrillDocument get(long higo_uuid);
  	}
  	
  	public static interface Oplog{
  		//单个shard内递增，他在单个shard内不能重复很关键
  		public byte[] getPos() ;
  		//对应MdrillRealtimeClient中的全局唯一的id,根据这个ID，可以通过client获取到SolrInputDocument
  		public long getHigoUuid();
  		//如果是删除操作，该项值返回true
  	}
  	
  	public static interface MdrillInputDocument{
  		public Map<String,Object> getMap();
  
  	}
  	
  	public static interface MdrillDocument
  	{
  		public long getPos() ;
  		public MdrillInputDocument getDoc();
  	}
  }
  