Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public LedgerDirsMonitor(final ServerConfiguration conf,
this.dirsManagers = dirsManagers;
}

private void check(final LedgerDirsManager ldm) {
void check(final LedgerDirsManager ldm, boolean notifyDiskWritable) {
final ConcurrentMap<File, Float> diskUsages = ldm.getDiskUsages();
boolean someDiskFulled = false;
boolean highPriorityWritesAllowed = true;
Expand All @@ -78,6 +78,11 @@ private void check(final LedgerDirsManager ldm) {
for (File dir : writableDirs) {
try {
diskUsages.put(dir, diskChecker.checkDir(dir));
if (notifyDiskWritable) {
for (LedgerDirsListener listener : ldm.getListeners()) {
listener.diskWritable(dir);
}
}
} catch (DiskErrorException e) {
LOG.error("Ledger directory {} failed on disk checking : ", dir, e);
// Notify disk failure to all listeners
Expand Down Expand Up @@ -193,7 +198,11 @@ private void check(final LedgerDirsManager ldm) {
}

private void check() {
dirsManagers.forEach(this::check);
check(false);
}

private void check(boolean notifyDiskWritable) {
dirsManagers.forEach(ldm -> check(ldm, notifyDiskWritable));
}

/**
Expand All @@ -207,6 +216,7 @@ private void check() {
*/
public void init() throws DiskErrorException, NoWritableLedgerDirException {
checkDirs();
check(true);
}

// start the daemon for disk monitoring
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,35 @@ public void testValidateLwmThreshold() {
new LedgerDirsMonitor(configuration, mockDiskChecker, Collections.singletonList(dirsManager));
}

@Test
public void testBookieStartWithReadonlyAndDiskIsLowerThanThreshold() throws Exception {
File tmpDir1 = createTempDir("bkTest", ".dir");
File curDir1 = BookieImpl.getCurrentDirectory(tmpDir1);
BookieImpl.checkDirectoryStructure(curDir1);

final ServerConfiguration configuration = TestBKConfiguration.newServerConfiguration();
configuration.setDiskUsageThreshold(0.95f);
configuration.setDiskUsageWarnThreshold(0.80f);
configuration.setDiskLowWaterMarkUsageThreshold(0.80f);
configuration.setLedgerDirNames(new String[]{tmpDir1.toString()});

MockDiskChecker diskChecker = new MockDiskChecker(
configuration.getDiskUsageThreshold(), configuration.getDiskUsageWarnThreshold());

LedgerDirsManager ldm = new LedgerDirsManager(
configuration, configuration.getLedgerDirs(), diskChecker, statsLogger);
LedgerDirsMonitor ldmMonitor = new LedgerDirsMonitor(
configuration, diskChecker, Collections.singletonList(ldm));
MockLedgerDirsListener mockLedgerDirsListener = new MockLedgerDirsListener();
mockLedgerDirsListener.readOnly = true;
ldm.addLedgerDirsListener(mockLedgerDirsListener);
HashMap<File, Float> usageMap = new HashMap<>();
usageMap.put(curDir1, 0.75f);
diskChecker.setUsageMap(usageMap);
ldmMonitor.init();
assertFalse(mockLedgerDirsListener.readOnly);
}

private void setUsageAndThenVerify(File dir1, float dir1Usage, File dir2, float dir2Usage,
MockDiskChecker mockDiskChecker, MockLedgerDirsListener mockLedgerDirsListener, boolean verifyReadOnly)
throws InterruptedException {
Expand Down