public void close() { positionByImageMap.forEach(PublicationImage::removeSubscriber); if (null != directPublication) { directPublication.removeSubscription(directPublicationSubscriberPosition); directPublication.decRef(); } }
public SubscriptionLink( final long registrationId, final int streamId, final DirectPublication directPublication, final ReadablePosition subscriberPosition, final AeronClient aeronClient) { this.registrationId = registrationId; this.channelEndpoint = null; // will prevent matches between PublicationImages and DirectPublications this.streamId = streamId; this.aeronClient = aeronClient; this.directPublication = directPublication; directPublication.incRef(); this.directPublicationSubscriberPosition = subscriberPosition; }
@SuppressWarnings("unchecked") @Before public void setUp() throws Exception { final RingBuffer fromClientCommands = new ManyToOneRingBuffer( new UnsafeBuffer(ByteBuffer.allocateDirect(Configuration.CONDUCTOR_BUFFER_LENGTH))); final RawLogFactory mockRawLogFactory = mock(RawLogFactory.class); final UnsafeBuffer counterBuffer = new UnsafeBuffer(ByteBuffer.allocateDirect(BUFFER_LENGTH)); final CountersManager countersManager = new CountersManager( new UnsafeBuffer(ByteBuffer.allocateDirect(BUFFER_LENGTH)), counterBuffer); when(mockRawLogFactory.newDirectPublication(anyInt(), anyInt(), anyLong())) .thenReturn(LogBufferHelper.newTestLogBuffers(TERM_BUFFER_LENGTH, TERM_META_DATA_LENGTH)); final MediaDriver.Context ctx = new MediaDriver.Context() .toDriverCommands(fromClientCommands) .rawLogBuffersFactory(mockRawLogFactory) .clientProxy(mock(ClientProxy.class)) .eventLogger(mock(EventLogger.class)) .toConductorFromReceiverCommandQueue(mock(OneToOneConcurrentArrayQueue.class)) .toConductorFromSenderCommandQueue(mock(OneToOneConcurrentArrayQueue.class)) .toEventReader(mock(ManyToOneRingBuffer.class)) .epochClock(new SystemEpochClock()) .countersManager(countersManager) .nanoClock(nanoClock); ctx.counterValuesBuffer(counterBuffer); driverProxy = new DriverProxy(fromClientCommands); driverConductor = new DriverConductor(ctx); // have a conductor construct one for us driverProxy.addPublication(CommonContext.IPC_CHANNEL, STREAM_ID); driverConductor.doWork(); directPublication = driverConductor.getDirectPublication(STREAM_ID); publisherLimit = new UnsafeBufferPosition(counterBuffer, directPublication.publisherLimitId()); }
@Test public void shouldHaveJoiningPositionZeroWhenNoSubscriptions() { assertThat(directPublication.joiningPosition(), is(0L)); }
@Test public void shouldKeepPublisherLimitZeroOnNoSubscriptionUpdate() { directPublication.updatePublishersLimit(); assertThat(publisherLimit.get(), is(0L)); }