Skip to content

Commit f42dff9

Browse files
authored
Merge e1a7d89 into 34e4e1e
2 parents 34e4e1e + e1a7d89 commit f42dff9

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

ydb/core/tx/scheme_board/cache.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ namespace {
100100
SetError(context, entry, TResolve::EStatus::LookupError, TKeyDesc::EStatus::NotExists);
101101
}
102102

103-
template <typename TRequest, typename TEvRequest, typename TDerived>
103+
template <typename TEvRequest, typename TDerived>
104104
class TDbResolver: public TActorBootstrapped<TDerived> {
105105
void Handle() {
106-
TlsActivationContext->Send(new IEventHandle(Cache, Sender, new TEvRequest(Request.Release())));
106+
Request->Rewrite(Request->GetTypeRewrite(), Cache);
107+
this->Send(Request.Release());
107108
this->PassAway();
108109
}
109110

@@ -112,17 +113,16 @@ namespace {
112113
return NKikimrServices::TActivity::SCHEME_BOARD_DB_RESOLVER;
113114
}
114115

115-
TDbResolver(const TActorId& cache, const TActorId& sender, THolder<TRequest> request, ui64 domainOwnerId)
116+
TDbResolver(const TActorId& cache, typename TEvRequest::TPtr& request, ui64 domainOwnerId)
116117
: Cache(cache)
117-
, Sender(sender)
118-
, Request(std::move(request))
118+
, Request(request)
119119
, DomainOwnerId(domainOwnerId)
120120
{
121121
}
122122

123123
void Bootstrap() {
124124
TNavigate::TEntry entry;
125-
entry.Path = SplitPath(Request->DatabaseName);
125+
entry.Path = SplitPath(Request->Get()->Request->DatabaseName);
126126
entry.Operation = TNavigate::EOp::OpPath;
127127
entry.RedirectRequired = false;
128128

@@ -140,32 +140,31 @@ namespace {
140140
}
141141
}
142142

143-
using TBase = TDbResolver<TRequest, TEvRequest, TDerived>;
143+
using TBase = TDbResolver<TEvRequest, TDerived>;
144144

145145
private:
146146
const TActorId Cache;
147-
const TActorId Sender;
148-
THolder<TRequest> Request;
147+
typename TEvRequest::TPtr Request;
149148
const ui64 DomainOwnerId;
150149

151150
}; // TDbResolver
152151

