@Override public void enterCritical(int path) { if (analyzer.isMeasuring()) { measures[path].enterCritical(); } }
@Test public void testAction() throws Exception { analyzer = new CriticalAnalyzerImpl().setTimeout(100, TimeUnit.MILLISECONDS).setCheckTime(50, TimeUnit.MILLISECONDS); analyzer.add(new CriticalComponent() { @Override public boolean isExpired(long timeout) { return true; } }); CountDownLatch latch = new CountDownLatch(1); analyzer.start(); analyzer.addAction((CriticalComponent comp) -> { System.out.println("component " + comp + " received"); latch.countDown(); }); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); analyzer.stop(); }
protected AbstractSequentialFileFactory(final File journalDir, final boolean buffered, final int bufferSize, final int bufferTimeout, final int maxIO, final boolean logRates, final IOCriticalErrorListener criticalErrorListener, CriticalAnalyzer criticalAnalyzer) { this.journalDir = journalDir; if (criticalAnalyzer == null) { criticalAnalyzer = EmptyCriticalAnalyzer.getInstance(); } this.criticalAnalyzer = criticalAnalyzer; if (buffered && bufferTimeout > 0) { timedBuffer = new TimedBuffer(criticalAnalyzer, bufferSize, bufferTimeout, logRates); criticalAnalyzer.add(timedBuffer); } else { timedBuffer = null; } this.bufferSize = bufferSize; this.bufferTimeout = bufferTimeout; this.critialErrorListener = criticalErrorListener; this.maxIO = maxIO; }
analyzer.clear(); analyzer.setCheckTime(configuration.getCriticalAnalyzerCheckPeriod(), TimeUnit.MILLISECONDS).setTimeout(configuration.getCriticalAnalyzerTimeout(), TimeUnit.MILLISECONDS); analyzer.start(); analyzer.addAction(criticalAction);
public void leaveCritical() { if (logger.isTraceEnabled()) { CriticalAnalyzer analyzer = component != null ? component.getCriticalAnalyzer() : null; if (analyzer != null) { long nanoTimeout = analyzer.getTimeoutNanoSeconds(); if (isExpired(nanoTimeout)) { logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, leaving at", new Exception("entered")); logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, entered at", traceEnter); } } traceEnter = null; } TIME_LEFT_UPDATER.lazySet(this, System.nanoTime()); }
@Test public void testEnterNoLeaveNoExpire() throws Exception { analyzer = new CriticalAnalyzerImpl().setTimeout(10, TimeUnit.MILLISECONDS).setCheckTime(5, TimeUnit.MILLISECONDS); CriticalComponent component = new CriticalComponentImpl(analyzer, 2); component.enterCritical(0); Assert.assertFalse(component.isExpired(TimeUnit.MINUTES.toNanos(1))); analyzer.stop(); }
@After public void tearDown() throws Exception { if (analyzer != null) { analyzer.stop(); } }
@Test public void testNegative() throws Exception { analyzer = new CriticalAnalyzerImpl().setTimeout(10, TimeUnit.MILLISECONDS).setCheckTime(5, TimeUnit.MILLISECONDS); CriticalComponent component = new CriticalComponentImpl(analyzer, 1); analyzer.add(component); component.enterCritical(0); component.leaveCritical(0); CountDownLatch latch = new CountDownLatch(1); analyzer.start(); analyzer.addAction((CriticalComponent comp) -> { System.out.println("component " + comp + " received"); latch.countDown(); }); Assert.assertFalse(latch.await(100, TimeUnit.MILLISECONDS)); analyzer.stop(); }
protected AbstractSequentialFileFactory(final File journalDir, final boolean buffered, final int bufferSize, final int bufferTimeout, final int maxIO, final boolean logRates, final IOCriticalErrorListener criticalErrorListener, CriticalAnalyzer criticalAnalyzer) { this.journalDir = journalDir; if (criticalAnalyzer == null) { criticalAnalyzer = EmptyCriticalAnalyzer.getInstance(); } this.criticalAnalyzer = criticalAnalyzer; if (buffered && bufferTimeout > 0) { timedBuffer = new TimedBuffer(criticalAnalyzer, bufferSize, bufferTimeout, logRates); criticalAnalyzer.add(timedBuffer); } else { timedBuffer = null; } this.bufferSize = bufferSize; this.bufferTimeout = bufferTimeout; this.critialErrorListener = criticalErrorListener; this.maxIO = maxIO; }
public void leaveCritical() { if (logger.isTraceEnabled()) { CriticalAnalyzer analyzer = component != null ? component.getCriticalAnalyzer() : null; if (analyzer != null) { long nanoTimeout = analyzer.getTimeoutNanoSeconds(); if (isExpired(nanoTimeout)) { logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, leaving at", new Exception("entered")); logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, entered at", traceEnter); } } traceEnter = null; } TIME_LEFT_UPDATER.lazySet(this, System.nanoTime()); }
@Test public void testEnterNoLeaveExpire() throws Exception { analyzer = new CriticalAnalyzerImpl().setTimeout(10, TimeUnit.MILLISECONDS).setCheckTime(5, TimeUnit.MILLISECONDS); CriticalComponent component = new CriticalComponentImpl(analyzer, 2); component.enterCritical(0); Thread.sleep(50); Assert.assertTrue(component.isExpired(0)); analyzer.stop(); }
this.analyzer.stop(); } catch (Exception e) { logger.warn(e.getMessage(), e);
@Override public void leaveCritical(int path) { if (analyzer.isMeasuring()) { measures[path].leaveCritical(); } }
@Test public void testActionOnImpl() throws Exception { analyzer = new CriticalAnalyzerImpl().setTimeout(10, TimeUnit.MILLISECONDS).setCheckTime(5, TimeUnit.MILLISECONDS); CriticalComponent component = new CriticalComponentImpl(analyzer, 2); analyzer.add(component); component.enterCritical(0); component.leaveCritical(0); component.enterCritical(1); CountDownLatch latch = new CountDownLatch(1); analyzer.start(); analyzer.addAction((CriticalComponent comp) -> { System.out.println("component " + comp + " received"); latch.countDown(); }); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); analyzer.stop(); }
/** * This method is protected as it may be used as a hook for creating a custom storage manager (on tests for instance) */ protected StorageManager createStorageManager() { if (configuration.isPersistenceEnabled()) { if (configuration.getStoreConfiguration() != null && configuration.getStoreConfiguration().getStoreType() == StoreConfiguration.StoreType.DATABASE) { JDBCJournalStorageManager journal = new JDBCJournalStorageManager(configuration, getCriticalAnalyzer(), getScheduledPool(), executorFactory, ioExecutorFactory, shutdownOnCriticalIO); this.getCriticalAnalyzer().add(journal); return journal; } else { // Default to File Based Storage Manager, (Legacy default configuration). JournalStorageManager journal = new JournalStorageManager(configuration, getCriticalAnalyzer(), executorFactory, scheduledPool, ioExecutorFactory, shutdownOnCriticalIO); this.getCriticalAnalyzer().add(journal); return journal; } } return new NullStorageManager(); }
public void leaveCritical() { if (logger.isTraceEnabled()) { CriticalAnalyzer analyzer = component != null ? component.getCriticalAnalyzer() : null; if (analyzer != null) { long nanoTimeout = analyzer.getTimeoutNanoSeconds(); if (isExpired(nanoTimeout)) { logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, leaving at", new Exception("entered")); logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, entered at", traceEnter); } } traceEnter = null; } TIME_LEFT_UPDATER.lazySet(this, System.nanoTime()); }
public CriticalComponentImpl(CriticalAnalyzer analyzer, int numberOfPaths) { if (analyzer == null) { analyzer = EmptyCriticalAnalyzer.getInstance(); } this.analyzer = analyzer; if (analyzer.isMeasuring()) { measures = new CriticalMeasure[numberOfPaths]; for (int i = 0; i < numberOfPaths; i++) { measures[i] = new CriticalMeasure(); } } else { measures = null; } }
@Override protected StorageManager createStorageManager() { JournalStorageManager storageManager = new JournalStorageManager(conf, getCriticalAnalyzer(), executorFactory, scheduledPool, ioExecutorFactory, shutdownOnCriticalIO) { @Override public void readLock() { super.readLock(); if (blocked.get()) { while (true) { try { System.out.println("Blocking forever"); Thread.sleep(1000); } catch (Throwable ignored) { } } } } @Override public void storeMessage(Message message) throws Exception { super.storeMessage(message); blocked.set(true); } }; this.getCriticalAnalyzer().add(storageManager); return storageManager; }
public void leaveCritical() { if (logger.isTraceEnabled()) { CriticalAnalyzer analyzer = component != null ? component.getCriticalAnalyzer() : null; if (analyzer != null) { long nanoTimeout = analyzer.getTimeoutNanoSeconds(); if (isExpired(nanoTimeout)) { logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, leaving at", new Exception("entered")); logger.trace("Path " + id + " on component " + getComponentName() + " is taking too long, entered at", traceEnter); } } traceEnter = null; } TIME_LEFT_UPDATER.lazySet(this, System.nanoTime()); }
@Override public void leaveCritical(int path) { if (analyzer.isMeasuring()) { measures[path].leaveCritical(); } }