|
35 | 35 | import tech.ydb.topic.read.SyncReader;
|
36 | 36 | import tech.ydb.topic.read.impl.AsyncReaderImpl;
|
37 | 37 | import tech.ydb.topic.read.impl.SyncReaderImpl;
|
| 38 | +import tech.ydb.topic.settings.AlterAutoPartitioningWriteStrategySettings; |
38 | 39 | import tech.ydb.topic.settings.AlterConsumerSettings;
|
39 | 40 | import tech.ydb.topic.settings.AlterPartitioningSettings;
|
40 | 41 | import tech.ydb.topic.settings.AlterTopicSettings;
|
| 42 | +import tech.ydb.topic.settings.AutoPartitioningStrategy; |
| 43 | +import tech.ydb.topic.settings.AutoPartitioningWriteStrategySettings; |
41 | 44 | import tech.ydb.topic.settings.CommitOffsetSettings;
|
42 | 45 | import tech.ydb.topic.settings.CreateTopicSettings;
|
43 | 46 | import tech.ydb.topic.settings.DescribeConsumerSettings;
|
@@ -104,7 +107,23 @@ public CompletableFuture<Status> createTopic(String path, CreateTopicSettings se
|
104 | 107 | if (partitioningSettings != null) {
|
105 | 108 | requestBuilder.setPartitioningSettings(YdbTopic.PartitioningSettings.newBuilder()
|
106 | 109 | .setMinActivePartitions(partitioningSettings.getMinActivePartitions())
|
107 |
| - .setPartitionCountLimit(partitioningSettings.getPartitionCountLimit())); |
| 110 | + .setPartitionCountLimit(partitioningSettings.getPartitionCountLimit()) |
| 111 | + .setAutoPartitioningSettings(YdbTopic.AutoPartitioningSettings.newBuilder() |
| 112 | + .setStrategy(toProto(partitioningSettings.getAutoPartitioningStrategy())))); |
| 113 | + |
| 114 | + AutoPartitioningWriteStrategySettings writeStrategySettings = partitioningSettings |
| 115 | + .getWriteStrategySettings(); |
| 116 | + |
| 117 | + if (writeStrategySettings != null) { |
| 118 | + requestBuilder.getPartitioningSettingsBuilder().getAutoPartitioningSettingsBuilder() |
| 119 | + .setPartitionWriteSpeed(YdbTopic.AutoPartitioningWriteSpeedStrategy.newBuilder() |
| 120 | + .setStabilizationWindow(ProtobufUtils.durationToProto( |
| 121 | + writeStrategySettings.getStabilizationWindow() |
| 122 | + )) |
| 123 | + .setDownUtilizationPercent(writeStrategySettings.getDownUtilizationPercent()) |
| 124 | + .setUpUtilizationPercent(writeStrategySettings.getUpUtilizationPercent()) |
| 125 | + ); |
| 126 | + } |
108 | 127 | }
|
109 | 128 |
|
110 | 129 | Duration retentionPeriod = settings.getRetentionPeriod();
|
@@ -145,6 +164,30 @@ public CompletableFuture<Status> alterTopic(String path, AlterTopicSettings sett
|
145 | 164 | if (partitionCountLimit != null) {
|
146 | 165 | builder.setSetPartitionCountLimit(partitionCountLimit);
|
147 | 166 | }
|
| 167 | + AutoPartitioningStrategy autoPartitioningStrategy = partitioningSettings.getAutoPartitioningStrategy(); |
| 168 | + if (autoPartitioningStrategy != null) { |
| 169 | + YdbTopic.AutoPartitioningStrategy protoReference = toProto(autoPartitioningStrategy); |
| 170 | + builder.getAlterAutoPartitioningSettingsBuilder().setSetStrategy(protoReference); |
| 171 | + } |
| 172 | + AlterAutoPartitioningWriteStrategySettings writeStrategySettings = partitioningSettings |
| 173 | + .getWriteStrategySettings(); |
| 174 | + if (writeStrategySettings != null) { |
| 175 | + Duration stabilizationWindow = writeStrategySettings.getStabilizationWindow(); |
| 176 | + if (stabilizationWindow != null) { |
| 177 | + builder.getAlterAutoPartitioningSettingsBuilder().getSetPartitionWriteSpeedBuilder() |
| 178 | + .setSetStabilizationWindow(ProtobufUtils.durationToProto(stabilizationWindow)); |
| 179 | + } |
| 180 | + Integer upUtilizationPercent = writeStrategySettings.getUpUtilizationPercent(); |
| 181 | + if (upUtilizationPercent != null) { |
| 182 | + builder.getAlterAutoPartitioningSettingsBuilder().getSetPartitionWriteSpeedBuilder() |
| 183 | + .setSetUpUtilizationPercent(upUtilizationPercent); |
| 184 | + } |
| 185 | + Integer downUtilizationPercent = writeStrategySettings.getDownUtilizationPercent(); |
| 186 | + if (downUtilizationPercent != null) { |
| 187 | + builder.getAlterAutoPartitioningSettingsBuilder().getSetPartitionWriteSpeedBuilder() |
| 188 | + .setSetDownUtilizationPercent(downUtilizationPercent); |
| 189 | + } |
| 190 | + } |
148 | 191 | requestBuilder.setAlterPartitioningSettings(builder);
|
149 | 192 | }
|
150 | 193 |
|
@@ -273,11 +316,26 @@ private TopicDescription mapDescribeTopic(YdbTopic.DescribeTopicResult result) {
|
273 | 316 | .setMeteringMode(fromProto(result.getMeteringMode()));
|
274 | 317 |
|
275 | 318 | YdbTopic.PartitioningSettings partitioningSettings = result.getPartitioningSettings();
|
276 |
| - description.setPartitioningSettings(PartitioningSettings.newBuilder() |
| 319 | + YdbTopic.AutoPartitioningSettings autoPartitioningSettings = partitioningSettings.getAutoPartitioningSettings(); |
| 320 | + YdbTopic.AutoPartitioningStrategy autoPartitioningStrategy = autoPartitioningSettings.getStrategy(); |
| 321 | + |
| 322 | + PartitioningSettings.Builder partitioningDescription = PartitioningSettings.newBuilder() |
277 | 323 | .setMinActivePartitions(partitioningSettings.getMinActivePartitions())
|
278 | 324 | .setPartitionCountLimit(partitioningSettings.getPartitionCountLimit())
|
| 325 | + .setAutoPartitioningStrategy(fromProto(autoPartitioningStrategy)); |
| 326 | + |
| 327 | + YdbTopic.AutoPartitioningWriteSpeedStrategy partitionWriteSpeed = autoPartitioningSettings |
| 328 | + .getPartitionWriteSpeed(); |
| 329 | + partitioningDescription.setWriteStrategySettings(AutoPartitioningWriteStrategySettings.newBuilder() |
| 330 | + .setStabilizationWindow(ProtobufUtils.protoToDuration( |
| 331 | + partitionWriteSpeed.getStabilizationWindow() |
| 332 | + )) |
| 333 | + .setUpUtilizationPercent(partitionWriteSpeed.getUpUtilizationPercent()) |
| 334 | + .setDownUtilizationPercent(partitionWriteSpeed.getDownUtilizationPercent()) |
279 | 335 | .build());
|
280 | 336 |
|
| 337 | + description.setPartitioningSettings(partitioningDescription.build()); |
| 338 | + |
281 | 339 | List<PartitionInfo> partitions = new ArrayList<>();
|
282 | 340 | for (YdbTopic.DescribeTopicResult.PartitionInfo partition : result.getPartitionsList()) {
|
283 | 341 | PartitionInfo.Builder partitionBuilder = PartitionInfo.newBuilder()
|
@@ -391,6 +449,36 @@ private static YdbTopic.SupportedCodecs toProto(SupportedCodecs supportedCodecs)
|
391 | 449 | return codecsBuilder.build();
|
392 | 450 | }
|
393 | 451 |
|
| 452 | + private static AutoPartitioningStrategy fromProto(YdbTopic.AutoPartitioningStrategy autoPartitioningStrategy) { |
| 453 | + switch (autoPartitioningStrategy) { |
| 454 | + case AUTO_PARTITIONING_STRATEGY_PAUSED: |
| 455 | + return AutoPartitioningStrategy.PAUSED; |
| 456 | + case AUTO_PARTITIONING_STRATEGY_SCALE_UP: |
| 457 | + return AutoPartitioningStrategy.SCALE_UP; |
| 458 | + case AUTO_PARTITIONING_STRATEGY_SCALE_UP_AND_DOWN: |
| 459 | + return AutoPartitioningStrategy.SCALE_UP_AND_DOWN; |
| 460 | + case AUTO_PARTITIONING_STRATEGY_DISABLED: |
| 461 | + return AutoPartitioningStrategy.DISABLED; |
| 462 | + default: |
| 463 | + return null; |
| 464 | + } |
| 465 | + } |
| 466 | + |
| 467 | + private static YdbTopic.AutoPartitioningStrategy toProto(AutoPartitioningStrategy autoPartitioningStrategy) { |
| 468 | + switch (autoPartitioningStrategy) { |
| 469 | + case PAUSED: |
| 470 | + return YdbTopic.AutoPartitioningStrategy.AUTO_PARTITIONING_STRATEGY_PAUSED; |
| 471 | + case SCALE_UP: |
| 472 | + return YdbTopic.AutoPartitioningStrategy.AUTO_PARTITIONING_STRATEGY_SCALE_UP; |
| 473 | + case SCALE_UP_AND_DOWN: |
| 474 | + return YdbTopic.AutoPartitioningStrategy.AUTO_PARTITIONING_STRATEGY_SCALE_UP_AND_DOWN; |
| 475 | + case DISABLED: |
| 476 | + return YdbTopic.AutoPartitioningStrategy.AUTO_PARTITIONING_STRATEGY_DISABLED; |
| 477 | + default: |
| 478 | + throw new IllegalArgumentException("Unknown auto partitioning strategy: " + autoPartitioningStrategy); |
| 479 | + } |
| 480 | + } |
| 481 | + |
394 | 482 | @Override
|
395 | 483 | public void close() {
|
396 | 484 | logger.debug("TopicClientImpl.close() is called");
|
|
0 commit comments