@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; }
@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; }
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(); }
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(); }