aboutsummaryrefslogtreecommitdiffstats
path: root/ydb/public/api/protos/draft/datastreams.proto
blob: ef7f748994592db582b247abac13c4de13893ed8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
syntax = "proto3";
option cc_enable_arenas = true;

import "ydb/public/api/protos/ydb_operation.proto";

import "google/protobuf/descriptor.proto";

package Ydb.DataStreams.V1;
option java_package = "com.yandex.ydb.datastreams.v1";

// Extensions to simplify json <-> proto conversion
enum EFieldTransformationType {
    TRANSFORM_NONE = 0;
    TRANSFORM_BASE64 = 1;
    TRANSFORM_DOUBLE_S_TO_INT_MS = 2;
    TRANSFORM_EMPTY_TO_NOTHING = 3;
}


extend google.protobuf.FieldOptions {
    EFieldTransformationType FieldTransformer = 58123;
}

// Here and below: Kinesis data types mapped to protobuf

enum EncryptionType {
    ENCRYPTION_UNDEFINED = 0;
    NONE = 1;
    KMS = 2;
}

enum StreamMode {
    STREAM_MODE_UNDEFINED = 0;
    PROVISIONED = 1;
    ON_DEMAND = 2;
}


message EnhancedMetrics {
    // List of shard-level metrics
    repeated string shard_level_metrics = 1;
}

message ChildShard {
    // The range of possible hash key values for the shard
    HashKeyRange hash_key_range = 1;
    // List of parent shards
    repeated string parent_shards = 2;
    // Name of the shard
    string name = 3;
}

// Represents details of consumer
message Consumer {
    string consumer_arn = 1;
    int64 consumer_creation_timestamp = 2 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    string consumer_name = 3;
    ConsumerDescription.ConsumerStatus consumer_status = 4;
}

// The range of possible hash key values for the shard
message HashKeyRange {
    string starting_hash_key = 1;
    string ending_hash_key = 2;
}

message Record {
    // Timestamp that the record was inserted into the stream
    int64 timestamp = 1 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Data blob
    bytes data = 2 [(FieldTransformer) = TRANSFORM_BASE64];
    // Encryption type used on record
    EncryptionType encryption = 3;
    // Identifies shard in the stream the record is assigned to
    string partition_key = 4;
    // Unique id of the record within shard
    string sequence_number = 5;
}

// Represents the stream description
message StreamDescription {
    // Represents current status of the stream being described
    enum StreamStatus {
        STATUS_UNDEFINED = 0;
        // Stream is being created
        CREATING = 1;
        // Stream is being deleted
        DELETING = 2;
        // Stream is ready for read & write operations or deletion
        ACTIVE = 3;
        // Shards in the stream are being merged on split
        UPDATING = 4;
    }

    // Encryption type used on record
    EncryptionType encryption_type = 1;
    // List of enhanced monitoring settings
    repeated EnhancedMetrics enhanced_monitoring = 2;
    // If true, more shards are available to describe
    bool has_more_shards = 3;
    // Id of the key used to encryption
    string key_id = 4;
    // Retention period in hours
    int32 retention_period_hours = 5;
    // List of shards
    repeated Shard shards = 6;
    string stream_arn = 7;
    // Timestamp that the stream was created
    int64 stream_creation_timestamp = 8 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Current status of the stream
    StreamStatus stream_status = 9;
    // Name of the stream
    string stream_name = 10;
    // YDS-specific Write quota in KB/S
    int32 write_quota_kb_per_sec = 11;
    // YDS-specific Owner of the stream
    string owner = 12;
    // YDS-specific Storage limit in MB of the stream
    int64 storage_limit_mb = 13;

    // stream metering mode
    StreamModeDetails stream_mode_details = 14;
}

// Represents range of possible sequence numbers for the shard
message SequenceNumberRange {
    string starting_sequence_number = 1;
    string ending_sequence_number = 2 [(FieldTransformer) = TRANSFORM_EMPTY_TO_NOTHING];
}

