public void SyncGroupResponse() { var response1 = new SyncGroupResponse { MemberAssignment = new SyncGroupMemberAssignment { PartitionAssignments = new[] { new SyncGroupPartitionAssignment { Topic = Guid.NewGuid().ToString(), Partitions = new [] { Guid.NewGuid().GetHashCode(), Guid.NewGuid().GetHashCode() } } }, Version = (Int16)Guid.NewGuid().GetHashCode(), UserData = new Byte[] { 1, 2, 3 } } }; Stream binary1 = new MemoryStream(); response1.Serialize(binary1); binary1.Seek(0L, SeekOrigin.Begin); var response2 = new SyncGroupResponse(); response2.Deserialize(binary1); var compareLogic = new CompareLogic(); var result = compareLogic.Compare(response1, response2); Assert.True(result.AreEqual); Stream binary2 = new MemoryStream(); response2.Serialize(binary2); Assert.Equal(binary1.Length, binary2.Length); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) { binary1.Seek(0L, SeekOrigin.Begin); binary1.CopyTo(stream1); binary2.Seek(0L, SeekOrigin.Begin); binary2.CopyTo(stream2); Assert.Equal(stream1.Length, stream2.Length); stream1.Seek(0L, SeekOrigin.Begin); var bytes1 = stream1.ToArray(); stream2.Seek(0L, SeekOrigin.Begin); var bytes2 = stream2.ToArray(); Assert.Equal(bytes1.Length, bytes2.Length); for (int i = 0; i < bytes1.Length; i++) { Assert.Equal(bytes1[i], bytes2[i]); } } }
public void SyncGroupResponse( [Values( ErrorResponseCode.None, ErrorResponseCode.OffsetMetadataTooLarge )] ErrorResponseCode errorCode) { var bytes = new byte[1000]; _randomizer.NextBytes(bytes); var response = new SyncGroupResponse(errorCode, new ByteMember(bytes)); response.AssertCanEncodeDecodeResponse(0); }
public void SyncGroupResponse( [Values( ErrorCode.NONE, ErrorCode.OFFSET_METADATA_TOO_LARGE )] ErrorCode errorCode) { var bytes = new byte[1000]; _randomizer.NextBytes(bytes); var response = new SyncGroupResponse(errorCode, new ByteTypeAssignment(new ArraySegment <byte>(bytes))); response.AssertCanEncodeDecodeResponse(0, new ByteMembershipEncoder("protocolType")); }
private SyncGroupResponse TryJoinAndSyncGroup(Int32 retryCount, Int32 retryTimtout) { if (Topics == null || Topics.Length == 0) { throw new ArgumentOutOfRangeException("Topics"); } SyncGroupResponse resp = null; var retryUsed = 0; while (resp == null && ++retryUsed < retryCount) { OnStateChange(CoordinatorState.Joining); var joinGroupResponse = JoinGroup(_groupId, _memberId, Topics); joinGroupResponse.TryThrowFirstErrorOccured(); OnStateChange(CoordinatorState.AwaitingSync); _generationId = joinGroupResponse.GenerationId; _memberId = joinGroupResponse.MemberId; _members = joinGroupResponse.Members; var isLeader = _memberId != joinGroupResponse.LeaderId; if (isLeader) { Trace.TraceInformation("{0:HH:mm:ss.fff} [{1:d2}] #3 Join group '{2}', waiting for assingments as follower", DateTime.Now, Thread.CurrentThread.ManagedThreadId, _groupId); resp = SyncGroup(_groupId, _memberId, _generationId); } else { Trace.TraceInformation("{0:HH:mm:ss.fff} [{1:d2}] #3 Join group '{2}', assigning topic and partitions as leader", DateTime.Now, Thread.CurrentThread.ManagedThreadId, _groupId); var assignments = AssigningTopicPartitions(joinGroupResponse.Members).ToArray(); resp = SyncGroup(_groupId, _memberId, _generationId, assignments); } if (resp.ErrorCode == ErrorCode.RebalanceInProgressCode) { resp = null; Thread.Sleep(retryTimtout); } } if (resp == null) { throw new ProtocolException(ErrorCode.RebalanceInProgressCode); } return(resp); }
public void SyncConsumerGroupResponse( [Values( ErrorResponseCode.None, ErrorResponseCode.OffsetMetadataTooLarge )] ErrorResponseCode errorCode, [Values(1, 10)] int memberCount) { var encoder = new ConsumerEncoder(); var topics = new List <TopicPartition>(); for (var t = 0; t < memberCount; t++) { topics.Add(new TopicPartition("topic foo" + t, t)); } var assignment = new ConsumerMemberAssignment(0, topics); var response = new SyncGroupResponse(errorCode, assignment); response.AssertCanEncodeDecodeResponse(0, encoder); }
public void SyncConsumerGroupResponse( [Values( ErrorCode.NONE, ErrorCode.OFFSET_METADATA_TOO_LARGE )] ErrorCode errorCode, [Values(1, 10)] int memberCount) { var encoder = new ConsumerEncoder(); var topics = new List <TopicPartition>(); for (var t = 0; t < memberCount; t++) { topics.Add(new TopicPartition("topic foo" + t, t)); } var userData = new byte[memberCount * 100]; _randomizer.NextBytes(userData); var assignment = new ConsumerMemberAssignment(topics, new ArraySegment <byte>(userData), 0); var response = new SyncGroupResponse(errorCode, assignment); response.AssertCanEncodeDecodeResponse(0, encoder); }
private static bool TryEncodeResponse(IKafkaWriter writer, IRequestContext context, SyncGroupResponse response) { if (response == null) { return(false); } var encoder = context.GetEncoder(context.ProtocolType); writer.Write(response.error_code) .Write(response.member_assignment, encoder); return(true); }
private static bool TryEncodeResponse(IKafkaWriter writer, IRequestContext context, SyncGroupResponse response) { if (response == null) { return(false); } var encoder = context.GetEncoder(); writer.Write(response.ErrorCode) .Write(response.MemberAssignment, encoder); return(true); }