internal static TopicPartitionState GetPartitionState(IZooKeeperClient zkClient, string topic, int partition)
        {
            var stateData = zkClient.ReadData <string>(GetTopicPartitionStatePath(topic, partition.ToString(CultureInfo.InvariantCulture)), true);

            if (string.IsNullOrWhiteSpace(stateData))
            {
                return(null);
            }

            TopicPartitionState partitionState;

            try
            {
                var ser    = new JavaScriptSerializer();
                var result = ser.Deserialize <Dictionary <string, object> >(stateData);
                partitionState = new TopicPartitionState()
                {
                    Leader           = int.Parse(result["leader"].ToString()),
                    Leader_Epoch     = int.Parse(result["leader_epoch"].ToString()),
                    Controller_Epoch = int.Parse(result["controller_epoch"].ToString()),
                    Verstion         = int.Parse(result["version"].ToString()),
                };

                var isrArr = result["isr"] as System.Collections.ArrayList;
                partitionState.Isr = isrArr != null?isrArr.Cast <int>().ToArray() : null;
            }
            catch (Exception exc)
            {
                Logger.WarnFormat("Unexpected error while trying to get topic partition state for topic '{0}' partition '{1}'. Error: {2} ", topic, partition, exc.FormatException());
                return(null);
            }

            return(partitionState);
        }
        internal static TopicPartitionState GetPartitionState(IZooKeeperClient zkClient, string topic, int partition)
        {
            var stateData = zkClient.ReadData<string>(GetTopicPartitionStatePath(topic, partition.ToString(CultureInfo.InvariantCulture)), true);

            if (string.IsNullOrWhiteSpace(stateData))
            {
                return null;
            }

            TopicPartitionState partitionState;
            try
            {
                var ser = new JavaScriptSerializer();
                var result = ser.Deserialize<Dictionary<string, object>>(stateData);
                partitionState = new TopicPartitionState()
                                         {
                                             Leader = int.Parse(result["leader"].ToString()),
                                             Leader_Epoch = int.Parse(result["leader_epoch"].ToString()),
                                             Controller_Epoch = int.Parse(result["controller_epoch"].ToString()),
                                             Verstion = int.Parse(result["version"].ToString()),
                                         };

                var isrArr = result["isr"] as System.Collections.ArrayList;
                partitionState.Isr = isrArr != null ? isrArr.Cast<int>().ToArray() : null;
            }
            catch (Exception exc)
            {
                Logger.WarnFormat("Unexpected error while trying to get topic partition state for topic '{0}' partition '{1}'. Error: {2} ", topic, partition, exc.FormatException());
                return null;
            }

            return partitionState;
        }