public async Task ShouldReceiveResponseAsExpected() { // given TopologyResponse expectedResponse = new TopologyResponse(); expectedResponse.Brokers.Add(CreateBrokerInfo(0, "host", 26501, 0, true)); expectedResponse.Brokers.Add(CreateBrokerInfo(1, "host", 26501, 0, false)); expectedResponse.Brokers.Add(CreateBrokerInfo(2, "host", 26501, 0, false)); TestService.AddRequestHandler(typeof(TopologyRequest), (request) => expectedResponse); // when ITopology response = await ZeebeClient.TopologyRequest().Send(); // then IBrokerInfo firstBroker = response.Brokers[0]; Assert.AreEqual("host0:26501", firstBroker.Address); Assert.AreEqual(0, firstBroker.NodeId); IPartitionInfo firstPartition = firstBroker.Partitions[0]; Assert.AreEqual(0, firstPartition.PartitionId); Assert.AreEqual(PartitionBrokerRole.LEADER, firstPartition.Role); IBrokerInfo secondBroker = response.Brokers[1]; Assert.AreEqual("host1:26501", secondBroker.Address); Assert.AreEqual(1, secondBroker.NodeId); firstPartition = secondBroker.Partitions[0]; Assert.AreEqual(0, firstPartition.PartitionId); Assert.AreEqual(PartitionBrokerRole.FOLLOWER, firstPartition.Role); IBrokerInfo thirdBroker = response.Brokers[2]; Assert.AreEqual("host2:26501", thirdBroker.Address); Assert.AreEqual(2, thirdBroker.NodeId); firstPartition = thirdBroker.Partitions[0]; Assert.AreEqual(0, firstPartition.PartitionId); Assert.AreEqual(PartitionBrokerRole.FOLLOWER, firstPartition.Role); }
public void RemoveFromValidReaders(IRecordSetEnumerator pe) { IPartitionInfo info = pe as IPartitionInfo; if (info != null) { var readers = default(Dictionary <IRecordSetEnumerator, Object>); lock (_validReaders) { _validReaders.TryGetValue(info.Server, out readers); if (readers != null) { readers.Remove(pe); } } } }
internal object GetPartition(IPartitionResolver partitionResolver, string id) { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_START, HttpContext.Current.WorkerRequest, partitionResolver.GetType().FullName, id); } string partitionString = null; string errorMessage = null; IPartitionInfo partitionInfo = null; try { try { partitionString = partitionResolver.ResolvePartition(id); if (partitionString == null) { throw new HttpException( SR.GetString(SR.Bad_partition_resolver_connection_string, partitionResolver.GetType().FullName)); } } catch (Exception e) { errorMessage = e.Message; throw; } try { _lock.AcquireReaderLock(-1); partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo != null) { Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return(partitionInfo); } } finally { if (_lock.IsReaderLockHeld) { _lock.ReleaseReaderLock(); } } // Not found. Has to add it. try { _lock.AcquireWriterLock(-1); // One more time partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo == null) { partitionInfo = _createCallback(partitionString); Debug.Trace("PartitionManager", "Add a new partition; id=" + id + "; partitionString=" + partitionString); _partitions.Add(partitionString, partitionInfo); } Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return(partitionInfo); } finally { if (_lock.IsWriterLockHeld) { _lock.ReleaseWriterLock(); } } } finally { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) { string msg = errorMessage; if (msg == null) { if (partitionInfo != null) { msg = partitionInfo.GetTracingPartitionString(); } else { msg = String.Empty; } } EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_END, HttpContext.Current.WorkerRequest, msg); } } }
internal object GetPartition(IPartitionResolver partitionResolver, string id) { object obj2; if (EtwTrace.IsTraceEnabled(5, 1)) { EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_START, HttpContext.Current.WorkerRequest, partitionResolver.GetType().FullName, id); } string connectionString = null; string message = null; IPartitionInfo info = null; try { try { connectionString = partitionResolver.ResolvePartition(id); if (connectionString == null) { throw new HttpException(System.Web.SR.GetString("Bad_partition_resolver_connection_string", new object[] { partitionResolver.GetType().FullName })); } } catch (Exception exception) { message = exception.Message; throw; } try { this._lock.AcquireReaderLock(-1); info = (IPartitionInfo)this._partitions[connectionString]; if (info != null) { return(info); } } finally { if (this._lock.IsReaderLockHeld) { this._lock.ReleaseReaderLock(); } } try { this._lock.AcquireWriterLock(-1); info = (IPartitionInfo)this._partitions[connectionString]; if (info == null) { info = this._createCallback(connectionString); this._partitions.Add(connectionString, info); } return(info); } finally { if (this._lock.IsWriterLockHeld) { this._lock.ReleaseWriterLock(); } } } finally { if (EtwTrace.IsTraceEnabled(5, 1)) { string tracingPartitionString = message; if (tracingPartitionString == null) { if (info != null) { tracingPartitionString = info.GetTracingPartitionString(); } else { tracingPartitionString = string.Empty; } } EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_END, HttpContext.Current.WorkerRequest, tracingPartitionString); } } return(obj2); }