package org.apache.hadoop.hbase.regionserver.memstore;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.HeapSize;
import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;
import org.apache.hadoop.hbase.regionserver.RecordScanner;
import org.apache.hadoop.hbase.regionserver.RowScanner;
import org.apache.hadoop.hbase.regionserver.UnexpectedStateException;
import java.io.IOException;
import java.util.Map;
/**
* Created by wangxiaoyi on 15/5/6.
*/
public interface PMemStore extends HeapSize{
long getFlushableSize();
/**
* Creates a snapshot of the current memstore. Snapshot must be cleared by call to
* {@link #clearSnapshot(long)}.
* @return {@link MemStoreSnapshot}
*/
PMemStoreSnapshot snapshot();
/**
* create scanner for {@link PMemStore}
* @return {@link RowScanner}
*/
RowScanner getScanner(Scan scan);
/**
* create scanner for {@link PMemStore}
* @return {@link RowScanner}
*/
RowScanner getScanner(Map<byte[], Mutation> mutations, Scan scan);
/**
* create scanner for {@link PMemStore} snapshot
* @return {@link RecordScanner}
*/
RecordScanner getSnapshotScanner(Scan scan);
/**
* Clears the current snapshot of the Memstore.
* @param id
* @throws UnexpectedStateException
* @see #snapshot()
*/
void clearSnapshot(long id) throws UnexpectedStateException;
/**
* @return Oldest timestamp of all the Mutations in the MemStore
*/
long timeOfOldestEdit();
/**
* @return Total memory occupied by this MemStore.
*/
long size();
/**
* Write a delete
* @param m
* @return approximate size of the passed Mutation
*/
long delete(final Mutation m);
long add(final Mutation m) throws IOException;
/**
* get row from the memstore
* @param row
*/
Mutation get(byte[] row);
byte[] getStartKey();
byte[] getEndKey();
int getRecordCount();
long getCurrSnapshotId();
}