// Represents shard details
message Shard {
    // Id of the shard adjacent to the shard's parent
    string adjacent_parent_shard_id = 1 [(FieldTransformer) = TRANSFORM_EMPTY_TO_NOTHING];
    // The range of possible hash key values for the shard
    HashKeyRange hash_key_range = 2;
    // Id of the shard's parent
    string parent_shard_id = 3 [(FieldTransformer) = TRANSFORM_EMPTY_TO_NOTHING];
    // The range of possible sequence numbers for the shard
    SequenceNumberRange sequence_number_range = 4;
    // Unique id of the shard within stream
    string shard_id = 5;
}

// Represents consumer details
message ConsumerDescription {
    enum ConsumerStatus {
        STATUS_UNKNOWN = 0;
        CREATING = 1;
        DELETING = 2;
        ACTIVE = 3;
    }

    string consumer_arn = 1;
    // Timestamp that the consumer was created
    int64 consumer_creation_timestamp = 2 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Name of the consumer
    string consumer_name = 3;
    ConsumerStatus consumer_status = 4;
    string stream_arn = 5;
}

// Determines how the shard iterator is used to start reading records
enum ShardIteratorType {
    SHARD_ITERATOR_UNDEFINED = 0;
    // Start reading exactly from the position denoted by a sequence number
    AT_SEQUENCE_NUMBER = 1;
    // Start reading right after the specified position
    AFTER_SEQUENCE_NUMBER = 2;
    // Start reading from the position denoted by a specific timestamp
    AT_TIMESTAMP = 3;
    // Start reading from the oldest record
    TRIM_HORIZON = 4;
    // Start reading latest records
    LATEST = 5;
}

// Parameters used to filter out the response of ListShards
message ShardFilter {
    enum ShardFilterType {
        SHARD_TYPE_UNDEFINED = 0;
        // Include all the shards, starting with the shard whose id immediately follows the shard_id
        AFTER_SHARD_ID = 1;
        // Include all the shards that were open at TRIM_HORIZON
        AT_TRIM_HORIZON = 2;
        // Include all the shards within the retention period
        FROM_TRIM_HORIZON = 3;
        // Include only the currently open shards
        AT_LATEST = 4;
        // Include all the shards whose start timestamp is <= to the given
        AT_TIMESTAMP = 5;
        // Include all closed shards whose end timestamp >= to the given
        FROM_TIMESTAMP = 6;
    }

    // Exclusive id. Can only be used if AFTER_SHARD_ID is specified
    string shard_id = 1;
    // Can only be used if AT_TIMESTAMP or FROM_TIMESTAMP are specified.
    int64 timestamp = 2 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    ShardFilterType type = 3;
}

// Represents starting position in the stream from which to start reading
message StartingPosition {
    // Timestamp of the record from which to start reading
    int64 timestamp = 1 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Sequence number of the record from which to start reading
    string sequence_number = 2;
    ShardIteratorType type = 3;
}

message StreamDescriptionSummary {
    // Number of enhanced fan-out consumers
    int32 consumer_count = 1;
    // Encryption type used
    EncryptionType encryption_type = 2;
    // List of enhanced monitoring settings
    repeated EnhancedMetrics enhanced_monitoring = 3;
    // Id of the key used to encryption
    string key_id = 4;
    // Number of open shards in the stream
    int32 open_shard_count = 5;
    // Retention period in hours
    int32 retention_period_hours = 6;
    string stream_arn = 7;
    // Timestamp that the stream was created
    int64 stream_creation_timestamp = 8 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Name of the stream
    string stream_name = 9;
    // Current status of the stream
    StreamDescription.StreamStatus stream_status = 10;
}

// Server sends events of this type after call SubscribeToShard
message SubscribeToShardEvent {
    // List of child shards
    repeated ChildShard child_shards = 1;
    // Used in next call to SubscribeToShards
    string continuation_sequence_number = 2;
    // Number of milliseconds the read records are from the tip of the stream.
    // Zero indicates that record processing is caught up.
    int32 millis_behind_latest = 3;
    // List of records
    repeated Record records = 4;
}

