Skip to content

Commit 8f8942b

Browse files
Merge branch 'main' into CsPushdown2
2 parents 65dfa83 + 691352a commit 8f8942b

File tree

89 files changed

+1909
-907
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+1909
-907
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/CHANGELOG.md @ydb-platform/changelog-reviewers
12
/*.md @ydb-platform/docs
23

34
/build @ydb-platform/ci

.github/config/muted_ya.txt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ ydb/core/keyvalue/ut_trace TKeyValueTracingTest.ReadHuge
1414
ydb/core/keyvalue/ut_trace TKeyValueTracingTest.ReadSmall
1515
ydb/core/keyvalue/ut_trace TKeyValueTracingTest.WriteHuge
1616
ydb/core/keyvalue/ut_trace TKeyValueTracingTest.WriteSmall
17-
ydb/core/kqp/ut/batch_operations KqpBatchUpdate.Large_3
1817
ydb/core/kqp/ut/batch_operations [*/*] chunk chunk
1918
ydb/core/kqp/ut/cost KqpCost.OlapWriteRow
2019
ydb/core/kqp/ut/federated_query/s3 KqpFederatedQuery.ExecuteScriptWithLargeFile
@@ -23,6 +22,8 @@ ydb/core/kqp/ut/federated_query/s3 sole chunk chunk
2322
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestAggregation
2423
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestFilterCompare
2524
ydb/core/kqp/ut/olap KqpOlapDelete.DeleteWithDiffrentTypesPKColumns-isStream
25+
ydb/core/kqp/ut/olap KqpOlapJson.CompactionVariants
26+
ydb/core/kqp/ut/olap KqpOlapJson.DuplicationCompactionVariants
2627
ydb/core/kqp/ut/olap KqpOlapJson.SwitchAccessorCompactionVariants
2728
ydb/core/kqp/ut/olap KqpOlapOptimizer.OptimizationByTime
2829
ydb/core/kqp/ut/olap KqpOlapSysView.StatsSysViewBytesColumnActualization
@@ -49,6 +50,7 @@ ydb/core/tx/schemeshard/ut_move_reboots TSchemeShardMoveRebootsTest.WithData
4950
ydb/core/tx/schemeshard/ut_move_reboots TSchemeShardMoveRebootsTest.WithDataAndPersistentPartitionStats
5051
ydb/core/tx/tiering/ut ColumnShardTiers.TTLUsage
5152
ydb/core/viewer/ut Viewer.TabletMerging
53+
ydb/library/actors/interconnect/ut_fat InterconnectZcLocalOp.ZcDisabledAfterHiddenCopy
5254
ydb/library/actors/interconnect/ut_huge_cluster HugeCluster.AllToAll
5355
ydb/library/actors/interconnect/ut_huge_cluster sole chunk chunk
5456
ydb/library/yaml_config/ut_transform test_transform.py.TestYamlConfigTransformations.test_basic[args1-dump_ds_init]
@@ -76,9 +78,16 @@ ydb/tests/fq/yds test_recovery.py.TestRecovery.test_ic_disconnection
7678
ydb/tests/fq/yds test_select_limit_db_id.py.TestSelectLimitWithDbId.test_select_same_with_id[v1-mvp_external_ydb_endpoint0]
7779
ydb/tests/fq/yds test_yds_bindings.py.TestBindings.test_yds_insert[v1]
7880
ydb/tests/functional/compatibility sole chunk chunk
81+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_simple[last_stable_to_current_mixed-column]
82+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[current_to_last_stable-column]
83+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[current_to_last_stable-row]
84+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[last_stable_to_current-column]
85+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[last_stable_to_current-row]
86+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[last_stable_to_current_mixed-column]
87+
ydb/tests/functional/compatibility test_compatibility.py.TestCompatibility.test_tpch1[last_stable_to_current_mixed-row]
7988
ydb/tests/functional/compatibility test_followers.py.TestFollowersCompatibility.test_followers_compatability
89+
ydb/tests/functional/compatibility test_stress.py.TestStress.test_kv[mixed-column]
8090
ydb/tests/functional/compatibility test_stress.py.TestStress.test_log[current-column]
81-
ydb/tests/functional/compatibility test_stress.py.TestStress.test_log[last_stable-row]
8291
ydb/tests/functional/compatibility test_stress.py.TestStress.test_log[mixed-column]
8392
ydb/tests/functional/compatibility test_stress.py.TestStress.test_log[mixed-row]
8493
ydb/tests/functional/compatibility test_stress.py.TestStress.test_tpch1[current-column]
@@ -119,14 +128,12 @@ ydb/tests/olap/oom overlapping_portions.py.TestOverlappingPortions.test
119128
ydb/tests/olap/scenario sole chunk chunk
120129
ydb/tests/olap/scenario test_alter_compression.py.TestAlterCompression.test[alter_compression]
121130
ydb/tests/olap/scenario test_alter_tiering.py.TestAlterTiering.test[many_tables]
122-
ydb/tests/olap/scenario test_insert.py.TestInsert.test[read_data_during_bulk_upsert]
123131
ydb/tests/olap/scenario test_read_update_write_load.py.TestReadUpdateWriteLoad.test[read_update_write_load]
124132
ydb/tests/olap/ttl_tiering [data_migration_when_alter_ttl.py] chunk chunk
125133
ydb/tests/olap/ttl_tiering [ttl_delete_s3.py] chunk chunk
126134
ydb/tests/olap/ttl_tiering data_migration_when_alter_ttl.py.TestDataMigrationWhenAlterTtl.test
127135
ydb/tests/olap/ttl_tiering sole chunk chunk
128136
ydb/tests/olap/ttl_tiering ttl_delete_s3.py.TestDeleteS3Ttl.test_delete_s3_tiering
129-
ydb/tests/olap/ttl_tiering ttl_delete_s3.py.TestDeleteS3Ttl.test_ttl_delete
130137
ydb/tests/sql/large sole chunk chunk
131138
ydb/tests/stress/log/tests test_workload.py.TestYdbLogWorkload.test[column]
132139
ydb/tests/stress/log/tests test_workload.py.TestYdbLogWorkload.test[row]

