public long getPublisherLimit() { if (isClosed) { return -1L; } else { return publisherLimit.get(); } }
@Override protected void onActorClosing() { publisherLimit.reset(); publisherPosition.reset(); final Subscription[] subscriptionsCopy = Arrays.copyOf(subscriptions, subscriptions.length); for (Subscription subscription : subscriptionsCopy) { doCloseSubscription(subscription); } logBuffer.close(); isClosed = true; }
public void reset() { set(-1); }
public int updatePublisherLimit() { int isUpdated = 0; if (!isClosed) { long lastSubscriberPosition = -1; if (subscriptions.length > 0) { lastSubscriberPosition = subscriptions[subscriptions.length - 1].getPosition(); if (MODE_PUB_SUB == mode && subscriptions.length > 1) { for (int i = 0; i < subscriptions.length - 1; i++) { lastSubscriberPosition = Math.min(lastSubscriberPosition, subscriptions[i].getPosition()); } } } else { lastSubscriberPosition = Math.max(0, publisherLimit.get() - logWindowLength); } int partitionId = partitionId(lastSubscriberPosition); int partitionOffset = partitionOffset(lastSubscriberPosition) + logWindowLength; if (partitionOffset >= logBuffer.getPartitionSize()) { ++partitionId; partitionOffset = logWindowLength; } final long proposedPublisherLimit = position(partitionId, partitionOffset); if (publisherLimit.proposeMaxOrdered(proposedPublisherLimit)) { isUpdated = 1; } } return isUpdated; }
publisherLimit = new AtomicPosition(); publisherLimit.set(initialPosition); publisherPosition = new AtomicPosition(); publisherPosition.set(initialPosition);
protected void updatePosition() { fragmentsConsumedMetric.getAndAddOrdered(fragmentCount); subscriberPosition.proposeMaxOrdered(position(newPartitionId, newPartitionOffset)); dataConsumed.signal(); }
public int updatePublisherLimit() { int isUpdated = 0; if (!isClosed) { long lastSubscriberPosition = -1; if (subscriptions.length > 0) { lastSubscriberPosition = subscriptions[subscriptions.length - 1].getPosition(); if (MODE_PUB_SUB == mode && subscriptions.length > 1) { for (int i = 0; i < subscriptions.length - 1; i++) { lastSubscriberPosition = Math.min(lastSubscriberPosition, subscriptions[i].getPosition()); } } } else { lastSubscriberPosition = Math.max(0, publisherLimit.get() - logWindowLength); } int partitionId = partitionId(lastSubscriberPosition); int partitionOffset = partitionOffset(lastSubscriberPosition) + logWindowLength; if (partitionOffset >= logBuffer.getPartitionSize()) { ++partitionId; partitionOffset = logWindowLength; } final long proposedPublisherLimit = position(partitionId, partitionOffset); if (publisherLimit.proposeMaxOrdered(proposedPublisherLimit)) { isUpdated = 1; } } return isUpdated; }
publisherLimit = new AtomicPosition(); publisherLimit.set(initialPosition); publisherPosition = new AtomicPosition(); publisherPosition.set(initialPosition);
protected void updatePosition() { fragmentsConsumedMetric.getAndAddOrdered(fragmentCount); subscriberPosition.proposeMaxOrdered(position(newPartitionId, newPartitionOffset)); dataConsumed.signal(); }
final long limit = publisherLimit.get(); publisherPosition.proposeMaxOrdered(newPosition); signalSubsciptions();
protected Subscription newSubscription( final int subscriptionId, final String subscriptionName, ActorCondition onConsumption) { final AtomicPosition position = new AtomicPosition(); position.set(position(logBuffer.getActivePartitionIdVolatile(), 0)); final AtomicPosition limit = determineLimit(subscriptionId); final Metric fragmentsRead = metricsManager .newMetric("buffer_fragments_read") .type("counter") .label("subscription", subscriptionName) .label("buffer", getName()) .create(); return new Subscription( position, limit, subscriptionId, subscriptionName, onConsumption, logBuffer, fragmentsRead); }
public long getPublisherPosition() { if (isClosed) { return -1L; } else { return publisherPosition.get(); } }
position.proposeMaxOrdered(position(partitionId, partitionOffset)); dataConsumed.signal();
@Override protected void onActorClosing() { publisherLimit.reset(); publisherPosition.reset(); final Subscription[] subscriptionsCopy = Arrays.copyOf(subscriptions, subscriptions.length); for (Subscription subscription : subscriptionsCopy) { doCloseSubscription(subscription); } logBuffer.close(); isClosed = true; }
public void reset() { set(-1); }
final long limit = publisherLimit.get(); publisherPosition.proposeMaxOrdered(newPosition); signalSubsciptions();
protected Subscription newSubscription( final int subscriptionId, final String subscriptionName, ActorCondition onConsumption) { final AtomicPosition position = new AtomicPosition(); position.set(position(logBuffer.getActivePartitionIdVolatile(), 0)); final AtomicPosition limit = determineLimit(subscriptionId); final Metric fragmentsRead = metricsManager .newMetric("buffer_fragments_read") .type("counter") .label("subscription", subscriptionName) .label("buffer", getName()) .create(); return new Subscription( position, limit, subscriptionId, subscriptionName, onConsumption, logBuffer, fragmentsRead); }
public long getPublisherLimit() { if (isClosed) { return -1L; } else { return publisherLimit.get(); } }
position.proposeMaxOrdered(position(partitionId, partitionOffset)); dataConsumed.signal();
protected void doCloseSubscription(Subscription subscriptionToClose) { if (isClosed) { return; // don't need to adjust the subscriptions when closed } // close subscription subscriptionToClose.isClosed = true; subscriptionToClose.position.reset(); subscriptionToClose.fragmentsConsumedMetric.close(); // remove from list final int len = subscriptions.length; int index = 0; for (int i = 0; i < len; i++) { if (subscriptionToClose == subscriptions[i]) { index = i; break; } } Subscription[] newSubscriptions = null; final int numMoved = len - index - 1; if (numMoved == 0) { newSubscriptions = Arrays.copyOf(subscriptions, len - 1); } else { newSubscriptions = new Subscription[len - 1]; System.arraycopy(subscriptions, 0, newSubscriptions, 0, index); System.arraycopy(subscriptions, index + 1, newSubscriptions, index, numMoved); } this.subscriptions = newSubscriptions; // ensuring that the publisher limit is updated dataConsumed.signal(); }