message SubscribeToShardEventStream {
    message ExceptionEvent {
    }

    oneof event {
        ExceptionEvent internal_failure_exception = 1;
        ExceptionEvent kms_access_denied_exception = 2;
        ExceptionEvent kms_disabled_exception = 3;
        ExceptionEvent kms_invalid_state_exception = 4;
        ExceptionEvent kms_not_found_exception = 5;
        ExceptionEvent kms_opt_in_required = 6;
        ExceptionEvent kms_throttling_exception = 7;
        ExceptionEvent resource_in_use_exception = 8;
        ExceptionEvent resource_not_found_exception = 9;
        SubscribeToShardEvent subscribe_to_shard_event = 10;
    }
}

// Represents metadata assigned to the stream (key-value pair)
message Tag {
    string key = 1;
    string value = 2;
}

// Represents stream mode details
message StreamModeDetails {
    StreamMode stream_mode = 1;
}

message CreateStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    // Shards count for a new stream
    int32 shard_count = 3;
    // Datastreams extension. Allow to set retention and write quota upon stream creation
    int32 write_quota_kb_per_sec = 4;
    oneof retention {
        // Retention period in hours
        int32 retention_period_hours = 5;
        // Retention storage in megabytes
        int32 retention_storage_megabytes = 6;
    }
    // stream metering mode
    StreamModeDetails stream_mode_details = 7;
}

message CreateStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message CreateStreamResult {
}

message DeleteStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // If unset or false, and the stream has registered consumers, the call to DeleteStream fails
    bool enforce_consumer_deletion = 2;
    // Name of the stream
    string stream_name = 3;
}

message DeleteStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DeleteStreamResult {
}

message ListStreamsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of stream to start from
    string exclusive_start_stream_name = 2;
    // Max number of entries to return
    int32 limit = 3;
    // Will make recursive listing if set to true. Otherwise will return only streams from root directory.
    bool recurse = 4;
}

message ListStreamsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message ListStreamsResult {
    // True if more streams are available
    bool has_more_streams = 1;
    // Name of streams
    repeated string stream_names = 2;
}

message ListShardsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Id of the shard to start from
    string exclusive_start_shard_id = 2;
    // Max number of entries to return
    int32 max_results = 3;
    // Pagination token
    string next_token = 4;
    // Filter out response
    ShardFilter shard_filter = 5;
    // Used to distinguish streams that have the same name
    int64 stream_creation_timestamp = 6 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
    // Name of the stream
    string stream_name = 7;
}

message ListShardsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message ListShardsResult {
    // Pagination token
    string next_token = 1;
    // List of shards
    repeated Shard shards = 2;
}

message SetWriteQuotaRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    int32 write_quota_kb_per_sec = 3;
}

message SetWriteQuotaResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message SetWriteQuotaResult {
}

message UpdateStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    int32 write_quota_kb_per_sec = 3;
    // New number of shards
    int32 target_shard_count = 4;
    oneof retention {
        // Retention period in hours
        int32 retention_period_hours = 5;
        // Retention storage in megabytes
        int32 retention_storage_megabytes = 6;
    }
    // stream metering mode
    StreamModeDetails stream_mode_details = 7;

}

message UpdateStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message UpdateStreamResult {
}

message ListStreamConsumersRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Max number of entries to return
    int32 max_results = 2;
    // Pagination token
    string next_token = 3;
    string stream_arn = 4;
    // Used to distinguish streams that have the same name
    int64 stream_creation_timestamp = 5 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
}

message ListStreamConsumersResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message ListStreamConsumersResult {
    // Pagination token
    string next_token = 1;
    // List of consumers
    repeated Consumer consumers = 2;
}

message DescribeStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Id of the shard to start from
    string exclusive_start_shard_id = 2;
    // Max number of entries to return
    int32 limit = 3;
    // Name of the stream to describe
    string stream_name = 4;
}

message DescribeStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DescribeStreamResult {
    StreamDescription stream_description = 1;
}

message RegisterStreamConsumerRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Unique name of the consumer within the stream
    string consumer_name = 2;
    string stream_arn = 3;
}

message RegisterStreamConsumerResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message RegisterStreamConsumerResult {
    Consumer consumer = 1;
}

message DeregisterStreamConsumerRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    string consumer_arn = 2;
    // Name of consumer
    string consumer_name = 3;
    string stream_arn = 4;
}

message DeregisterStreamConsumerResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DeregisterStreamConsumerResult {
}

message DescribeStreamConsumerRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    string consumer_arn = 2;
    // Name of consumer
    string consumer_name = 3;
    string stream_arn = 4;
}

message DescribeStreamConsumerResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DescribeStreamConsumerResult {
    ConsumerDescription consumer_description = 1;
}

message PutRecordsRequestEntry {
    // Data blob
    bytes data = 1 [(FieldTransformer) = TRANSFORM_BASE64];
    // Hash value used to explicitly determine the shard
    string explicit_hash_key = 2;
    // Used as input to hash function that maps partition key to a specific shard
    string partition_key = 3;
}

// Represents result of an individual record
message PutRecordsResultEntry {
    string error_message = 2 [(FieldTransformer) = TRANSFORM_EMPTY_TO_NOTHING];
    string error_code = 3 [(FieldTransformer) = TRANSFORM_EMPTY_TO_NOTHING];
    string sequence_number = 4;
    string shard_id = 5;
}

message GetRecordsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Max number of records to return
    int32 limit = 2;
    // Iterator to shard
    string shard_iterator = 3;
}

message GetRecordsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message GetRecordsResult {
    // List of child shards if SplitShard was called on a given shard
    repeated ChildShard child_shards = 1;
    // Number of milliseconds the read records are from the tip of the stream.
    // Zero indicates that record processing is caught up.
    int64 millis_behind_latest = 2;
    string next_shard_iterator = 3;
    // List of records
    repeated Record records = 4;
}

message PutRecordRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Data blob
    bytes data = 2 [(FieldTransformer) = TRANSFORM_BASE64];
    // Hash value used to explicitly determine the shard
    string explicit_hash_key = 3;
    // Used as input to hash function that maps partition key to a specific shard
    string partition_key = 4;
    string sequence_number_for_ordering = 5;
    // Name of the stream to put record to
    string stream_name = 6;
}

message PutRecordResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message PutRecordResult {
    // Encryption type used
    EncryptionType encryption_type = 1;
    // Unique id of the record within shard
    string sequence_number = 2;
    // Id of the shard were the data was inserted
    string shard_id = 3;
}

message PutRecordsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // List of records
    repeated PutRecordsRequestEntry records = 2;
    // Name of the stream to put records to
    string stream_name = 3;
}

message PutRecordsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message PutRecordsResult {
    // Encryption type used
    EncryptionType encryption_type = 1;
    // Number of unsuccessfully processed records
    int32 failed_record_count = 2;
    // List of results
    repeated PutRecordsResultEntry records = 3;
}

message GetShardIteratorRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Id of the shard to get iterator for
    string shard_id = 2;
    ShardIteratorType shard_iterator_type = 3;
    // Used with shard iterator type AT_SEQUENCE_NUMBER and AFTER_SEQUENCE_NUMBER
    string starting_sequence_number = 4;
    // Name of the stream
    string stream_name = 5;
    // Used with shard iterator type AT_TIMESTAMP
    int64 timestamp = 6 [(FieldTransformer) = TRANSFORM_DOUBLE_S_TO_INT_MS];
}

message GetShardIteratorResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message GetShardIteratorResult {
    string shard_iterator = 1;
}

message SubscribeToShardRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    string consumer_arn = 2;
    // Id of the shard to subscribe to
    string shard_id = 3;
    StartingPosition starting_position = 4;
}

message SubscribeToShardResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message SubscribeToShardResult {
    SubscribeToShardEventStream event_stream = 1;
}

message AddTagsToStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    // List of tags to add to stream
    repeated string tags = 3;
}

message AddTagsToStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message AddTagsToStreamResult {
}

message DecreaseStreamRetentionPeriodRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    // Retention period in hours
    int32 retention_period_hours = 3;
}

message DecreaseStreamRetentionPeriodResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DecreaseStreamRetentionPeriodResult {
}

message DescribeLimitsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
}

message DescribeLimitsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DescribeLimitsResult {
    // Number of open shards
    int32 open_shard_count = 1;
    // Max number of shards
    int32 shard_limit = 2;
}

message DescribeStreamSummaryRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
}

message DescribeStreamSummaryResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DescribeStreamSummaryResult {
    // Stream description summary
    StreamDescriptionSummary stream_description_summary = 1;
}

message DisableEnhancedMonitoringRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // List of shard-level metrics to disable
    repeated string shard_level_metrics = 2;
    // Name of the stream
    string stream_name = 3;
}

message DisableEnhancedMonitoringResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message DisableEnhancedMonitoringResult {
    // Represents current state before the operation
    repeated string current_shard_level_metrics = 1;
    // Represents list of metrics after the operation
    repeated string desired_shard_level_metrics = 2;
    // Name of the stream
    string stream_name = 3;
}

message EnableEnhancedMonitoringRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // List of shard-level metrics to enable
    repeated string shard_level_metrics = 2;
    // Name of the stream
    string stream_name = 3;
}

message EnableEnhancedMonitoringResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message EnableEnhancedMonitoringResult {
    // Represents current state before the operation
    repeated string current_shard_level_metrics = 1;
    // Represents list of metrics after the operation
    repeated string desired_shard_level_metrics = 2;
    // Name of the stream
    string stream_name = 3;
}

message IncreaseStreamRetentionPeriodRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Retention period in hours
    int32 retention_period_hours = 2;
    // Name of the stream
    string stream_name = 3;
}

message IncreaseStreamRetentionPeriodResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message IncreaseStreamRetentionPeriodResult {
}

message ListTagsForStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Key to start from
    string exclusive_start_tag_key = 2;
    // Max number of entries to return
    int32 limit = 3;
    // Name of the stream
    string stream_name = 4;
}

message ListTagsForStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message ListTagsForStreamResult {
    // If true, more tags are available
    bool has_more_tags = 1;
    // List of tags
    repeated Tag tags = 2;
}

message MergeShardsRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Id of the adjacent shard for the merge
    string adjacent_shard_to_merge = 2;
    // Id of the shard to combine with the adjacent
    string shard_to_merge = 3;
    // Name of the stream
    string stream_name = 4;
}

message MergeShardsResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message MergeShardsResult {
}

message RemoveTagsFromStreamRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Name of the stream
    string stream_name = 2;
    // List of tag keys
    repeated string tag_keys = 3;
}

message RemoveTagsFromStreamResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message RemoveTagsFromStreamResult {
}

message SplitShardRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Hash value for the starting hash key of one of the new child shards
    string new_starting_hash_key = 2;
    // Id of the shard to split
    string shard_to_split = 3;
    // Name of the stream
    string stream_name = 4;
}

message SplitShardResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message SplitShardResult {
}

message StartStreamEncryptionRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Encryption type to use
    EncryptionType encryption_type = 2;
    // Id of the key to use to encryption
    string key_id = 3;
    // Name of the stream
    string stream_name = 4;
}

message StartStreamEncryptionResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message StartStreamEncryptionResult {
}

message StopStreamEncryptionRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Encryption type
    EncryptionType encryption_type = 2;
    // Id of the key to use to encryption
    string key_id = 3;
    // Name of the stream
    string stream_name = 4;
}

message StopStreamEncryptionResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message StopStreamEncryptionResult {
}

message UpdateShardCountRequest {
    enum ScalingType {
        SCALING_TYPE_UNKNOWN = 0;
        // Creates shards of equal size
        UNIFORM_SCALING = 1;
    }

    Ydb.Operations.OperationParams operation_params = 1;
    // Scaling type
    ScalingType scaling_type = 2;
    // Name of the stream
    string stream_name = 3;
    // New number of shards
    int32 target_shard_count = 4;
}

message UpdateShardCountResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message UpdateShardCountResult {
    // Current number of shards
    int32 current_shard_count = 1;
    // Name of the stream
    string stream_name = 2;
    // Updated number of shards
    int32 target_shard_count = 3;
}


message UpdateStreamModeRequest {
    Ydb.Operations.OperationParams operation_params = 1;
    // Stream name or arn
    string stream_arn = 2;
    // stream metering mode
    StreamModeDetails stream_mode_details = 3;


}

message UpdateStreamModeResponse {
    // Result of request will be inside operation.
    Ydb.Operations.Operation operation = 1;
}

message UpdateStreamModeResult {
}