Skip to content

Commit 7e964f2

Browse files
Backport #95356 to 25.12: Fix storage lifetime with distributed plan
1 parent 40872a0 commit 7e964f2

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/Processors/QueryPlan/resolveStorages.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ namespace Setting
4444
extern const SettingsSetOperationMode except_default_mode;
4545
extern const SettingsSetOperationMode intersect_default_mode;
4646
extern const SettingsSetOperationMode union_default_mode;
47+
extern const SettingsSeconds lock_acquire_timeout;
4748
}
4849

4950
namespace ErrorCodes
@@ -186,6 +187,8 @@ static QueryPlanResourceHolder replaceReadingFromTable(QueryPlan::Node & node, Q
186187
select_query_info.table_expression_modifiers = reading_from_table_function->getTableExpressionModifiers();
187188
}
188189

190+
auto table_lock = storage->lockForShare(context->getInitialQueryId(), context->getSettingsRef()[Setting::lock_acquire_timeout]);
191+
189192
ASTPtr query;
190193
bool is_storage_merge = typeid_cast<const StorageMerge *>(storage.get());
191194
if (storage->isRemote() || is_storage_merge)
@@ -256,6 +259,10 @@ static QueryPlanResourceHolder replaceReadingFromTable(QueryPlan::Node & node, Q
256259
node.step = std::make_unique<ExpressionStep>(reading_plan.getCurrentHeader(), std::move(converting_actions));
257260
node.children = {reading_plan.getRootNode()};
258261

262+
reading_plan.addInterpreterContext(context);
263+
reading_plan.addStorageHolder(std::move(storage));
264+
reading_plan.addTableLock(std::move(table_lock));
265+
259266
auto nodes_and_resource = QueryPlan::detachNodesAndResources(std::move(reading_plan));
260267

261268
nodes.splice(nodes.end(), std::move(nodes_and_resource.first));

0 commit comments

Comments
 (0)