long nanosRemaining = TimeUnit.MILLISECONDS.toNanos(time); final long endTime = System.nanoTime() + nanosRemaining; boolean done = diskStore.checkAndClearForceFlush() || diskStore.checkAsyncItemLimit(); while (!done && nanosRemaining > 0) { TimeUnit.NANOSECONDS.timedWait(diskStore.getAsyncMonitor(), nanosRemaining); done = diskStore.checkAndClearForceFlush() || diskStore.checkAsyncItemLimit(); if (!done) { nanosRemaining = endTime - System.nanoTime(); boolean done = diskStore.checkAndClearForceFlush() || diskStore.checkAsyncItemLimit(); while (!done) { diskStore.getAsyncMonitor().wait(); done = diskStore.checkAndClearForceFlush() || diskStore.checkAsyncItemLimit(); final long endTime = System.nanoTime() + nanosRemaining; synchronized (diskStore.getAsyncMonitor()) { boolean done = diskStore.checkAndClearForceFlush(); while (!done && nanosRemaining > 0) { TimeUnit.NANOSECONDS.timedWait(diskStore.getAsyncMonitor(), nanosRemaining); done = diskStore.checkAndClearForceFlush(); if (!done) { nanosRemaining = endTime - System.nanoTime(); boolean done = diskStore.checkAndClearForceFlush(); while (!done) { diskStore.getAsyncMonitor().wait(); done = diskStore.checkAndClearForceFlush();
@Before public void setup() { diskStoreImpl = mock(DiskStoreImpl.class); diskStoreStats = mock(DiskStoreStats.class); PersistentOplogSet persistentOpLogSet = mock(PersistentOplogSet.class); when(diskStoreImpl.getAsyncMonitor()).thenReturn(new Object()); when(diskStoreImpl.getForceFlushCount()).thenReturn(new AtomicInteger(1)); when(diskStoreImpl.fillDrainList()).thenReturn(DRAIN_LIST_SIZE).thenReturn(0); when(diskStoreImpl.getDrainList()).thenReturn(new ArrayList()); when(diskStoreImpl.getPersistentOplogs()).thenReturn(persistentOpLogSet); when(diskStoreImpl.getStats()).thenReturn(diskStoreStats); when(diskStoreImpl.checkAndClearForceFlush()).thenReturn(true); when(diskStoreImpl.isStopFlusher()).thenReturn(false).thenReturn(true); flusherThread = new DiskStoreImpl.FlusherThread(diskStoreImpl); }