.github/workflows/update_muted_ya.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
branches:
99
description: 'Comma-separated list of branches to process'
1010
required: false
11-
default: 'main,stable-25-1,stable-25-1-1'
11+
default: 'main,stable-25-1,stable-25-1-analytics'
1212

1313
env:
1414
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -29,7 +29,7 @@ jobs:
2929
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
3030
echo "branches=$(echo '${{ github.event.inputs.branches }}' | jq -R -s -c 'split(",")')" >> $GITHUB_OUTPUT
3131
else
32-
echo "branches=$(echo '["main","stable-25-1","stable-25-1-1"]' | jq -c .)" >> $GITHUB_OUTPUT
32+
echo "branches=$(echo '["main","stable-25-1","stable-25-1-analytics"]' | jq -c .)" >> $GITHUB_OUTPUT
3333
fi
3434
3535
update-muted-tests:

ydb/apps/etcd_proxy/service/etcd_watch.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ class TWatchtower : public TActorBootstrapped<TWatchtower> {
602602
sql << "$Leases = select 0L as `lease` union all select `id` as `lease` from `leases` where unwrap(interval('PT1S') * `ttl` + `updated`) > CurrentUtcDatetime(`id`);" << std::endl;
603603
sql << "$Victims = select `key`, `value`, `created`, `modified`, `version`, `lease` from `current` as h left only join $Leases as l using(`lease`);" << std::endl;
604604

605-
sql << "insert into `content`" << std::endl;
605+
sql << "insert into `history`" << std::endl;
606606
sql << "select `key`, `created`, " << revName << " as `modified`, 0L as `version`, `value`, `lease` from $Victims;" << std::endl;
607607
sql << "delete from `current` on select `key` from $Victims;" << std::endl;
608608

ydb/apps/ydb/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Improved `ydb import file` commands to support files with BOM (Byte Order Mark).
12
* Brackets are now inserted in pairs in YDB CLI interactive mode
23
* Added `--scale` option to `ydb workload tpch init` and `ydb workload tpcds init` commands. Sets the percentage of the benchmark's data size and workload to use, relative to full scale.
34
* Added "--no-discovery" option. It allows to skip discovery and use user provided endpoint to connect to YDB cluster.

ydb/core/base/appdata.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ struct TAppData::TImpl {
7373
NKikimrConfig::TDataErasureConfig DataErasureConfig;
7474
NKikimrConfig::THealthCheckConfig HealthCheckConfig;
7575
NKikimrConfig::TWorkloadManagerConfig WorkloadManagerConfig;
76+
NKikimrConfig::TQueryServiceConfig QueryServiceConfig;
7677
};
7778

7879
TAppData::TAppData(
@@ -132,6 +133,7 @@ TAppData::TAppData(
132133
, DataErasureConfig(Impl->DataErasureConfig)
133134
, HealthCheckConfig(Impl->HealthCheckConfig)
134135
, WorkloadManagerConfig(Impl->WorkloadManagerConfig)
136+
, QueryServiceConfig(Impl->QueryServiceConfig)
135137
, KikimrShouldContinue(kikimrShouldContinue)
136138
, TracingConfigurator(MakeIntrusive<NJaegerTracing::TSamplingThrottlingConfigurator>(TimeProvider, RandomProvider))
137139
{}

ydb/core/base/appdata_fwd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ namespace NKikimrConfig {
7575
class TFeatureFlags;
7676
class THealthCheckConfig;
7777
class TWorkloadManagerConfig;
78+
class TQueryServiceConfig;
7879
}
7980

8081
namespace NKikimrReplication {
@@ -251,6 +252,7 @@ struct TAppData {
251252
NKikimrConfig::TDataErasureConfig& DataErasureConfig;
252253
NKikimrConfig::THealthCheckConfig& HealthCheckConfig;
253254
NKikimrConfig::TWorkloadManagerConfig& WorkloadManagerConfig;
255+
NKikimrConfig::TQueryServiceConfig& QueryServiceConfig;
254256
bool EnforceUserTokenRequirement = false;
255257
bool EnforceUserTokenCheckRequirement = false; // check token if it was specified
256258
bool AllowHugeKeyValueDeletes = true; // delete when all clients limit deletes per request

ydb/core/driver_lib/run/run.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,10 @@ void TKikimrRunner::InitializeAppData(const TKikimrRunConfig& runConfig)
12531253
AppData->WorkloadManagerConfig = runConfig.AppConfig.GetWorkloadManagerConfig();
12541254
}
12551255

1256+
if (runConfig.AppConfig.HasQueryServiceConfig()) {
1257+
AppData->QueryServiceConfig = runConfig.AppConfig.GetQueryServiceConfig();
1258+
}
1259+
12561260
// setup resource profiles
12571261
AppData->ResourceProfiles = new TResourceProfiles;
12581262
if (runConfig.AppConfig.GetBootstrapConfig().ResourceProfilesSize())

ydb/core/fq/libs/quota_manager/quota_manager.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ TString ToString(const THashMap<TString, TQuotaCachedUsage>& usageMap) {
141141
}
142142

143143
class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagementService> {
144+
using TLimits = decltype(TEvQuotaService::TQuotaSetRequest::Limits);
144145
public:
145146
TQuotaManagementService(
146147
const NConfig::TQuotasManagerConfig& config,
@@ -261,23 +262,23 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
261262

262263
if (it == subjectMap.end()) {
263264
ReadQuota(subjectType, subjectId,
264-
[this, ev=ev](TReadQuotaExecuter& executer) {
265+
[this, allowStaleUsage=ev->Get()->AllowStaleUsage, sender=ev->Sender, cookie=ev->Cookie](TReadQuotaExecuter& executer) {
265266
// This block is executed in correct self-context, no locks/syncs required
266267
auto& subjectMap = this->QuotaCacheMap[executer.State.SubjectType];
267268
auto& cache = subjectMap[executer.State.SubjectId];
268269
LOG_D(executer.State.SubjectType << "." << executer.State.SubjectId << ToString(cache.UsageMap) << " LOADED");
269-
CheckUsageMaybeReply(executer.State.SubjectType, executer.State.SubjectId, cache, ev);
270+
CheckUsageMaybeReply(executer.State.SubjectType, executer.State.SubjectId, cache, allowStaleUsage, sender, cookie);
270271
}
271272
);
272273
} else {
273-
CheckUsageMaybeReply(subjectType, subjectId, it->second, ev);
274+
CheckUsageMaybeReply(subjectType, subjectId, it->second, ev->Get()->AllowStaleUsage, ev->Sender, ev->Cookie);
274275
}
275276
}
276277

277-
void CheckUsageMaybeReply(const TString& subjectType, const TString& subjectId, TQuotaCache& cache, const TEvQuotaService::TQuotaGetRequest::TPtr& ev) {
278+
void CheckUsageMaybeReply(const TString& subjectType, const TString& subjectId, TQuotaCache& cache, bool allowStaleUsage, const TActorId& sender, ui64 cookie) {
278279
bool pended = false;
279280
auto& infoMap = QuotaInfoMap[subjectType];
280-
if (!ev->Get()->AllowStaleUsage) {
281+
if (!allowStaleUsage) {
281282
// Refresh usage
282283
for (auto& itUsage : cache.UsageMap) {
283284
auto metricName = itUsage.first;
@@ -293,7 +294,7 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
293294
cachedUsage.RequestedAt = Now();
294295
}
295296
if (!pended) {
296-
cache.PendingUsageRequests.emplace(ev->Sender, ev->Cookie);
297+
cache.PendingUsageRequests.emplace(sender, cookie);
297298
pended = true;
298299
}
299300
}
@@ -303,16 +304,16 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
303304
}
304305

305306
if (!pended) {
306-
SendQuota(ev->Sender, ev->Cookie, subjectType, subjectId, cache);
307-
cache.PendingUsageRequests.erase(ev->Sender);
307+
SendQuota(sender, cookie, subjectType, subjectId, cache);
308+
cache.PendingUsageRequests.erase(sender);
308309
}
309310
}
310311

311-
void ChangeLimitsAndReply(const TString& subjectType, const TString& subjectId, TQuotaCache& cache, const TEvQuotaService::TQuotaSetRequest::TPtr& ev) {
312+
void ChangeLimitsAndReply(const TString& subjectType, const TString& subjectId, TQuotaCache& cache, const TLimits& limits, const TActorId& sender, ui64 cookie) {
312313

313314
auto pended = false;
314315
auto& infoMap = QuotaInfoMap[subjectType];
315-
for (auto metricLimit : ev->Get()->Limits) {
316+
for (auto metricLimit : limits) {
316317
auto& metricName = metricLimit.first;
317318

318319
auto it = cache.UsageMap.find(metricName);
@@ -332,8 +333,8 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
332333

333334
if (info.QuotaController != NActors::TActorId{}) {
334335
pended = true;
335-
cache.PendingLimitRequest = ev->Sender;
336-
cache.PendingLimitCookie = ev->Cookie;
336+
cache.PendingLimitRequest = sender;
337+
cache.PendingLimitCookie = cookie;
337338
cache.PendingLimit.insert(metricName);
338339
Send(info.QuotaController, new TEvQuotaService::TQuotaLimitChangeRequest(subjectType, subjectId, metricName, cached.Usage.Limit.Value, limit));
339340
continue;
@@ -354,7 +355,7 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
354355
for (auto it : cache.UsageMap) {
355356
response->Limits.emplace(it.first, it.second.Usage.Limit.Value);
356357
}
357-
Send(ev->Sender, response.Release());
358+
Send(sender, response.Release());
358359
}
359360
}
360361

@@ -723,16 +724,16 @@ class TQuotaManagementService : public NActors::TActorBootstrapped<TQuotaManagem
723724
auto it = subjectMap.find(subjectId);
724725
if (it == subjectMap.end()) {
725726
ReadQuota(subjectType, subjectId,
726-
[this, ev=ev](TReadQuotaExecuter& executer) {
727+
[this, limits=std::move(ev->Get()->Limits), sender=ev->Sender, cookie=ev->Cookie](TReadQuotaExecuter& executer) {
727728
// This block is executed in correct self-context, no locks/syncs required
728729
auto& subjectMap = this->QuotaCacheMap[executer.State.SubjectType];
729730
auto& cache = subjectMap[executer.State.SubjectId];
730731
LOG_D(executer.State.SubjectType << "." << executer.State.SubjectId << ToString(cache.UsageMap) << " LOADED");
731-
ChangeLimitsAndReply(executer.State.SubjectType, executer.State.SubjectId, cache, ev);
732+
ChangeLimitsAndReply(executer.State.SubjectType, executer.State.SubjectId, cache, limits, sender, cookie);
732733
}
733734
);
734735
} else {
735-
ChangeLimitsAndReply(subjectType, subjectId, it->second, ev);
736+
ChangeLimitsAndReply(subjectType, subjectId, it->second, ev->Get()->Limits, ev->Sender, ev->Cookie);
736737
}
737738
}
738739

ydb/core/grpc_services/rpc_describe_external_data_source.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
#include <ydb/core/ydb_convert/ydb_convert.h>
66
#include <ydb/public/api/protos/ydb_table.pb.h>
77

8+
#include <library/cpp/json/json_writer.h>
9+
#include <library/cpp/json/writer/json_value.h>
10+
811
namespace NKikimr::NGRpcService {
912

1013
using namespace NActors;
@@ -74,6 +77,21 @@ void Convert(const TAuth& in, TProperties& out) {
7477
}
7578
}
7679

80+
void Convert(const TExternalTableReferences& in, TProperties& out) {
81+
auto& references = out["REFERENCES"];
82+
NJson::TJsonValue json(NJson::EJsonValueType::JSON_ARRAY);
83+
84+
for (const auto& reference : in.GetReferences()) {
85+
if (reference.HasPath()) {
86+
json.AppendValue(reference.GetPath());
87+
} else if (reference.HasPathId()) {
88+
// this should never happen, but in case it does, it is better to return something meaningful
89+
json.AppendValue(TPathId::FromProto(reference.GetPathId()).ToString());
90+
}
91+
}
92+
references = WriteJson(json, false);
93+
}
94+
7795
Ydb::Table::DescribeExternalDataSourceResult Convert(const TDirEntry& inSelf, const TExternalDataSourceDescription& inDesc) {
7896
Ydb::Table::DescribeExternalDataSourceResult out;
7997
ConvertDirectoryEntry(inSelf, out.mutable_self(), true);
@@ -85,6 +103,7 @@ Ydb::Table::DescribeExternalDataSourceResult Convert(const TDirEntry& inSelf, co
85103
properties[to_upper(key)] = value;
86104
}
87105
Convert(inDesc.GetAuth(), properties);
106+
Convert(inDesc.GetReferences(), properties);
88107
return out;
89108
}
90109

ydb/core/keyvalue/keyvalue_events.h

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace NKeyValue {
1313
struct TIntermediate;
1414
};
1515

16-
struct TEvKeyValue {
16+
namespace TEvKeyValue {
1717
enum EEv {
1818
EvRequest = EventSpaceBegin(TKikimrEvents::ES_KEYVALUE),
1919
EvIntermediate,
@@ -208,7 +208,7 @@ struct TEvKeyValue {
208208
using TResponse = TEvCleanUpDataResponse;
209209

210210
TEvCleanUpDataRequest() = default;
211-
211+
212212
TEvCleanUpDataRequest(ui64 generation, bool reset=false) {
213213
Record.set_generation(generation);
214214
Record.set_reset_actual_generation(reset);
@@ -221,27 +221,28 @@ struct TEvKeyValue {
221221

222222
TEvCleanUpDataResponse() = default;
223223

224-
TEvCleanUpDataResponse(ui64 generation, NKikimrKeyValue::CleanUpDataResponse::Status status, const TString& errorReason, ui64 actualGeneration) {
224+
TEvCleanUpDataResponse(ui64 generation, NKikimrKeyValue::CleanUpDataResponse::Status status, const TString& errorReason, ui64 actualGeneration, ui64 tabletId) {
225225
Record.set_generation(generation);
226226
Record.set_status(status);
227227
Record.set_error_reason(errorReason);
228228
Record.set_actual_generation(actualGeneration);
229+
Record.set_tablet_id(tabletId);
229230
}
230231

231-
static std::unique_ptr<TEvCleanUpDataResponse> MakeSuccess(ui64 generation) {
232-
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_SUCCESS, "", generation);
232+
static std::unique_ptr<TEvCleanUpDataResponse> MakeSuccess(ui64 generation, ui64 tabletId) {
233+
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_SUCCESS, "", generation, tabletId);
233234
}
234235

235-
static std::unique_ptr<TEvCleanUpDataResponse> MakeAborted(ui64 generation, const TString& errorReason, ui64 actualGeneration) {
236-
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ABORTED, errorReason, actualGeneration);
236+
static std::unique_ptr<TEvCleanUpDataResponse> MakeAborted(ui64 generation, const TString& errorReason, ui64 actualGeneration, ui64 tabletId) {
237+
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ABORTED, errorReason, actualGeneration, tabletId);
237238
}
238239

239-
static std::unique_ptr<TEvCleanUpDataResponse> MakeAlreadyCompleted(ui64 generation, ui64 actualGeneration) {
240-
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ALREADY_COMPLETED, "", actualGeneration);
240+
static std::unique_ptr<TEvCleanUpDataResponse> MakeAlreadyCompleted(ui64 generation, ui64 actualGeneration, ui64 tabletId) {
241+
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ALREADY_COMPLETED, "", actualGeneration, tabletId);
241242
}
242243

243-
static std::unique_ptr<TEvCleanUpDataResponse> MakeError(ui64 generation, const TString& errorReason, ui64 actualGeneration) {
244-
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ERROR, errorReason, actualGeneration);
244+
static std::unique_ptr<TEvCleanUpDataResponse> MakeError(ui64 generation, const TString& errorReason, ui64 actualGeneration, ui64 tabletId) {
245+
return std::make_unique<TEvCleanUpDataResponse>(generation, NKikimrKeyValue::CleanUpDataResponse::STATUS_ERROR, errorReason, actualGeneration, tabletId);
245246
}
246247
};
247248

@@ -253,6 +254,6 @@ struct TEvKeyValue {
253254
{}
254255
};
255256

256-
};
257+
}
257258

258259
} // NKikimr

0 commit comments

Comments
 (0)