/**
* $Id: MessageStore.java 1831 2013-05-16 01:39:51Z shijia.wxr $
*/
package com.alibaba.rocketmq.store;
import java.util.HashMap;
import com.alibaba.rocketmq.common.MessageExt;
import com.alibaba.rocketmq.common.protocol.heartbeat.SubscriptionData;
/**
* �洢������ṩ�Ľӿ�
*
* @author vintage.wang@gmail.com shijia.wxr@taobao.com
*/
public interface MessageStore {
/**
* ����ʱ����������
*/
public boolean load();
/**
* ��������
*/
public void start() throws Exception;
/**
* �رշ���
*/
public void shutdown();
/**
* ɾ�������ļ�����Ԫ���Ի�ʹ��
*/
public void destroy();
/**
* �洢��Ϣ
*/
public PutMessageResult putMessage(final MessageExtBrokerInner msg);
/**
* ��ȡ��Ϣ�����typesΪnull����������
*/
public GetMessageResult getMessage(final String topic, final int queueId, final long offset,
final int maxMsgNums, final SubscriptionData subscriptionData);
/**
* ��ȡָ���������Offset ������в����ڣ�����-1
*/
public long getMaxOffsetInQuque(final String topic, final int queueId);
/**
* ��ȡָ��������СOffset ������в����ڣ�����-1
*/
public long getMinOffsetInQuque(final String topic, final int queueId);
/**
* ������Ϣʱ���ȡij�������ж�Ӧ��offset 1�����ָ��ʱ�䣨����֮ǰ֮���ж�Ӧ����Ϣ�����ȡ�����ʱ�������offset������ѡ��֮ǰ��
* 2�����ָ��ʱ����Ӧ��Ϣ����0
*/
public long getOffsetInQueueByTime(final String topic, final int queueId, final long timestamp);
/**
* ͨ���������Offset����ѯ��Ϣ�� �������������null
*/
public MessageExt lookMessageByOffset(final long phyOffset);
/**
* ͨ���������Offset����ѯ��Ϣ�� �������������null
*/
public SelectMapedBufferResult selectOneMessageByOffset(final long phyOffset);
/**
* ��ȡ����ʱͳ������
*/
public String getRunningDataInfo();
/**
* ��ȡ����ʱͳ������
*/
public HashMap<String, String> getRuntimeInfo();
/**
* ��ȡ����������offset
*/
public long getMaxPhyOffset();
/**
* ��ȡ�������������Ϣʱ��
*/
public long getEarliestMessageTime(final String topic, final int queueId);
/**
* ��ȡ�����е���Ϣ����
*/
public long getMessageTotalInQueue(final String topic, final int queueId);
/**
* ���ݸ���ʹ�ã���ȡCommitLog����
*/
public SelectMapedBufferResult getCommitLogData(final long offset);
/**
* ���ݸ���ʹ�ã���CommitLog�����ݣ����ַ�������Consume Queue
*/
public boolean appendToCommitLog(final long startOffset, final byte[] data);
/**
* �ֶ�����ɾ���ļ�
*/
public void excuteDeleteFilesManualy();
/**
* ������ϢKey��ѯ��Ϣ
*/
public QueryMessageResult queryMessage(final String topic, final String key, final int maxNum,
final long begin, final long end);
public void updateMasterAddress(final String newAddr);
public long now();
}