public Dispatcher( LogBuffer logBuffer, LogBufferAppender logAppender, AtomicPosition publisherLimit, AtomicPosition publisherPosition, int logWindowLength, String[] subscriptionNames, int mode, String name, MetricsManager metricsManager) { this.logBuffer = logBuffer; this.logAppender = logAppender; this.publisherLimit = publisherLimit; this.publisherPosition = publisherPosition; this.logWindowLength = logWindowLength; this.mode = mode; this.name = name; this.metricsManager = metricsManager; this.partitionSize = logBuffer.getPartitionSize(); this.maxFrameLength = partitionSize / 16; this.subscriptions = new Subscription[0]; this.defaultSubscriptionNames = subscriptionNames; }
public Dispatcher( LogBuffer logBuffer, LogBufferAppender logAppender, AtomicPosition publisherLimit, AtomicPosition publisherPosition, int logWindowLength, String[] subscriptionNames, int mode, String name, MetricsManager metricsManager) { this.logBuffer = logBuffer; this.logAppender = logAppender; this.publisherLimit = publisherLimit; this.publisherPosition = publisherPosition; this.logWindowLength = logWindowLength; this.mode = mode; this.name = name; this.metricsManager = metricsManager; this.partitionSize = logBuffer.getPartitionSize(); this.maxFrameLength = partitionSize / 16; this.subscriptions = new Subscription[0]; this.defaultSubscriptionNames = subscriptionNames; }
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; }
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; }