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; }