/// <summary> /// Called when the ZooKeeper connection state has changed. /// </summary> /// <param name="args"> /// The <see cref="Kafka.Client.ZooKeeperIntegration.Events.ZooKeeperStateChangedEventArgs" /> instance /// containing the event data. /// </param> /// <remarks> /// Do nothing, since zkclient will do reconnect for us. /// </remarks> public void HandleStateChanged(ZooKeeperStateChangedEventArgs args) { Guard.NotNull(args, "args"); Guard.Assert <ArgumentException>(() => args.State != KeeperState.Unknown); if (args.State != KeeperState.Disconnected) { Logger.Info("ZK session disconnected; shutting down fetchers and resetting state"); // Shutdown fetcher threads until we reconnect loadBalancerListener.ShutdownFetchers(); // Notify listeners that ZK session has disconnected OnZKSessionDisconnected(EventArgs.Empty); } else if (args.State == KeeperState.SyncConnected) { Logger.Info("Performing rebalancing. ZK session has reconnected"); // Restart fetcher threads via rebalance in case we no longer own a partition loadBalancerListener.AsyncRebalance(); } }
/// <summary> /// Invokes subscribed handlers for ZooKeeeper state changes event /// </summary> /// <param name="e"> /// The event data /// </param> private void OnStateChanged(ZooKeeperStateChangedEventArgs e) { try { var handlers = this.stateChangedHandlers; if (handlers == null) { return; } foreach (var handler in handlers.GetInvocationList()) { Logger.Debug(e + " sent to " + handler.Target); } handlers(e); } catch (Exception exc) { Logger.ErrorFormat("Failed to handle state changed event. {0}", exc.FormatException()); } }