77#include < ydb/core/base/tablet_pipecache.h>
88#include < ydb/core/cms/console/configs_dispatcher.h>
99#include < ydb/core/protos/console_config.pb.h>
10+ #include < ydb/core/protos/replication.pb.h>
1011#include < ydb/core/protos/schemeshard/operations.pb.h>
1112#include < ydb/core/tx/replication/ydb_proxy/ydb_proxy.h>
1213#include < ydb/core/tx/scheme_board/events.h>
@@ -226,10 +227,8 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
226227 AllocateTxId ();
227228 }
228229
229- static void FillReplicationConfig (NKikimrSchemeOp::TTableReplicationConfig& replicationConfig) {
230- // TODO: support other modes
231- replicationConfig.SetMode (NKikimrSchemeOp::TTableReplicationConfig::REPLICATION_MODE_READ_ONLY);
232- replicationConfig.SetConsistency (NKikimrSchemeOp::TTableReplicationConfig::CONSISTENCY_WEAK);
230+ void FillReplicationConfig (NKikimrSchemeOp::TTableReplicationConfig& replicationConfig) const {
231+ NController::FillReplicationConfig (replicationConfig, Mode, Consistency);
233232 }
234233
235234 void AllocateTxId () {
@@ -375,22 +374,7 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
375374 return false ;
376375 }
377376
378- const auto & replicationConfig = got.GetReplicationConfig ();
379-
380- switch (replicationConfig.GetMode ()) {
381- case NKikimrSchemeOp::TTableReplicationConfig::REPLICATION_MODE_READ_ONLY:
382- break ;
383- default :
384- error = " Unsupported replication mode" ;
385- return false ;
386- }
387-
388- switch (replicationConfig.GetConsistency ()) {
389- case NKikimrSchemeOp::TTableReplicationConfig::CONSISTENCY_WEAK:
390- break ;
391- default :
392- error = TStringBuilder () << " Unsupported replication consistency"
393- << " : " << static_cast <int >(replicationConfig.GetConsistency ());
377+ if (!CheckReplicationConfig (got.GetReplicationConfig (), Mode, Consistency, error)) {
394378 return false ;
395379 }
396380
@@ -623,7 +607,9 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
623607 ui64 tid,
624608 TReplication::ETargetKind kind,
625609 const TString& srcPath,
626- const TString& dstPath)
610+ const TString& dstPath,
611+ EReplicationMode mode,
612+ EReplicaConsistency consistency)
627613 : Parent(parent)
628614 , SchemeShardId(schemeShardId)
629615 , YdbProxy(proxy)
@@ -633,6 +619,8 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
633619 , Kind(kind)
634620 , SrcPath(srcPath)
635621 , DstPath(dstPath)
622+ , Mode(mode)
623+ , Consistency(consistency)
636624 , LogPrefix(" DstCreator" , ReplicationId, TargetId)
637625 {
638626 }
@@ -665,6 +653,8 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
665653 const TReplication::ETargetKind Kind;
666654 const TString SrcPath;
667655 const TString DstPath;
656+ const EReplicationMode Mode;
657+ const EReplicaConsistency Consistency;
668658 const TActorLogPrefix LogPrefix;
669659
670660 TPathId DomainKey;
@@ -680,17 +670,72 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
680670
681671}; // TDstCreator
682672
673+ static NKikimrSchemeOp::TTableReplicationConfig::EConsistency ConvertConsistency (EReplicaConsistency value) {
674+ switch (value) {
675+ case EReplicaConsistency::Weak:
676+ return NKikimrSchemeOp::TTableReplicationConfig::CONSISTENCY_WEAK;
677+ case EReplicaConsistency::Strong:
678+ return NKikimrSchemeOp::TTableReplicationConfig::CONSISTENCY_STRONG;
679+ }
680+ }
681+
682+ static NKikimrSchemeOp::TTableReplicationConfig::EReplicationMode ConvertMode (EReplicationMode value) {
683+ switch (value) {
684+ case EReplicationMode::ReadOnly:
685+ return NKikimrSchemeOp::TTableReplicationConfig::REPLICATION_MODE_READ_ONLY;
686+ }
687+ }
688+
689+ void FillReplicationConfig (
690+ NKikimrSchemeOp::TTableReplicationConfig& out,
691+ EReplicationMode mode,
692+ EReplicaConsistency consistency
693+ ) {
694+ out.SetMode (ConvertMode (mode));
695+ out.SetConsistency (ConvertConsistency (consistency));
696+ }
697+
698+ bool CheckReplicationConfig (
699+ const NKikimrSchemeOp::TTableReplicationConfig& in,
700+ EReplicationMode mode,
701+ EReplicaConsistency consistency,
702+ TString& error
703+ ) {
704+ if (in.GetMode () != ConvertMode (mode)) {
705+ error = TStringBuilder () << " Replication mode mismatch"
706+ << " : expected: " << ConvertMode (mode)
707+ << " , got: " << static_cast <int >(in.GetMode ());
708+ return false ;
709+ }
710+
711+ if (in.GetConsistency () != ConvertConsistency (consistency)) {
712+ error = TStringBuilder () << " Replication consistency mismatch"
713+ << " : expected: " << ConvertConsistency (consistency)
714+ << " , got: " << static_cast <int >(in.GetConsistency ());
715+ return false ;
716+ }
717+
718+ return true ;
719+ }
720+
683721IActor* CreateDstCreator (TReplication* replication, ui64 targetId, const TActorContext& ctx) {
684722 const auto * target = replication->FindTarget (targetId);
685723 Y_ABORT_UNLESS (target);
724+
725+ const auto consistency = replication->GetConfig ().HasStrongConsistency ()
726+ ? EReplicaConsistency::Strong
727+ : EReplicaConsistency::Weak;
728+
686729 return CreateDstCreator (ctx.SelfID , replication->GetSchemeShardId (), replication->GetYdbProxy (), replication->GetPathId (),
687- replication->GetId (), target->GetId (), target->GetKind (), target->GetSrcPath (), target->GetDstPath ());
730+ replication->GetId (), target->GetId (), target->GetKind (), target->GetSrcPath (), target->GetDstPath (),
731+ EReplicationMode::ReadOnly, consistency);
688732}
689733
690734IActor* CreateDstCreator (const TActorId& parent, ui64 schemeShardId, const TActorId& proxy, const TPathId& pathId,
691- ui64 rid, ui64 tid, TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath)
735+ ui64 rid, ui64 tid, TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath,
736+ EReplicationMode mode, EReplicaConsistency consistency)
692737{
693- return new TDstCreator (parent, schemeShardId, proxy, pathId, rid, tid, kind, srcPath, dstPath);
738+ return new TDstCreator (parent, schemeShardId, proxy, pathId, rid, tid, kind, srcPath, dstPath, mode, consistency );
694739}
695740
696741}
0 commit comments