153-
class TDbResolverNavigate: public TDbResolver<TNavigate, TEvNavigate, TDbResolverNavigate> {
152+
class TDbResolverNavigate: public TDbResolver<TEvNavigate, TDbResolverNavigate> {
154153
public:
155154
using TBase::TBase;
156155
};
157156

158-
class TDbResolverResolve: public TDbResolver<TResolve, TEvResolve, TDbResolverResolve> {
157+
class TDbResolverResolve: public TDbResolver<TEvResolve, TDbResolverResolve> {
159158
public:
160159
using TBase::TBase;
161160
};
162161

163-
IActor* CreateDbResolver(const TActorId& cache, const TActorId& sender, THolder<TNavigate> request, ui64 domainOwnerId) {
164-
return new TDbResolverNavigate(cache, sender, std::move(request), domainOwnerId);
162+
IActor* CreateDbResolver(const TActorId& cache, TEvNavigate::TPtr& request, ui64 domainOwnerId) {
163+
return new TDbResolverNavigate(cache, request, domainOwnerId);
165164
}
166165

167-
IActor* CreateDbResolver(const TActorId& cache, const TActorId& sender, THolder<TResolve> request, ui64 domainOwnerId) {
168-
return new TDbResolverResolve(cache, sender, std::move(request), domainOwnerId);
166+
IActor* CreateDbResolver(const TActorId& cache, TEvResolve::TPtr& request, ui64 domainOwnerId) {
167+
return new TDbResolverResolve(cache, request, domainOwnerId);
169168
}
170169

171170
template <typename TContextPtr, typename TEvResult, typename TDerived>
@@ -2618,7 +2617,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
26182617
return false;
26192618
}
26202619

2621-
Register(CreateDbResolver(SelfId(), ev->Sender, THolder(request.Release()), it->second));
2620+
Register(CreateDbResolver(SelfId(), ev, it->second));
26222621
return true;
26232622
}
26242623

ydb/core/tx/scheme_board/cache_ut.cpp

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,13 @@ class TCacheTest: public TTestWithSchemeshard {
3131
SchemeCache = Context->Register(CreateSchemeBoardSchemeCache(config.Get()));
3232
Context->EnableScheduleForActor(SchemeCache, true);
3333

34-
TestAlterSubDomain(*Context, 1, "/",
35-
"StoragePools { "
36-
" Name: \"pool-1\" "
37-
" Kind: \"pool-kind-1\" "
38-
"} "
39-
" Name: \"Root\" ");
40-
41-
// Context->SetLogPriority(NKikimrServices::SCHEME_BOARD_REPLICA, NLog::PRI_DEBUG);
42-
// Context->SetLogPriority(NKikimrServices::SCHEME_BOARD_SUBSCRIBER, NLog::PRI_DEBUG);
43-
// Context->SetLogPriority(NKikimrServices::TX_PROXY_SCHEME_CACHE, NLog::PRI_DEBUG);
44-
// Context->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NLog::PRI_DEBUG);
34+
TestAlterSubDomain(*Context, 1, "/", R"(
35+
Name: "Root"
36+
StoragePools {
37+
Name: "pool-1"
38+
Kind: "pool-kind-1"
39+
}
40+
)");
4541
}
4642

4743
UNIT_TEST_SUITE(TCacheTest);
@@ -63,6 +59,7 @@ class TCacheTest: public TTestWithSchemeshard {
6359
UNIT_TEST(MigrationDeletedPathNavigate);
6460
UNIT_TEST(WatchRoot);
6561
UNIT_TEST(PathBelongsToDomain);
62+
UNIT_TEST(CookiesArePreserved);
6663
UNIT_TEST_SUITE_END();
6764

6865
void Navigate();
@@ -83,10 +80,11 @@ class TCacheTest: public TTestWithSchemeshard {
8380
void MigrationDeletedPathNavigate();
8481
void WatchRoot();
8582
void PathBelongsToDomain();
83+
void CookiesArePreserved();
8684

8785
protected:
8886
TNavigate::TEntry TestNavigateImpl(THolder<TNavigate> request, TNavigate::EStatus expectedStatus,
89-
const TString& sid, TNavigate::EOp op, bool showPrivatePath, bool redirectRequired);
87+
const TString& sid, TNavigate::EOp op, bool showPrivatePath, bool redirectRequired, ui64 cookie = 0);
9088

9189
TNavigate::TEntry TestNavigate(const TString& path, TNavigate::EStatus expectedStatus = TNavigate::EStatus::Ok,
9290
const TString& sid = TString(), TNavigate::EOp op = TNavigate::EOp::OpPath,
@@ -374,7 +372,7 @@ void TCacheTest::TableSchemaVersion() {
374372
}
375373

376374
TNavigate::TEntry TCacheTest::TestNavigateImpl(THolder<TNavigate> request, TNavigate::EStatus expectedStatus,
377-
const TString& sid, TNavigate::EOp op, bool showPrivatePath, bool redirectRequired)
375+
const TString& sid, TNavigate::EOp op, bool showPrivatePath, bool redirectRequired, ui64 cookie)
378376
{
379377
auto& entry = request->ResultSet.back();
380378
entry.Operation = op;
@@ -386,10 +384,11 @@ TNavigate::TEntry TCacheTest::TestNavigateImpl(THolder<TNavigate> request, TNavi
386384
}
387385

388386
const TActorId edge = Context->AllocateEdgeActor();
389-
Context->Send(SchemeCache, edge, new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()), 0, 0, 0, true);
387+
Context->Send(SchemeCache, edge, new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()), 0, cookie, 0, true);
390388
auto ev = Context->GrabEdgeEvent<TEvTxProxySchemeCache::TEvNavigateKeySetResult>(edge);
391389

392390
UNIT_ASSERT(ev->Get());
391+
UNIT_ASSERT_VALUES_EQUAL(ev->Cookie, cookie);
393392
UNIT_ASSERT(!ev->Get()->Request->ResultSet.empty());
394393

395394
const TNavigate::TEntry result = ev->Get()->Request->ResultSet[0];
@@ -997,6 +996,25 @@ void TCacheTest::PathBelongsToDomain() {
997996
}
998997
}
999998

999+
void TCacheTest::CookiesArePreserved() {
1000+
ui64 txId = 100;
1001+
TestCreateSubDomain(*Context, ++txId, "/Root", R"(Name: "SubDomain")");
1002+
TestWaitNotification(*Context, {txId}, CreateNotificationSubscriber(*Context, TTestTxConfig::SchemeShard));
1003+
TestMkDir(*Context, ++txId, "/Root/SubDomain", "DirA");
1004+
1005+
ui64 cookie = 1;
1006+
// first request will run db resolver
1007+
for (int i = 0; i < 2; ++i) {
1008+
auto request = MakeHolder<TNavigate>();
1009+
request->DatabaseName = "/Root/SubDomain";
1010+
auto& entry = request->ResultSet.emplace_back();
1011+
entry.Path = SplitPath("/Root/SubDomain/DirA");
1012+
entry.RequestType = TNavigate::TEntry::ERequestType::ByPath;
1013+
auto result = TestNavigateImpl(std::move(request), TNavigate::EStatus::Ok,
1014+
"", TNavigate::EOp::OpPath, false, true, ++cookie);
1015+
}
1016+
}
1017+
10001018
class TCacheTestWithDrops: public TCacheTest {
10011019
public:
10021020
TTestContext::TEventObserver ObserverFunc() override {

0 commit comments

Comments
 (0)