Skip to content

Commit cd177d4

Browse files
CyberROFLspuchin
authored andcommitted
24-3: Async replication: configurable default retention period (ydb-platform#8292)
1 parent b0f9477 commit cd177d4

File tree

8 files changed

+35
-7
lines changed

8 files changed

+35
-7
lines changed

ydb/core/base/appdata.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <ydb/core/protos/config.pb.h>
2020
#include <ydb/core/protos/key.pb.h>
2121
#include <ydb/core/protos/pqconfig.pb.h>
22+
#include <ydb/core/protos/replication.pb.h>
2223
#include <ydb/core/protos/stream.pb.h>
2324
#include <ydb/core/protos/netclassifier.pb.h>
2425
#include <ydb/core/protos/datashard_config.pb.h>
@@ -61,6 +62,7 @@ struct TAppData::TImpl {
6162
NKikimrConfig::TGraphConfig GraphConfig;
6263
NKikimrSharedCache::TSharedCacheConfig SharedCacheConfig;
6364
NKikimrConfig::TMetadataCacheConfig MetadataCacheConfig;
65+
NKikimrReplication::TReplicationDefaults ReplicationConfig;
6466
};
6567

6668
TAppData::TAppData(
@@ -113,6 +115,7 @@ TAppData::TAppData(
113115
, GraphConfig(Impl->GraphConfig)
114116
, SharedCacheConfig(Impl->SharedCacheConfig)
115117
, MetadataCacheConfig(Impl->MetadataCacheConfig)
118+
, ReplicationConfig(Impl->ReplicationConfig)
116119
, KikimrShouldContinue(kikimrShouldContinue)
117120
{}
118121

ydb/core/base/appdata_fwd.h

+5
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ namespace NKikimrConfig {
6565
class TMetadataCacheConfig;
6666
}
6767

68+
namespace NKikimrReplication {
69+
class TReplicationDefaults;
70+
}
71+
6872
namespace NKikimrNetClassifier {
6973
class TNetClassifierDistributableConfig;
7074
class TNetClassifierConfig;
@@ -213,6 +217,7 @@ struct TAppData {
213217
NKikimrConfig::TGraphConfig& GraphConfig;
214218
NKikimrSharedCache::TSharedCacheConfig& SharedCacheConfig;
215219
NKikimrConfig::TMetadataCacheConfig& MetadataCacheConfig;
220+
NKikimrReplication::TReplicationDefaults& ReplicationConfig;
216221
bool EnforceUserTokenRequirement = false;
217222
bool EnforceUserTokenCheckRequirement = false; // check token if it was specified
218223
bool AllowHugeKeyValueDeletes = true; // delete when all clients limit deletes per request

ydb/core/driver_lib/run/run.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,10 @@ void TKikimrRunner::InitializeAppData(const TKikimrRunConfig& runConfig)
11261126
AppData->MetadataCacheConfig.CopyFrom(runConfig.AppConfig.GetMetadataCacheConfig());
11271127
}
11281128

1129+
if (runConfig.AppConfig.HasReplicationConfig()) {
1130+
AppData->ReplicationConfig = runConfig.AppConfig.GetReplicationConfig();
1131+
}
1132+
11291133
// setup resource profiles
11301134
AppData->ResourceProfiles = new TResourceProfiles;
11311135
if (runConfig.AppConfig.GetBootstrapConfig().ResourceProfilesSize())

ydb/core/protos/config.proto

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import "ydb/core/protos/local.proto";
2424
import "ydb/core/protos/netclassifier.proto";
2525
import "ydb/core/protos/node_broker.proto";
2626
import "ydb/core/protos/pqconfig.proto";
27+
import "ydb/core/protos/replication.proto";
2728
import "ydb/core/protos/resource_broker.proto";
2829
import "ydb/core/protos/shared_cache.proto";
2930
import "ydb/core/protos/stream.proto";
@@ -1902,6 +1903,7 @@ message TAppConfig {
19021903
optional TBlobCacheConfig BlobCacheConfig = 78;
19031904
optional TLimiterConfig CompDiskLimiterConfig = 79;
19041905
optional TMetadataCacheConfig MetadataCacheConfig = 80;
1906+
optional NKikimrReplication.TReplicationDefaults ReplicationConfig = 83;
19051907

19061908
repeated TNamedConfig NamedConfigs = 100;
19071909
optional string ClusterYamlConfig = 101;

ydb/core/protos/console_config.proto

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ message TConfigItem {
139139
S3ProxyResolverConfigItem = 76;
140140
BackgroundCleaningConfigItem = 77;
141141
MetadataCacheConfigItem = 80;
142+
ReplicationConfigItem = 83;
142143

143144
NamedConfigsItem = 100;
144145
ClusterYamlConfigItem = 101;

ydb/core/protos/replication.proto

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import "ydb/public/api/protos/ydb_issue_message.proto";
55
package NKikimrReplication;
66
option java_package = "ru.yandex.kikimr.proto";
77

8+
message TReplicationDefaults {
9+
optional int32 RetentionPeriodSeconds = 1 [default = 86400]; // 1d
10+
}
11+
812
message TStaticCredentials {
913
optional string User = 1;
1014
optional string Password = 2 [(Ydb.sensitive) = true];

ydb/core/tx/replication/controller/stream_creator.cpp

+14-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include "target_with_stream.h"
55
#include "util.h"
66

7+
#include <ydb/core/base/appdata.h>
78
#include <ydb/core/base/path.h>
9+
#include <ydb/core/protos/replication.pb.h>
810
#include <ydb/core/tx/replication/ydb_proxy/ydb_proxy.h>
911
#include <ydb/library/actors/core/actor_bootstrapped.h>
1012
#include <ydb/library/actors/core/hfunc.h>
@@ -16,9 +18,12 @@
1618
namespace NKikimr::NReplication::NController {
1719

1820
class TStreamCreator: public TActorBootstrapped<TStreamCreator> {
19-
static NYdb::NTable::TChangefeedDescription MakeChangefeed(const TString& name, const NJson::TJsonMap& attrs) {
21+
static NYdb::NTable::TChangefeedDescription MakeChangefeed(
22+
const TString& name, const TDuration& retentionPeriod, const NJson::TJsonMap& attrs)
23+
{
2024
using namespace NYdb::NTable;
2125
return TChangefeedDescription(name, EChangefeedMode::Updates, EChangefeedFormat::Json)
26+
.WithRetentionPeriod(retentionPeriod)
2227
.WithInitialScan()
2328
.AddAttribute("__async_replication", NJson::WriteJson(attrs, false));
2429
}
@@ -133,14 +138,15 @@ class TStreamCreator: public TActorBootstrapped<TStreamCreator> {
133138
TReplication::ETargetKind kind,
134139
const TString& srcPath,
135140
const TString& dstPath,
136-
const TString& streamName)
141+
const TString& streamName,
142+
const TDuration& streamRetentionPeriod)
137143
: Parent(parent)
138144
, YdbProxy(proxy)
139145
, ReplicationId(rid)
140146
, TargetId(tid)
141147
, Kind(kind)
142148
, SrcPath(srcPath)
143-
, Changefeed(MakeChangefeed(streamName, NJson::TJsonMap{
149+
, Changefeed(MakeChangefeed(streamName, streamRetentionPeriod, NJson::TJsonMap{
144150
{"path", dstPath},
145151
{"id", ToString(rid)},
146152
}))
@@ -175,13 +181,15 @@ IActor* CreateStreamCreator(TReplication* replication, ui64 targetId, const TAct
175181
Y_ABORT_UNLESS(target);
176182
return CreateStreamCreator(ctx.SelfID, replication->GetYdbProxy(),
177183
replication->GetId(), target->GetId(), target->GetKind(),
178-
target->GetSrcPath(), target->GetDstPath(), target->GetStreamName());
184+
target->GetSrcPath(), target->GetDstPath(), target->GetStreamName(),
185+
TDuration::Seconds(AppData()->ReplicationConfig.GetRetentionPeriodSeconds()));
179186
}
180187

181188
IActor* CreateStreamCreator(const TActorId& parent, const TActorId& proxy, ui64 rid, ui64 tid,
182-
TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath, const TString& streamName)
189+
TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath,
190+
const TString& streamName, const TDuration& streamRetentionPeriod)
183191
{
184-
return new TStreamCreator(parent, proxy, rid, tid, kind, srcPath, dstPath, streamName);
192+
return new TStreamCreator(parent, proxy, rid, tid, kind, srcPath, dstPath, streamName, streamRetentionPeriod);
185193
}
186194

187195
}

ydb/core/tx/replication/controller/stream_creator.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace NKikimr::NReplication::NController {
66

77
IActor* CreateStreamCreator(TReplication* replication, ui64 targetId, const TActorContext& ctx);
88
IActor* CreateStreamCreator(const TActorId& parent, const TActorId& proxy, ui64 rid, ui64 tid,
9-
TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath, const TString& streamName);
9+
TReplication::ETargetKind kind, const TString& srcPath, const TString& dstPath,
10+
const TString& streamName, const TDuration& streamRetentionPeriod);
1011

1112
}

0 commit comments

Comments
 (0)