/**
* $Id: RunningFlags.java 1831 2013-05-16 01:39:51Z shijia.wxr $
*/
package com.alibaba.rocketmq.store;
/**
* �洢ģ�����й��̵�״̬λ
*
* @author vintage.wang@gmail.com shijia.wxr@taobao.com
*/
public class RunningFlags {
// ��ֹ��Ȩ��
private static final int NotReadableBit = 1;
// ��ֹдȨ��
private static final int NotWriteableBit = 1 << 1;
// �������Ƿ�������
private static final int WriteLogicsQueueErrorBit = 1 << 2;
// �����ļ��Ƿ�������
private static final int WriteIndexFileErrorBit = 1 << 3;
// ���̿ռ䲻��
private static final int DiskFullBit = 1 << 4;
private volatile int flagBits = 0;
public int getFlagBits() {
return flagBits;
}
public RunningFlags() {
}
public boolean isReadable() {
if ((this.flagBits & NotReadableBit) == 0) {
return true;
}
return false;
}
public boolean isWriteable() {
if ((this.flagBits & (NotWriteableBit | WriteLogicsQueueErrorBit | DiskFullBit | WriteIndexFileErrorBit)) == 0) {
return true;
}
return false;
}
public boolean getAndMakeReadable() {
boolean result = this.isReadable();
if (!result) {
this.flagBits &= ~NotReadableBit;
}
return result;
}
public boolean getAndMakeNotReadable() {
boolean result = this.isReadable();
if (result) {
this.flagBits |= NotReadableBit;
}
return result;
}
public boolean getAndMakeWriteable() {
boolean result = this.isWriteable();
if (!result) {
this.flagBits &= ~NotWriteableBit;
}
return result;
}
public boolean getAndMakeNotWriteable() {
boolean result = this.isWriteable();
if (result) {
this.flagBits |= NotWriteableBit;
}
return result;
}
public void makeLogicsQueueError() {
this.flagBits |= WriteLogicsQueueErrorBit;
}
public boolean isLogicsQueueError() {
if ((this.flagBits & WriteLogicsQueueErrorBit) == WriteLogicsQueueErrorBit) {
return true;
}
return false;
}
public void makeIndexFileError() {
this.flagBits |= WriteIndexFileErrorBit;
}
public boolean isIndexFileError() {
if ((this.flagBits & WriteIndexFileErrorBit) == WriteIndexFileErrorBit) {
return true;
}
return false;
}
/**
* ����Disk�Ƿ�����
*/
public boolean getAndMakeDiskFull() {
boolean result = !((this.flagBits & DiskFullBit) == DiskFullBit);
this.flagBits |= DiskFullBit;
return result;
}
/**
* ����Disk�Ƿ�����
*/
public boolean getAndMakeDiskOK() {
boolean result = !((this.flagBits & DiskFullBit) == DiskFullBit);
this.flagBits &= ~DiskFullBit;
return result;
}
}