github.com/ydb-platform/ydb-go-sdk/v3@v3.57.0/internal/grpcwrapper/rawtopic/describe_topic.go (about) 1 package rawtopic 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Topic" 8 9 "github.com/ydb-platform/ydb-go-sdk/v3/internal/clone" 10 "github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawscheme" 11 "github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopiccommon" 12 "github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawydb" 13 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors" 14 ) 15 16 type DescribeTopicRequest struct { 17 OperationParams rawydb.OperationParams 18 Path string 19 } 20 21 func (req *DescribeTopicRequest) ToProto() *Ydb_Topic.DescribeTopicRequest { 22 return &Ydb_Topic.DescribeTopicRequest{ 23 OperationParams: req.OperationParams.ToProto(), 24 Path: req.Path, 25 } 26 } 27 28 type DescribeTopicResult struct { 29 Operation rawydb.Operation 30 31 Self rawscheme.Entry 32 PartitioningSettings PartitioningSettings 33 Partitions []PartitionInfo 34 RetentionPeriod time.Duration 35 RetentionStorageMB int64 36 SupportedCodecs rawtopiccommon.SupportedCodecs 37 PartitionWriteSpeedBytesPerSecond int64 38 PartitionWriteBurstBytes int64 39 Attributes map[string]string 40 Consumers []Consumer 41 MeteringMode MeteringMode 42 } 43 44 func (res *DescribeTopicResult) FromProto(protoResponse *Ydb_Topic.DescribeTopicResponse) error { 45 if err := res.Operation.FromProtoWithStatusCheck(protoResponse.GetOperation()); err != nil { 46 return err 47 } 48 49 protoResult := &Ydb_Topic.DescribeTopicResult{} 50 if err := protoResponse.GetOperation().GetResult().UnmarshalTo(protoResult); err != nil { 51 return xerrors.WithStackTrace(fmt.Errorf("ydb: describe topic result failed on unmarshal grpc result: %w", err)) 52 } 53 54 if err := res.Self.FromProto(protoResult.GetSelf()); err != nil { 55 return err 56 } 57 58 if err := res.PartitioningSettings.FromProto(protoResult.GetPartitioningSettings()); err != nil { 59 return err 60 } 61 62 protoPartitions := protoResult.GetPartitions() 63 res.Partitions = make([]PartitionInfo, len(protoPartitions)) 64 for i, protoPartition := range protoPartitions { 65 res.Partitions[i].mustFromProto(protoPartition) 66 } 67 68 res.RetentionPeriod = protoResult.GetRetentionPeriod().AsDuration() 69 res.RetentionStorageMB = protoResult.GetRetentionStorageMb() 70 71 for _, v := range protoResult.GetSupportedCodecs().GetCodecs() { 72 res.SupportedCodecs = append(res.SupportedCodecs, rawtopiccommon.Codec(v)) 73 } 74 75 res.PartitionWriteSpeedBytesPerSecond = protoResult.GetPartitionWriteSpeedBytesPerSecond() 76 res.PartitionWriteBurstBytes = protoResult.GetPartitionWriteBurstBytes() 77 78 res.Attributes = protoResult.GetAttributes() 79 80 res.Consumers = make([]Consumer, len(protoResult.GetConsumers())) 81 for i := range res.Consumers { 82 res.Consumers[i].MustFromProto(protoResult.GetConsumers()[i]) 83 } 84 85 res.MeteringMode = MeteringMode(protoResult.GetMeteringMode()) 86 87 return nil 88 } 89 90 type PartitionInfo struct { 91 PartitionID int64 92 Active bool 93 ChildPartitionIDs []int64 94 ParentPartitionIDs []int64 95 } 96 97 func (pi *PartitionInfo) mustFromProto(proto *Ydb_Topic.DescribeTopicResult_PartitionInfo) { 98 pi.PartitionID = proto.GetPartitionId() 99 pi.Active = proto.GetActive() 100 101 pi.ChildPartitionIDs = clone.Int64Slice(proto.GetChildPartitionIds()) 102 pi.ParentPartitionIDs = clone.Int64Slice(proto.GetParentPartitionIds()) 103 }