Skip to content

Commit 8c7115d

Browse files
committed
Temp directory name (#25949)
1 parent 14c5bf0 commit 8c7115d

File tree

14 files changed

+180
-76
lines changed

14 files changed

+180
-76
lines changed

ydb/core/kqp/common/simple/temp_tables.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ TKqpTempTablesState::FindInfo(const std::string_view& path, bool withSessionId)
1010
return TempTables.find(path);
1111
}
1212

13-
const auto temporaryStoragePrefix = CanonizePath(GetSessionDirPath(Database, SessionId)) + "/";
13+
const auto temporaryStoragePrefix = CanonizePath(GetSessionDirPath(Database, TempDirName)) + "/";
1414

1515
if (path.size() < temporaryStoragePrefix.size()) {
1616
return TempTables.end();
@@ -40,16 +40,16 @@ TString GetSessionDirsBasePath(const TString& database) {
4040
return CanonizePath(JoinPath({database, TmpDirectoryName, SessionsDirectoryName}));
4141
}
4242

43-
TString GetSessionDirPath(const TString& database, const TString& sessionId) {
44-
return CanonizePath(JoinPath({database, TmpDirectoryName, SessionsDirectoryName, sessionId}));
43+
TString GetSessionDirPath(const TString& database, const TString& tmpDirName) {
44+
return CanonizePath(JoinPath({database, TmpDirectoryName, SessionsDirectoryName, tmpDirName}));
4545
}
4646

47-
TString GetTempTablePath(const TString& database, const TString& sessionId, const TString tablePath) {
48-
return CanonizePath(JoinPath({database, TmpDirectoryName, SessionsDirectoryName, sessionId, tablePath}));
47+
TString GetTempTablePath(const TString& database, const TString& tmpDirName, const TString tablePath) {
48+
return CanonizePath(JoinPath({database, TmpDirectoryName, SessionsDirectoryName, tmpDirName, tablePath}));
4949
}
5050

51-
TString GetCreateTempTablePath(const TString& database, const TString& sessionId, const TString tablePath) {
52-
return CanonizePath(JoinPath({TmpDirectoryName, SessionsDirectoryName, sessionId, database, tablePath}));
51+
TString GetCreateTempTablePath(const TString& database, const TString& tmpDirName, const TString tablePath) {
52+
return CanonizePath(JoinPath({TmpDirectoryName, SessionsDirectoryName, tmpDirName, database, tablePath}));
5353
}
5454

5555
bool IsSessionsDirPath(const TStringBuf database, const TStringBuf path) {

ydb/core/kqp/common/simple/temp_tables.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ struct TKqpTempTablesState {
1717
TString WorkingDir;
1818
TIntrusiveConstPtr<NACLib::TUserToken> UserToken;
1919
};
20-
TString SessionId;
2120
TString Database;
21+
TString TempDirName;
2222
THashMap<TString, TTempTableInfo> TempTables;
2323
bool NeedCleaning = false;
2424

@@ -31,9 +31,10 @@ struct TKqpTempTablesState {
3131
TString GetTmpDirPath(const TString& database);
3232
TString GetSessionDirName();
3333
TString GetSessionDirsBasePath(const TString& database);
34-
TString GetSessionDirPath(const TString& database, const TString& sessionId);
35-
TString GetTempTablePath(const TString& database, const TString& sessionId, const TString tablePath);
36-
TString GetCreateTempTablePath(const TString& database, const TString& sessionId, const TString tablePath);
34+
TString GetSessionDirPath(const TString& database, const TString& tmpDirName);
35+
TString GetTempTablePath(const TString& database, const TString& tmpDirName, const TString tablePath);
36+
TString GetCreateTempTablePath(const TString& database, const TString& tmpDirName
37+
, const TString tablePath);
3738

3839
bool IsSessionsDirPath(const TStringBuf database, const TStringBuf path);
3940
bool IsSessionsDirPath(const TStringBuf database, const TString& workingDir, const TString& name);

ydb/core/kqp/executer_actor/kqp_executer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ IActor* CreateKqpSchemeExecuter(
160160
TKqpPhyTxHolder::TConstPtr phyTx, NKikimrKqp::EQueryType queryType, const TActorId& target,
161161
const TMaybe<TString>& requestType, const TString& database,
162162
TIntrusiveConstPtr<NACLib::TUserToken> userToken, const TString& clientAddress,
163-
bool temporary, bool createTmpDir, bool isCreateTableAs, TString SessionId, TIntrusivePtr<TUserRequestContext> ctx,
163+
bool temporary, bool createTmpDir, bool isCreateTableAs, TString tempDirName, TIntrusivePtr<TUserRequestContext> ctx,
164164
const TActorId& kqpTempTablesAgentActor = TActorId());
165165

166166
std::unique_ptr<TEvKqpExecuter::TEvTxResponse> ExecuteLiteral(

ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
7676
TKqpSchemeExecuter(
7777
TKqpPhyTxHolder::TConstPtr phyTx, NKikimrKqp::EQueryType queryType, const TActorId& target, const TMaybe<TString>& requestType,
7878
const TString& database, TIntrusiveConstPtr<NACLib::TUserToken> userToken, const TString& clientAddress,
79-
bool temporary, bool createTmpDir, bool isCreateTableAs, TString sessionId, TIntrusivePtr<TUserRequestContext> ctx,
79+
bool temporary, bool createTmpDir, bool isCreateTableAs, TString tempDirName, TIntrusivePtr<TUserRequestContext> ctx,
8080
const TActorId& kqpTempTablesAgentActor)
8181
: PhyTx(phyTx)
8282
, QueryType(queryType)
@@ -87,7 +87,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
8787
, Temporary(temporary)
8888
, CreateTmpDir(createTmpDir)
8989
, IsCreateTableAs(isCreateTableAs)
90-
, SessionId(sessionId)
90+
, TempDirName(tempDirName)
9191
, RequestContext(std::move(ctx))
9292
, RequestType(requestType)
9393
, KqpTempTablesAgentActor(kqpTempTablesAgentActor)
@@ -157,7 +157,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
157157
modifyScheme->SetFailOnExist(true);
158158

159159
auto* makeDir = modifyScheme->MutableMkDir();
160-
makeDir->SetName(SessionId);
160+
makeDir->SetName(TempDirName);
161161
ActorIdToProto(KqpTempTablesAgentActor, modifyScheme->MutableTempDirOwnerActorId());
162162

163163
if (UserToken) {
@@ -329,11 +329,12 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
329329
switch (schemeOp.GetOperationCase()) {
330330
case NKqpProto::TKqpSchemeOperation::kCreateTable: {
331331
auto modifyScheme = schemeOp.GetCreateTable();
332+
AFL_ENSURE(!IsCreateTableAs || Temporary);
332333
if (Temporary) {
333334
auto changePath = [this](NKikimrSchemeOp::TTableDescription* tableDesc) {
334335
const auto fullPath = JoinPath({tableDesc->GetPath(), tableDesc->GetName()});
335336
YQL_ENSURE(fullPath.size() > 1);
336-
tableDesc->SetName(GetCreateTempTablePath(Database, SessionId, fullPath));
337+
tableDesc->SetName(GetCreateTempTablePath(Database, TempDirName, fullPath));
337338
tableDesc->SetPath(Database);
338339
};
339340

@@ -348,7 +349,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
348349
}
349350
case NKikimrSchemeOp::ESchemeOpCreateColumnTable: {
350351
modifyScheme.MutableCreateColumnTable()->SetName(
351-
GetCreateTempTablePath(Database, SessionId, modifyScheme.GetCreateColumnTable().GetName()));
352+
GetCreateTempTablePath(Database, TempDirName, modifyScheme.GetCreateColumnTable().GetName()));
352353
break;
353354
}
354355
default:
@@ -369,6 +370,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
369370

370371
case NKqpProto::TKqpSchemeOperation::kAlterTable: {
371372
const auto& modifyScheme = schemeOp.GetAlterTable();
373+
AFL_ENSURE(!IsCreateTableAs || modifyScheme.GetOperationType() == NKikimrSchemeOp::ESchemeOpMoveTable);
372374
ev->Record.MutableTransaction()->MutableModifyScheme()->CopyFrom(modifyScheme);
373375
break;
374376
}
@@ -803,7 +805,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
803805
void Handle(TEvPrivate::TEvMakeSessionDirResult::TPtr& result) {
804806
if (!result->Get()->Result.Success()) {
805807
InternalError(TStringBuilder()
806-
<< "Error creating directory for session " << SessionId
808+
<< "Error creating directory for session " << TempDirName
807809
<< ": " << result->Get()->Result.Issues().ToString(true));
808810
}
809811
MakeSchemeOperationRequest();
@@ -1102,7 +1104,7 @@ class TKqpSchemeExecuter : public TActorBootstrapped<TKqpSchemeExecuter> {
11021104
bool Temporary;
11031105
bool CreateTmpDir;
11041106
bool IsCreateTableAs;
1105-
TString SessionId;
1107+
TString TempDirName;
11061108
ui64 TxId = 0;
11071109
TActorId SchemePipeActorId_;
11081110
ui64 SchemeShardTabletId = 0;
@@ -1118,11 +1120,11 @@ IActor* CreateKqpSchemeExecuter(
11181120
const TMaybe<TString>& requestType, const TString& database,
11191121
TIntrusiveConstPtr<NACLib::TUserToken> userToken, const TString& clientAddress,
11201122
bool temporary, bool createTmpDir, bool isCreateTableAs,
1121-
TString sessionId, TIntrusivePtr<TUserRequestContext> ctx, const TActorId& kqpTempTablesAgentActor)
1123+
TString tempDirName, TIntrusivePtr<TUserRequestContext> ctx, const TActorId& kqpTempTablesAgentActor)
11221124
{
11231125
return new TKqpSchemeExecuter(
11241126
phyTx, queryType, target, requestType, database, userToken, clientAddress,
1125-
temporary, createTmpDir, isCreateTableAs, sessionId, std::move(ctx), kqpTempTablesAgentActor);
1127+
temporary, createTmpDir, isCreateTableAs, tempDirName, std::move(ctx), kqpTempTablesAgentActor);
11261128
}
11271129

11281130
} // namespace NKikimr::NKqp

ydb/core/kqp/gateway/kqp_metadata_loader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ NavigateEntryResult CreateNavigateEntry(const TString& path,
4545
auto tempTablesInfoIt = tempTablesState->FindInfo(currentPath, false);
4646
if (tempTablesInfoIt != tempTablesState->TempTables.end()) {
4747
queryName = currentPath;
48-
currentPath = GetTempTablePath(tempTablesState->Database, tempTablesState->SessionId, tempTablesInfoIt->first);
48+
currentPath = GetTempTablePath(tempTablesState->Database, tempTablesState->TempDirName, tempTablesInfoIt->first);
4949
}
5050
}
5151
entry.Path = SplitPath(currentPath);

ydb/core/kqp/host/kqp_host.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1130,7 +1130,6 @@ class TKqpHost : public IKqpHost {
11301130
SessionCtx->SetDatabaseId(Gateway->GetDatabaseId());
11311131
SessionCtx->SetCluster(cluster);
11321132
if (tempTablesState) {
1133-
SessionCtx->SetSessionId(tempTablesState->SessionId);
11341133
SessionCtx->SetTempTables(std::move(tempTablesState));
11351134
}
11361135

ydb/core/kqp/host/kqp_statement_rewrite.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,14 @@ namespace {
262262
}
263263

264264
const TString tmpTableName = TStringBuilder()
265-
<< tableName
266-
<< "_cas_"
267-
<< TAppData::RandomProvider->GenUuid4().AsUuidString();
265+
<< tableName
266+
<< "_"
267+
<< TAppData::RandomProvider->GenUuid4().AsUuidString();
268268

269269
const TString createTableName = (TStringBuilder()
270270
<< CanonizePath(sessionCtx->GetDatabase())
271271
<< "/.tmp/sessions/"
272-
<< sessionCtx->GetSessionId()
272+
<< sessionCtx->GetTempTablesState()->TempDirName
273273
<< CanonizePath(tmpTableName));
274274

275275
create = exprCtx.ReplaceNode(std::move(create), *columns, exprCtx.NewList(pos, std::move(columnNodes)));

ydb/core/kqp/provider/yql_kikimr_provider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ std::optional<TString> TKikimrTablesData::GetTempTablePath(const TStringBuf& tab
273273
auto tempTableInfoIt = TempTablesState->FindInfo(table, false);
274274

275275
if (tempTableInfoIt != TempTablesState->TempTables.end()) {
276-
return NKikimr::NKqp::GetTempTablePath(TempTablesState->Database, TempTablesState->SessionId, tempTableInfoIt->first);
276+
return NKikimr::NKqp::GetTempTablePath(TempTablesState->Database, TempTablesState->TempDirName, tempTableInfoIt->first);
277277
}
278278
return std::nullopt;
279279
}

ydb/core/kqp/provider/yql_kikimr_provider.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ class TKikimrTransactionContextBase : public TThrRefBase {
377377
if (TempTablesState) {
378378
auto tempTableInfoIt = TempTablesState->FindInfo(table, false);
379379
if (tempTableInfoIt != TempTablesState->TempTables.end()) {
380-
table = NKikimr::NKqp::GetTempTablePath(TempTablesState->Database, TempTablesState->SessionId, tempTableInfoIt->first);
380+
table = NKikimr::NKqp::GetTempTablePath(TempTablesState->Database, TempTablesState->TempDirName, tempTableInfoIt->first);
381381
}
382382
}
383383

@@ -523,10 +523,6 @@ class TKikimrSessionContext : public TThrRefBase {
523523
return DatabaseId;
524524
}
525525

526-
const TString& GetSessionId() const {
527-
return SessionId;
528-
}
529-
530526
void SetCluster(const TString& cluster) {
531527
Cluster = cluster;
532528
}
@@ -539,10 +535,6 @@ class TKikimrSessionContext : public TThrRefBase {
539535
DatabaseId = databaseId;
540536
}
541537

542-
void SetSessionId(const TString& sessionId) {
543-
SessionId = sessionId;
544-
}
545-
546538
NKikimr::NKqp::TKqpTempTablesState::TConstPtr GetTempTablesState() const {
547539
return TempTablesState;
548540
}
@@ -578,7 +570,6 @@ class TKikimrSessionContext : public TThrRefBase {
578570
TString Cluster;
579571
TString Database;
580572
TString DatabaseId;
581-
TString SessionId;
582573
TKikimrConfiguration::TPtr Configuration;
583574
TIntrusivePtr<TKikimrTablesData> TablesData;
584575
TIntrusivePtr<TKikimrQueryContext> QueryCtx;

ydb/core/kqp/session_actor/kqp_session_actor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,9 @@ class TKqpSessionActor : public TActorBootstrapped<TKqpSessionActor> {
217217
auto optSessionId = TryDecodeYdbSessionId(SessionId);
218218
YQL_ENSURE(optSessionId, "Can't decode ydb session Id");
219219

220-
TempTablesState.SessionId = *optSessionId;
221220
TempTablesState.Database = Settings.Database;
222-
LOG_D("Create session actor with id " << TempTablesState.SessionId);
221+
TempTablesState.TempDirName = TAppData::RandomProvider->GenUuid4().AsUuidString();
222+
LOG_D("Create session actor with id " << *optSessionId << " (tmp dir name: " << TempTablesState.TempDirName << ")");
223223
}
224224

225225
void Bootstrap() {
@@ -1634,7 +1634,7 @@ class TKqpSessionActor : public TActorBootstrapped<TKqpSessionActor> {
16341634
auto executerActor = CreateKqpSchemeExecuter(
16351635
tx, QueryState->GetType(), SelfId(), requestType, Settings.Database, userToken, clientAddress,
16361636
temporary, /* createTmpDir */ temporary && !TempTablesState.NeedCleaning,
1637-
QueryState->IsCreateTableAs(), TempTablesState.SessionId, QueryState->UserRequestContext, KqpTempTablesAgentActor);
1637+
QueryState->IsCreateTableAs(), TempTablesState.TempDirName, QueryState->UserRequestContext, KqpTempTablesAgentActor);
16381638

16391639
ExecuterId = RegisterWithSameMailbox(executerActor);
16401640

0 commit comments

Comments
 (0)