未验证 提交 336599b1 编写于 作者: R rongtong 提交者: GitHub

Merge pull request #1403 from qqeasonchen/dev_bing

[ISSUE #1400]do disk space detection in another thread
...@@ -114,6 +114,9 @@ public class DefaultMessageStore implements MessageStore { ...@@ -114,6 +114,9 @@ public class DefaultMessageStore implements MessageStore {
boolean shutDownNormal = false; boolean shutDownNormal = false;
private final ScheduledExecutorService diskCheckScheduledExecutorService =
Executors.newSingleThreadScheduledExecutor(new ThreadFactoryImpl("DiskCheckScheduledThread"));
public DefaultMessageStore(final MessageStoreConfig messageStoreConfig, final BrokerStatsManager brokerStatsManager, public DefaultMessageStore(final MessageStoreConfig messageStoreConfig, final BrokerStatsManager brokerStatsManager,
final MessageArrivingListener messageArrivingListener, final BrokerConfig brokerConfig) throws IOException { final MessageArrivingListener messageArrivingListener, final BrokerConfig brokerConfig) throws IOException {
this.messageArrivingListener = messageArrivingListener; this.messageArrivingListener = messageArrivingListener;
...@@ -293,7 +296,7 @@ public class DefaultMessageStore implements MessageStore { ...@@ -293,7 +296,7 @@ public class DefaultMessageStore implements MessageStore {
this.shutdown = true; this.shutdown = true;
this.scheduledExecutorService.shutdown(); this.scheduledExecutorService.shutdown();
this.diskCheckScheduledExecutorService.shutdown();
try { try {
Thread.sleep(1000); Thread.sleep(1000);
...@@ -1329,6 +1332,11 @@ public class DefaultMessageStore implements MessageStore { ...@@ -1329,6 +1332,11 @@ public class DefaultMessageStore implements MessageStore {
// DefaultMessageStore.this.cleanExpiredConsumerQueue(); // DefaultMessageStore.this.cleanExpiredConsumerQueue();
// } // }
// }, 1, 1, TimeUnit.HOURS); // }, 1, 1, TimeUnit.HOURS);
this.diskCheckScheduledExecutorService.scheduleAtFixedRate(new Runnable() {
public void run() {
DefaultMessageStore.this.cleanCommitLogService.isSpaceFull();
}
}, 1000L, 10000L, TimeUnit.MILLISECONDS);
} }
private void cleanFilesPeriodically() { private void cleanFilesPeriodically() {
...@@ -1727,6 +1735,30 @@ public class DefaultMessageStore implements MessageStore { ...@@ -1727,6 +1735,30 @@ public class DefaultMessageStore implements MessageStore {
public void setManualDeleteFileSeveralTimes(int manualDeleteFileSeveralTimes) { public void setManualDeleteFileSeveralTimes(int manualDeleteFileSeveralTimes) {
this.manualDeleteFileSeveralTimes = manualDeleteFileSeveralTimes; this.manualDeleteFileSeveralTimes = manualDeleteFileSeveralTimes;
} }
public boolean isSpaceFull() {
String storePathPhysic = DefaultMessageStore.this.getMessageStoreConfig().getStorePathCommitLog();
double physicRatio = UtilAll.getDiskPartitionSpaceUsedPercent(storePathPhysic);
double ratio = DefaultMessageStore.this.getMessageStoreConfig().getDiskMaxUsedSpaceRatio() / 100.0;
if (physicRatio > ratio) {
DefaultMessageStore.log.info("physic disk of commitLog used: " + physicRatio);
}
if (physicRatio > this.diskSpaceWarningLevelRatio) {
boolean diskok = DefaultMessageStore.this.runningFlags.getAndMakeDiskFull();
if (diskok) {
DefaultMessageStore.log.error("physic disk of commitLog maybe full soon, used " + physicRatio + ", so mark disk full");
}
return true;
} else {
boolean diskok = DefaultMessageStore.this.runningFlags.getAndMakeDiskOK();
if (!diskok) {
DefaultMessageStore.log.info("physic disk space of commitLog OK " + physicRatio + ", so mark disk ok");
}
return false;
}
}
} }
class CleanConsumeQueueService { class CleanConsumeQueueService {
......
...@@ -72,6 +72,43 @@ public class DefaultMessageStoreCleanFilesTest { ...@@ -72,6 +72,43 @@ public class DefaultMessageStoreCleanFilesTest {
bornHost = new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 0); bornHost = new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 0);
} }
@Test
public void testIsSpaceFullFunctionEmpty2Full() throws Exception {
String deleteWhen = "04";
// the min value of diskMaxUsedSpaceRatio.
int diskMaxUsedSpaceRatio = 1;
// used to set disk-full flag
double diskSpaceCleanForciblyRatio = 0.01D;
initMessageStore(deleteWhen, diskMaxUsedSpaceRatio, diskSpaceCleanForciblyRatio);
// build and put 55 messages, exactly one message per CommitLog file.
buildAndPutMessagesToMessageStore(msgCount);
MappedFileQueue commitLogQueue = getMappedFileQueueCommitLog();
assertEquals(fileCountCommitLog, commitLogQueue.getMappedFiles().size());
int fileCountConsumeQueue = getFileCountConsumeQueue();
MappedFileQueue consumeQueue = getMappedFileQueueConsumeQueue();
assertEquals(fileCountConsumeQueue, consumeQueue.getMappedFiles().size());
cleanCommitLogService.isSpaceFull();
assertEquals(1 << 4, messageStore.getRunningFlags().getFlagBits() & (1 << 4));
messageStore.shutdown();
messageStore.destroy();
}
@Test
public void testIsSpaceFullFunctionFull2Empty() throws Exception {
String deleteWhen = "04";
// the min value of diskMaxUsedSpaceRatio.
int diskMaxUsedSpaceRatio = 1;
//use to reset disk-full flag
double diskSpaceCleanForciblyRatio = 0.999D;
initMessageStore(deleteWhen, diskMaxUsedSpaceRatio, diskSpaceCleanForciblyRatio);
//set disk full
messageStore.getRunningFlags().getAndMakeDiskFull();
cleanCommitLogService.isSpaceFull();
assertEquals(0, messageStore.getRunningFlags().getFlagBits() & (1 << 4));
}
@Test @Test
public void testDeleteExpiredFilesByTimeUp() throws Exception { public void testDeleteExpiredFilesByTimeUp() throws Exception {
String deleteWhen = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ""; String deleteWhen = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + "";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册