@@ -432,58 +432,6 @@ class TDropVolumeRequest : public TRpcSchemeRequestActor<TDropVolumeRequest, TEv
432
432
}
433
433
};
434
434
435
- class TAlterVolumeRequest : public TRpcSchemeRequestActor <TAlterVolumeRequest, TEvAlterVolumeKeyValueRequest> {
436
- public:
437
- using TBase = TRpcSchemeRequestActor<TAlterVolumeRequest, TEvAlterVolumeKeyValueRequest>;
438
- using TBase::TBase;
439
-
440
- void Bootstrap (const TActorContext& ctx) {
441
- TBase::Bootstrap (ctx);
442
- Become (&TAlterVolumeRequest::StateFunc);
443
- SendProposeRequest (ctx);
444
- }
445
-
446
- void SendProposeRequest (const TActorContext &ctx) {
447
- const auto req = this ->GetProtoRequest ();
448
-
449
- std::pair<TString, TString> pathPair;
450
- try {
451
- pathPair = SplitPath (req->path ());
452
- } catch (const std::exception & ex) {
453
- Request_->RaiseIssue (NYql::ExceptionToIssue (ex));
454
- return Reply (StatusIds::BAD_REQUEST, ctx);
455
- }
456
- const auto & workingDir = pathPair.first ;
457
- const auto & name = pathPair.second ;
458
-
459
- std::unique_ptr<TEvTxUserProxy::TEvProposeTransaction> proposeRequest = this ->CreateProposeTransaction ();
460
- NKikimrTxUserProxy::TEvProposeTransaction& record = proposeRequest->Record ;
461
- NKikimrSchemeOp::TModifyScheme* modifyScheme = record.MutableTransaction ()->MutableModifyScheme ();
462
- modifyScheme->SetWorkingDir (workingDir);
463
- NKikimrSchemeOp::TAlterSolomonVolume* tableDesc = nullptr ;
464
-
465
- modifyScheme->SetOperationType (NKikimrSchemeOp::EOperationType::ESchemeOpAlterSolomonVolume);
466
- tableDesc = modifyScheme->MutableAlterSolomonVolume ();
467
- tableDesc->SetName (name);
468
- tableDesc->SetPartitionCount (req->alter_partition_count ());
469
-
470
- if (GetProtoRequest ()->has_storage_config ()) {
471
- tableDesc->SetUpdateChannelsBinding (true );
472
- auto &storageConfig = GetProtoRequest ()->storage_config ();
473
- auto *internalStorageConfig = tableDesc->MutableStorageConfig ();
474
- AssignPoolKinds (storageConfig, internalStorageConfig);
475
- } else {
476
- tableDesc->SetUpdateChannelsBinding (false );
477
- tableDesc->SetChannelProfileId (0 );
478
- }
479
-
480
- ctx.Send (MakeTxProxyID (), proposeRequest.release ());
481
- }
482
-
483
- STFUNC (StateFunc) {
484
- return TBase::StateWork (ev);
485
- }
486
- };
487
435
488
436
template <typename TDerived>
489
437
class TBaseKeyValueRequest {
@@ -621,12 +569,10 @@ class TDescribeVolumeRequest
621
569
Ydb::KeyValue::DescribeVolumeResult result;
622
570
result.set_path (this ->GetProtoRequest ()->path ());
623
571
result.set_partition_count (desc.PartitionsSize ());
624
- if (desc.PartitionsSize () > 0 ) {
625
- auto *storageConfig = result.mutable_storage_config ();
626
- for (auto &channel : desc.GetPartitions (0 ).GetBoundChannels ()) {
627
- auto *channelBind = storageConfig->add_channel ();
628
- channelBind->set_media (channel.GetStoragePoolName ());
629
- }
572
+ auto *storageConfig = result.mutable_storage_config ();
573
+ for (auto &channel : desc.GetBoundChannels ()) {
574
+ auto *channelBind = storageConfig->add_channel ();
575
+ channelBind->set_media (channel.GetStoragePoolName ());
630
576
}
631
577
this ->ReplyWithResult (Ydb::StatusIds::SUCCESS, result, TActivationContext::AsActorContext ());
632
578
}
@@ -640,6 +586,95 @@ class TDescribeVolumeRequest
640
586
};
641
587
642
588
589
+ class TAlterVolumeRequest
590
+ : public TRpcSchemeRequestActor<TAlterVolumeRequest, TEvAlterVolumeKeyValueRequest>
591
+ , public TBaseKeyValueRequest<TAlterVolumeRequest>
592
+ {
593
+ public:
594
+ using TBase = TRpcSchemeRequestActor<TAlterVolumeRequest, TEvAlterVolumeKeyValueRequest>;
595
+ using TBase::TBase;
596
+ using TBaseKeyValueRequest::TBaseKeyValueRequest;
597
+ friend class TBaseKeyValueRequest <TAlterVolumeRequest>;
598
+
599
+ void Bootstrap (const TActorContext& ctx) {
600
+ TBase::Bootstrap (ctx);
601
+ Become (&TAlterVolumeRequest::StateWork);
602
+ if (GetProtoRequest ()->has_storage_config ()) {
603
+ StorageConfig = GetProtoRequest ()->storage_config ();
604
+ SendProposeRequest (ctx);
605
+ } else {
606
+ OnBootstrap ();
607
+ }
608
+ }
609
+
610
+ bool ValidateRequest (Ydb::StatusIds::StatusCode& /* status*/ , NYql::TIssues& /* issues*/ ) {
611
+ return true ;
612
+ }
613
+
614
+ void SendProposeRequest (const TActorContext &ctx) {
615
+ const auto req = this ->GetProtoRequest ();
616
+
617
+ std::pair<TString, TString> pathPair;
618
+ try {
619
+ pathPair = SplitPath (req->path ());
620
+ } catch (const std::exception & ex) {
621
+ Request_->RaiseIssue (NYql::ExceptionToIssue (ex));
622
+ return Reply (StatusIds::BAD_REQUEST, ctx);
623
+ }
624
+ const auto & workingDir = pathPair.first ;
625
+ const auto & name = pathPair.second ;
626
+
627
+ std::unique_ptr<TEvTxUserProxy::TEvProposeTransaction> proposeRequest = this ->CreateProposeTransaction ();
628
+ NKikimrTxUserProxy::TEvProposeTransaction& record = proposeRequest->Record ;
629
+ NKikimrSchemeOp::TModifyScheme* modifyScheme = record.MutableTransaction ()->MutableModifyScheme ();
630
+ modifyScheme->SetWorkingDir (workingDir);
631
+ NKikimrSchemeOp::TAlterSolomonVolume* tableDesc = nullptr ;
632
+
633
+ modifyScheme->SetOperationType (NKikimrSchemeOp::EOperationType::ESchemeOpAlterSolomonVolume);
634
+ tableDesc = modifyScheme->MutableAlterSolomonVolume ();
635
+ tableDesc->SetName (name);
636
+ tableDesc->SetPartitionCount (req->alter_partition_count ());
637
+
638
+ if (GetProtoRequest ()->has_storage_config ()) {
639
+ tableDesc->SetUpdateChannelsBinding (true );
640
+ }
641
+ auto *internalStorageConfig = tableDesc->MutableStorageConfig ();
642
+ AssignPoolKinds (StorageConfig, internalStorageConfig);
643
+
644
+ ctx.Send (MakeTxProxyID (), proposeRequest.release ());
645
+ }
646
+
647
+ STFUNC (StateWork) {
648
+ Cerr << " TAlterVolumeRequest::StateWork; received event: " << ev->GetTypeName () << Endl;
649
+ switch (ev->GetTypeRewrite ()) {
650
+ hFunc (TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle );
651
+ default :
652
+ return TBase::StateWork (ev);
653
+ }
654
+ }
655
+
656
+ void Handle (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr &ev) {
657
+ TEvTxProxySchemeCache::TEvNavigateKeySetResult* res = ev->Get ();
658
+ NSchemeCache::TSchemeCacheNavigate *request = res->Request .Get ();
659
+
660
+ if (!OnNavigateKeySetResult (ev, NACLib::DescribeSchema)) {
661
+ return ;
662
+ }
663
+
664
+ const NKikimrSchemeOp::TSolomonVolumeDescription &desc = request->ResultSet [0 ].SolomonVolumeInfo ->Description ;
665
+ for (auto &channel : desc.GetBoundChannels ()) {
666
+ auto *channelBind = StorageConfig.add_channel ();
667
+ channelBind->set_media (channel.GetStoragePoolName ());
668
+ }
669
+ SendProposeRequest (TActivationContext::AsActorContext ());
670
+ }
671
+
672
+ private:
673
+ TIntrusiveConstPtr<NACLib::TUserToken> UserToken;
674
+ Ydb::KeyValue::StorageConfig StorageConfig;
675
+ };
676
+
677
+
643
678
class TListLocalPartitionsRequest
644
679
: public TRpcOperationRequestActor<TListLocalPartitionsRequest, TEvListLocalPartitionsKeyValueRequest>
645
680
, public TBaseKeyValueRequest<TListLocalPartitionsRequest>
0 commit comments