github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/topic/topictypes/topictypes.go (about)

     1  package topictypes
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/clone"
     7  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic"
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopiccommon"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/topic/topiclistenerinternal"
    10  )
    11  
    12  // Codec code for use in topics
    13  // Allow to use custom values in interval [10000,20000)
    14  type Codec int32
    15  
    16  const (
    17  	CodecRaw  = Codec(rawtopiccommon.CodecRaw)
    18  	CodecGzip = Codec(rawtopiccommon.CodecGzip)
    19  
    20  	// CodecLzop not supported by default, customer need provide own codec library
    21  	CodecLzop = Codec(rawtopiccommon.CodecLzop)
    22  
    23  	// CodecZstd not supported by default, customer need provide own codec library
    24  	CodecZstd = Codec(rawtopiccommon.CodecZstd)
    25  
    26  	CodecCustomerFirst = Codec(rawtopiccommon.CodecCustomerFirst)
    27  	CodecCustomerEnd   = Codec(rawtopiccommon.CodecCustomerEnd) // last allowed custom codec id is CodecCustomerEnd-1
    28  )
    29  
    30  func (c Codec) ToRaw(r *rawtopiccommon.Codec) {
    31  	*r = rawtopiccommon.Codec(c)
    32  }
    33  
    34  // Consumer contains info about topic consumer
    35  type Consumer struct {
    36  	Name            string
    37  	Important       bool
    38  	SupportedCodecs []Codec
    39  	ReadFrom        time.Time
    40  	Attributes      map[string]string
    41  }
    42  
    43  // ToRaw public format to internal. Used internally only.
    44  func (c *Consumer) ToRaw(raw *rawtopic.Consumer) {
    45  	raw.Name = c.Name
    46  	raw.Important = c.Important
    47  	raw.Attributes = c.Attributes
    48  
    49  	raw.SupportedCodecs = make(rawtopiccommon.SupportedCodecs, len(c.SupportedCodecs))
    50  	for index, codec := range c.SupportedCodecs {
    51  		raw.SupportedCodecs[index] = rawtopiccommon.Codec(codec)
    52  	}
    53  
    54  	if !c.ReadFrom.IsZero() {
    55  		raw.ReadFrom.HasValue = true
    56  		raw.ReadFrom.Value = c.ReadFrom
    57  	}
    58  	raw.Attributes = c.Attributes
    59  }
    60  
    61  // FromRaw convert internal format to public. Used internally only.
    62  func (c *Consumer) FromRaw(raw *rawtopic.Consumer) {
    63  	c.Attributes = raw.Attributes
    64  	c.Important = raw.Important
    65  	c.Name = raw.Name
    66  
    67  	c.SupportedCodecs = make([]Codec, len(raw.SupportedCodecs))
    68  	for index, codec := range raw.SupportedCodecs {
    69  		c.SupportedCodecs[index] = Codec(codec)
    70  	}
    71  
    72  	if raw.ReadFrom.HasValue {
    73  		c.ReadFrom = raw.ReadFrom.Value
    74  	}
    75  }
    76  
    77  // MeteringMode mode of topic's metering. Used for serverless installations.
    78  type MeteringMode int
    79  
    80  const (
    81  	MeteringModeUnspecified      = MeteringMode(rawtopic.MeteringModeUnspecified)
    82  	MeteringModeReservedCapacity = MeteringMode(rawtopic.MeteringModeReservedCapacity)
    83  	MeteringModeRequestUnits     = MeteringMode(rawtopic.MeteringModeRequestUnits)
    84  )
    85  
    86  // FromRaw convert from internal format to public. Used internally only.
    87  func (m *MeteringMode) FromRaw(raw rawtopic.MeteringMode) {
    88  	*m = MeteringMode(raw)
    89  }
    90  
    91  // ToRaw convert from public format to internal. Used internally only.
    92  func (m *MeteringMode) ToRaw(raw *rawtopic.MeteringMode) {
    93  	*raw = rawtopic.MeteringMode(*m)
    94  }
    95  
    96  // PartitionSettings settings of partitions
    97  type PartitionSettings struct {
    98  	MinActivePartitions int64
    99  	PartitionCountLimit int64
   100  }
   101  
   102  // ToRaw convert public format to internal. Used internally only.
   103  func (s *PartitionSettings) ToRaw(raw *rawtopic.PartitioningSettings) {
   104  	raw.MinActivePartitions = s.MinActivePartitions
   105  	raw.PartitionCountLimit = s.PartitionCountLimit
   106  }
   107  
   108  // FromRaw convert internal format to public. Used internally only.
   109  func (s *PartitionSettings) FromRaw(raw *rawtopic.PartitioningSettings) {
   110  	s.MinActivePartitions = raw.MinActivePartitions
   111  	s.PartitionCountLimit = raw.PartitionCountLimit
   112  }
   113  
   114  // TopicDescription contains info about topic.
   115  type TopicDescription struct {
   116  	Path                              string
   117  	PartitionSettings                 PartitionSettings
   118  	Partitions                        []PartitionInfo
   119  	RetentionPeriod                   time.Duration
   120  	RetentionStorageMB                int64
   121  	SupportedCodecs                   []Codec
   122  	PartitionWriteBurstBytes          int64
   123  	PartitionWriteSpeedBytesPerSecond int64
   124  	Attributes                        map[string]string
   125  	Consumers                         []Consumer
   126  	MeteringMode                      MeteringMode
   127  }
   128  
   129  // FromRaw convert from public format to internal. Used internally only.
   130  func (d *TopicDescription) FromRaw(raw *rawtopic.DescribeTopicResult) {
   131  	d.Path = raw.Self.Name
   132  	d.PartitionSettings.FromRaw(&raw.PartitioningSettings)
   133  
   134  	d.Partitions = make([]PartitionInfo, len(raw.Partitions))
   135  	for i := range raw.Partitions {
   136  		d.Partitions[i].FromRaw(&raw.Partitions[i])
   137  	}
   138  
   139  	d.RetentionPeriod = raw.RetentionPeriod
   140  	d.RetentionStorageMB = raw.RetentionStorageMB
   141  
   142  	d.SupportedCodecs = make([]Codec, len(raw.SupportedCodecs))
   143  	for i := 0; i < len(raw.SupportedCodecs); i++ {
   144  		d.SupportedCodecs[i] = Codec(raw.SupportedCodecs[i])
   145  	}
   146  
   147  	d.PartitionWriteSpeedBytesPerSecond = raw.PartitionWriteSpeedBytesPerSecond
   148  	d.PartitionWriteBurstBytes = raw.PartitionWriteBurstBytes
   149  
   150  	d.RetentionPeriod = raw.RetentionPeriod
   151  	d.RetentionStorageMB = raw.RetentionStorageMB
   152  
   153  	d.Attributes = make(map[string]string)
   154  	for k, v := range raw.Attributes {
   155  		d.Attributes[k] = v
   156  	}
   157  
   158  	d.Consumers = make([]Consumer, len(raw.Consumers))
   159  	for i := 0; i < len(raw.Consumers); i++ {
   160  		d.Consumers[i].FromRaw(&raw.Consumers[i])
   161  	}
   162  
   163  	d.MeteringMode.FromRaw(raw.MeteringMode)
   164  }
   165  
   166  // PartitionInfo contains info about partition.
   167  type PartitionInfo struct {
   168  	PartitionID        int64
   169  	Active             bool
   170  	ChildPartitionIDs  []int64
   171  	ParentPartitionIDs []int64
   172  }
   173  
   174  // FromRaw convert from internal format to public. Used internally only.
   175  func (p *PartitionInfo) FromRaw(raw *rawtopic.PartitionInfo) {
   176  	p.PartitionID = raw.PartitionID
   177  	p.Active = raw.Active
   178  
   179  	p.ChildPartitionIDs = clone.Int64Slice(raw.ChildPartitionIDs)
   180  	p.ParentPartitionIDs = clone.Int64Slice(raw.ParentPartitionIDs)
   181  }
   182  
   183  type MultipleWindowsStat struct {
   184  	PerMinute int64
   185  	PerHour   int64
   186  	PerDay    int64
   187  }
   188  
   189  func (m *MultipleWindowsStat) FromRaw(raw *rawtopic.MultipleWindowsStat) {
   190  	if raw != nil {
   191  		m.PerMinute = raw.PerMinute
   192  		m.PerHour = raw.PerHour
   193  		m.PerDay = raw.PerDay
   194  	}
   195  }
   196  
   197  type OffsetRange topiclistenerinternal.PublicOffsetsRange
   198  
   199  type PartitionStats struct {
   200  	PartitionsOffset OffsetRange
   201  	StoreSizeBytes   int64
   202  	LastWriteTime    *time.Time
   203  	MaxWriteTimeLag  *time.Duration
   204  	BytesWritten     MultipleWindowsStat
   205  }
   206  
   207  func (p *PartitionStats) FromRaw(raw *rawtopic.PartitionStats) {
   208  	p.PartitionsOffset.Start = raw.PartitionsOffset.Start.ToInt64()
   209  	p.PartitionsOffset.End = raw.PartitionsOffset.End.ToInt64()
   210  	p.StoreSizeBytes = raw.StoreSizeBytes
   211  	p.LastWriteTime = raw.LastWriteTime.ToTime()
   212  	p.MaxWriteTimeLag = raw.MaxWriteTimeLag.ToDuration()
   213  	p.BytesWritten.FromRaw(&raw.BytesWritten)
   214  }
   215  
   216  type PartitionConsumerStats struct {
   217  	LastReadOffset                 int64
   218  	CommittedOffset                int64
   219  	ReadSessionID                  string
   220  	PartitionReadSessionCreateTime *time.Time
   221  	LastReadTime                   *time.Time
   222  	MaxReadTimeLag                 *time.Duration
   223  	MaxWriteTimeLag                *time.Duration
   224  	BytesRead                      MultipleWindowsStat
   225  	ReaderName                     string
   226  }
   227  
   228  func (s *PartitionConsumerStats) FromRaw(raw *rawtopic.PartitionConsumerStats) {
   229  	s.LastReadOffset = raw.LastReadOffset
   230  	s.CommittedOffset = raw.CommittedOffset
   231  	s.ReadSessionID = raw.ReadSessionID
   232  	s.PartitionReadSessionCreateTime = raw.PartitionReadSessionCreateTime.ToTime()
   233  	s.LastReadTime = raw.LastReadTime.ToTime()
   234  	s.MaxReadTimeLag = raw.MaxReadTimeLag.ToDuration()
   235  	s.MaxWriteTimeLag = raw.MaxWriteTimeLag.ToDuration()
   236  	s.BytesRead.FromRaw(&raw.BytesRead)
   237  	s.ReaderName = raw.ReaderName
   238  }
   239  
   240  type DescribeConsumerPartitionInfo struct {
   241  	PartitionID            int64
   242  	Active                 bool
   243  	ChildPartitionIDs      []int64
   244  	ParentPartitionIDs     []int64
   245  	PartitionStats         PartitionStats
   246  	PartitionConsumerStats PartitionConsumerStats
   247  }
   248  
   249  func (p *DescribeConsumerPartitionInfo) FromRaw(raw *rawtopic.DescribeConsumerResultPartitionInfo) {
   250  	p.PartitionID = raw.PartitionID
   251  	p.Active = raw.Active
   252  	p.ChildPartitionIDs = clone.Int64Slice(raw.ChildPartitionIDs)
   253  	p.ParentPartitionIDs = clone.Int64Slice(raw.ParentPartitionIDs)
   254  	p.PartitionStats.FromRaw(&raw.PartitionStats)
   255  	p.PartitionConsumerStats.FromRaw(&raw.PartitionConsumerStats)
   256  }
   257  
   258  type TopicConsumerDescription struct {
   259  	Path       string
   260  	Consumer   Consumer
   261  	Partitions []DescribeConsumerPartitionInfo
   262  }
   263  
   264  func (d *TopicConsumerDescription) FromRaw(raw *rawtopic.DescribeConsumerResult) {
   265  	d.Path = raw.Self.Name
   266  	d.Consumer.FromRaw(&raw.Consumer)
   267  
   268  	d.Partitions = make([]DescribeConsumerPartitionInfo, len(raw.Partitions))
   269  	for i := range raw.Partitions {
   270  		d.Partitions[i].FromRaw(&raw.Partitions[i])
   271  	}
   272  }