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  }