private boolean tryRollWriter() { try { return rollWriter(); } catch (IOException e) { LOG.warn("Unable to roll the log", e); return false; } }
@VisibleForTesting public boolean rollWriterForTesting() throws IOException { lock.lock(); try { return rollWriter(); } finally { lock.unlock(); } }
private boolean rollWriterWithRetries() { for (int i = 0; i < rollRetries && isRunning(); ++i) { if (i > 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i); try { if (rollWriter()) { return true; } } catch (IOException e) { LOG.warn("Unable to roll the log, attempt=" + (i + 1), e); } } LOG.error(HBaseMarkers.FATAL, "Unable to roll the log"); return false; }
private boolean rollWriter() throws IOException { if (!isRunning()) { return false; } // Create new state-log if (!rollWriter(flushLogId + 1)) { LOG.warn("someone else has already created log {}", flushLogId); return false; } // We have the lease on the log, // but we should check if someone else has created new files if (getMaxLogId(getLogFiles()) > flushLogId) { LOG.warn("Someone else created new logs. Expected maxLogId < {}", flushLogId); logs.getLast().removeFile(this.walArchiveDir); return false; } // We have the lease on the log return true; }
if (!rollWriter(flushLogId + 1)) {
@Test public void testLogFileAleadExists() throws IOException { final boolean[] tested = {false}; WALProcedureStore mStore = Mockito.spy(procStore); Answer<Boolean> ans = new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { long logId = ((Long) invocationOnMock.getArgument(0)).longValue(); switch ((int) logId) { case 2: // Create a file so that real rollWriter() runs into file exists condition Path logFilePath = mStore.getLogFilePath(logId); mStore.getFileSystem().create(logFilePath); break; case 3: // Success only when we retry with logId 3 tested[0] = true; default: break; } return (Boolean) invocationOnMock.callRealMethod(); } }; // First time Store has one log file, next id will be 2 Mockito.doAnswer(ans).when(mStore).rollWriter(2); // next time its 3 Mockito.doAnswer(ans).when(mStore).rollWriter(3); mStore.recoverLease(); assertTrue(tested[0]); }
private boolean tryRollWriter() { try { return rollWriter(); } catch (IOException e) { LOG.warn("Unable to roll the log", e); return false; } }
private boolean tryRollWriter() { try { return rollWriter(); } catch (IOException e) { LOG.warn("Unable to roll the log", e); return false; } }
private boolean tryRollWriter() { try { return rollWriter(); } catch (IOException e) { LOG.warn("Unable to roll the log", e); return false; } }
@VisibleForTesting protected boolean rollWriterForTesting() throws IOException { lock.lock(); try { return rollWriter(); } finally { lock.unlock(); } }
@VisibleForTesting public boolean rollWriterForTesting() throws IOException { lock.lock(); try { return rollWriter(); } finally { lock.unlock(); } }
@VisibleForTesting protected boolean rollWriterForTesting() throws IOException { lock.lock(); try { return rollWriter(); } finally { lock.unlock(); } }
private boolean rollWriterWithRetries() { for (int i = 0; i < rollRetries && isRunning(); ++i) { if (i > 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i); try { if (rollWriter()) { return true; } } catch (IOException e) { LOG.warn("Unable to roll the log, attempt=" + (i + 1), e); } } LOG.error(HBaseMarkers.FATAL, "Unable to roll the log"); return false; }
private boolean rollWriterWithRetries() { for (int i = 0; i < rollRetries && isRunning(); ++i) { if (i > 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i); try { if (rollWriter()) { return true; } } catch (IOException e) { LOG.warn("Unable to roll the log, attempt=" + (i + 1), e); } } LOG.error(HBaseMarkers.FATAL, "Unable to roll the log"); return false; }
private boolean rollWriter() throws IOException { if (!isRunning()) return false; // Create new state-log if (!rollWriter(flushLogId + 1)) { LOG.warn("someone else has already created log " + flushLogId); return false; } // We have the lease on the log, // but we should check if someone else has created new files if (getMaxLogId(getLogFiles()) > flushLogId) { LOG.warn("Someone else created new logs. Expected maxLogId < " + flushLogId); logs.getLast().removeFile(this.walArchiveDir); return false; } // We have the lease on the log return true; }
private boolean rollWriter() throws IOException { if (!isRunning()) { return false; } // Create new state-log if (!rollWriter(flushLogId + 1)) { LOG.warn("someone else has already created log {}", flushLogId); return false; } // We have the lease on the log, // but we should check if someone else has created new files if (getMaxLogId(getLogFiles()) > flushLogId) { LOG.warn("Someone else created new logs. Expected maxLogId < {}", flushLogId); logs.getLast().removeFile(this.walArchiveDir); return false; } // We have the lease on the log return true; }
private boolean rollWriterOrDie() { for (int i = 0; i < rollRetries; ++i) { if (i > 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i); try { if (rollWriter()) { return true; } } catch (IOException e) { LOG.warn("Unable to roll the log, attempt=" + (i + 1), e); } } LOG.fatal("Unable to roll the log"); sendAbortProcessSignal(); throw new RuntimeException("unable to roll the log"); }
private boolean rollWriter() throws IOException { // Create new state-log if (!rollWriter(flushLogId + 1)) { LOG.warn("someone else has already created log " + flushLogId); return false; } // We have the lease on the log, // but we should check if someone else has created new files if (getMaxLogId(getLogFiles()) > flushLogId) { LOG.warn("Someone else created new logs. Expected maxLogId < " + flushLogId); logs.getLast().removeFile(); return false; } // We have the lease on the log return true; }
@Test public void testLogFileAleadExists() throws IOException { final boolean[] tested = {false}; WALProcedureStore mStore = Mockito.spy(procStore); Answer<Boolean> ans = new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { long logId = ((Long) invocationOnMock.getArgument(0)).longValue(); switch ((int) logId) { case 2: // Create a file so that real rollWriter() runs into file exists condition Path logFilePath = mStore.getLogFilePath(logId); mStore.getFileSystem().create(logFilePath); break; case 3: // Success only when we retry with logId 3 tested[0] = true; default: break; } return (Boolean) invocationOnMock.callRealMethod(); } }; // First time Store has one log file, next id will be 2 Mockito.doAnswer(ans).when(mStore).rollWriter(2); // next time its 3 Mockito.doAnswer(ans).when(mStore).rollWriter(3); mStore.recoverLease(); assertTrue(tested[0]); }
@Test public void testLogFileAleadExists() throws IOException { final boolean[] tested = {false}; WALProcedureStore mStore = Mockito.spy(procStore); Answer<Boolean> ans = new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { long logId = ((Long) invocationOnMock.getArgument(0)).longValue(); switch ((int) logId) { case 2: // Create a file so that real rollWriter() runs into file exists condition Path logFilePath = mStore.getLogFilePath(logId); mStore.getFileSystem().create(logFilePath); break; case 3: // Success only when we retry with logId 3 tested[0] = true; default: break; } return (Boolean) invocationOnMock.callRealMethod(); } }; // First time Store has one log file, next id will be 2 Mockito.doAnswer(ans).when(mStore).rollWriter(2); // next time its 3 Mockito.doAnswer(ans).when(mStore).rollWriter(3); mStore.recoverLease(); assertTrue(tested[0]); }