Esempio n. 1
0
  public void close() {
    positionByImageMap.forEach(PublicationImage::removeSubscriber);

    if (null != directPublication) {
      directPublication.removeSubscription(directPublicationSubscriberPosition);
      directPublication.decRef();
    }
  }
Esempio n. 2
0
 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));
 }