/** * @see Sequencer#isAvailable(long) */ @Override public boolean isAvailable(long sequence) { return sequence <= cursor.get(); }
@Override public long getCursor() { return dependentSequence.get(); }
/** * @see Sequencer#getCursor() */ @Override public final long getCursor() { return cursor.get(); }
@Override public String toString() { return Long.toString(get()); } }
/** * Gets the sequence value for the specified event handlers. * * @param b1 eventHandler to get the sequence for. * @return eventHandler's sequence */ public long getSequenceValueFor(final EventHandler<T> b1) { return consumerRepository.getSequenceFor(b1).get(); }
/** * @see Sequencer#getMinimumSequence() */ @Override public long getMinimumSequence() { return Util.getMinimumSequence(gatingSequences, cursor.get()); }
/** * @see Sequencer#hasAvailableCapacity(int) */ @Override public boolean hasAvailableCapacity(final int requiredCapacity) { return hasAvailableCapacity(gatingSequences, requiredCapacity, cursor.get()); }
@Override public long waitFor( final long sequence, Sequence cursor, final Sequence dependentSequence, final SequenceBarrier barrier) throws AlertException { long availableSequence; int counter = retries; while ((availableSequence = dependentSequence.get()) < sequence) { counter = applyWaitMethod(barrier, counter); } return availableSequence; }
@Override public long waitFor( final long sequence, Sequence cursor, final Sequence dependentSequence, final SequenceBarrier barrier) throws AlertException, InterruptedException { long availableSequence; int counter = SPIN_TRIES; while ((availableSequence = dependentSequence.get()) < sequence) { counter = applyWaitMethod(barrier, counter); } return availableSequence; }
@Override public long get() { latch.countDown(); return super.get(); } }
@Override public long waitFor( final long sequence, Sequence cursor, final Sequence dependentSequence, final SequenceBarrier barrier) throws AlertException, InterruptedException { long availableSequence; while ((availableSequence = dependentSequence.get()) < sequence) { barrier.checkAlert(); ThreadHints.onSpinWait(); } return availableSequence; }
public void run() { for (DummyEventProcessor stubWorker : eventProcessors) { stubWorker.setSequence(stubWorker.getSequence().get() + 1L); } } };
@Test public void shouldReturnMinimumOf2Sequences() throws Exception { Sequence sequence1 = new Sequence(34); Sequence sequnece2 = new Sequence(47); Sequence group = new FixedSequenceGroup(new Sequence[]{sequence1, sequnece2}); assertThat(group.get(), is(34L)); sequence1.set(35); assertThat(group.get(), is(35L)); sequence1.set(48); assertThat(group.get(), is(47L)); } }
@Test public void shouldSetGroupSequenceToSameValue() { final Sequence sequenceThree = new Sequence(3L); final Sequence sequenceSeven = new Sequence(7L); final SequenceGroup sequenceGroup = new SequenceGroup(); sequenceGroup.add(sequenceSeven); sequenceGroup.add(sequenceThree); final long expectedSequence = 11L; sequenceGroup.set(expectedSequence); assertEquals(expectedSequence, sequenceThree.get()); assertEquals(expectedSequence, sequenceSeven.get()); }
@Test public void shouldAddOneSequenceToGroup() { final Sequence sequence = new Sequence(7L); final SequenceGroup sequenceGroup = new SequenceGroup(); sequenceGroup.add(sequence); assertEquals(sequence.get(), sequenceGroup.get()); }
@Test public void shouldNotUpdateCursorDuringHasAvailableCapacity() throws Exception { SingleProducerSequencer sequencer = new SingleProducerSequencer(16, new BusySpinWaitStrategy()); for (int i = 0; i < 32; i++) { long next = sequencer.next(); assertThat(sequencer.cursor.get(), not(next)); sequencer.hasAvailableCapacity(13); assertThat(sequencer.cursor.get(), not(next)); sequencer.publish(next); } } }
@Test public void shouldRemoveSequenceFromGroup() { final Sequence sequenceThree = new Sequence(3L); final Sequence sequenceSeven = new Sequence(7L); final SequenceGroup sequenceGroup = new SequenceGroup(); sequenceGroup.add(sequenceSeven); sequenceGroup.add(sequenceThree); assertEquals(sequenceThree.get(), sequenceGroup.get()); assertTrue(sequenceGroup.remove(sequenceThree)); assertEquals(sequenceSeven.get(), sequenceGroup.get()); assertEquals(1, sequenceGroup.size()); }
@Test public void shouldRemoveSequenceFromGroupWhereItBeenAddedMultipleTimes() { final Sequence sequenceThree = new Sequence(3L); final Sequence sequenceSeven = new Sequence(7L); final SequenceGroup sequenceGroup = new SequenceGroup(); sequenceGroup.add(sequenceThree); sequenceGroup.add(sequenceSeven); sequenceGroup.add(sequenceThree); assertEquals(sequenceThree.get(), sequenceGroup.get()); assertTrue(sequenceGroup.remove(sequenceThree)); assertEquals(sequenceSeven.get(), sequenceGroup.get()); assertEquals(1, sequenceGroup.size()); }
@Test public void shouldReportTheMinimumSequenceForGroupOfTwo() { final Sequence sequenceThree = new Sequence(3L); final Sequence sequenceSeven = new Sequence(7L); final SequenceGroup sequenceGroup = new SequenceGroup(); sequenceGroup.add(sequenceSeven); sequenceGroup.add(sequenceThree); assertEquals(sequenceThree.get(), sequenceGroup.get()); }