Exemplo n.º 1
0
 /// <inheritdoc />
 public bool Equals(OffsetCommitRequest other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(base.Equals(other) &&
            retention_time.Equals(other.retention_time) &&
            topics.HasEqualElementsInOrder(other.topics));
 }
Exemplo n.º 2
0
        private static byte[] EncodeRequest(IRequestContext context, OffsetCommitRequest request)
        {
            using (var writer = EncodeHeader(context, request)) {
                writer.Write(request.GroupId);
                if (context.ApiVersion >= 1)
                {
                    writer.Write(request.GroupGenerationId)
                    .Write(request.MemberId);
                }
                if (context.ApiVersion >= 2)
                {
                    if (request.OffsetRetention.HasValue)
                    {
                        writer.Write((long)request.OffsetRetention.Value.TotalMilliseconds);
                    }
                    else
                    {
                        writer.Write(-1L);
                    }
                }

                var topicGroups = request.Topics.GroupBy(x => x.TopicName).ToList();
                writer.Write(topicGroups.Count);

                foreach (var topicGroup in topicGroups)
                {
                    var partitions = topicGroup.GroupBy(x => x.PartitionId).ToList();
                    writer.Write(topicGroup.Key)
                    .Write(partitions.Count);

                    foreach (var partition in partitions)
                    {
                        foreach (var commit in partition)
                        {
                            writer.Write(partition.Key)
                            .Write(commit.Offset);
                            if (context.ApiVersion == 1)
                            {
                                writer.Write(commit.TimeStamp.GetValueOrDefault(-1));
                            }
                            writer.Write(commit.Metadata);
                        }
                    }
                }
                return(writer.ToBytes());
            }
        }