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 }