This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new d6dcf962a93 [Enhancement](page cache) insert into setting to disable
page cache (#28913)
d6dcf962a93 is described below
commit d6dcf962a9385b27659989795bd40a03be445683
Author: 赵硕 <[email protected]>
AuthorDate: Fri Dec 29 15:11:41 2023 +0800
[Enhancement](page cache) insert into setting to disable page cache (#28913)
---
.../java/org/apache/doris/analysis/QueryStmt.java | 4 ++
.../nereids/processor/pre/PlanPreprocessors.java | 3 +-
.../pre/TurnOffPageCacheForInsertIntoSelect.java | 66 ++++++++++++++++++++++
.../java/org/apache/doris/qe/StmtExecutor.java | 6 ++
4 files changed, 78 insertions(+), 1 deletion(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
index e92fcc2c8f2..c1d879fd060 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java
@@ -824,6 +824,10 @@ public abstract class QueryStmt extends StatementBase
implements Queriable {
this.fromInsert = value;
}
+ public boolean isFromInsert() {
+ return fromInsert;
+ }
+
@Override
public abstract QueryStmt clone();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/PlanPreprocessors.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/PlanPreprocessors.java
index 9dfc12b2c10..dad0a4d07f0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/PlanPreprocessors.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/PlanPreprocessors.java
@@ -46,7 +46,8 @@ public class PlanPreprocessors {
public List<PlanPreprocessor> getProcessors() {
// add processor if we need
return ImmutableList.of(
- new TurnOffPipelineForDml()
+ new TurnOffPipelineForDml(),
+ new TurnOffPageCacheForInsertIntoSelect()
);
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/TurnOffPageCacheForInsertIntoSelect.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/TurnOffPageCacheForInsertIntoSelect.java
new file mode 100644
index 00000000000..77955a94114
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/pre/TurnOffPageCacheForInsertIntoSelect.java
@@ -0,0 +1,66 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.processor.pre;
+
+import org.apache.doris.analysis.SetVar;
+import org.apache.doris.analysis.StringLiteral;
+import org.apache.doris.nereids.StatementContext;
+import org.apache.doris.nereids.analyzer.UnboundTableSink;
+import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalFileSink;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOlapTableSink;
+import org.apache.doris.qe.SessionVariable;
+import org.apache.doris.qe.VariableMgr;
+
+/**
+ * TODO turnoff pagecache for insert into select
+ */
+public class TurnOffPageCacheForInsertIntoSelect extends PlanPreprocessor {
+
+ @Override
+ public Plan visitUnboundTableSink(UnboundTableSink<? extends Plan>
unboundTableSink,
+ StatementContext context) {
+ turnOffPageCache(context);
+ return unboundTableSink;
+ }
+
+ @Override
+ public Plan visitLogicalFileSink(LogicalFileSink<? extends Plan> fileSink,
StatementContext context) {
+ turnOffPageCache(context);
+ return fileSink;
+ }
+
+ @Override
+ public Plan visitLogicalOlapTableSink(LogicalOlapTableSink<? extends Plan>
tableSink, StatementContext context) {
+ turnOffPageCache(context);
+ return tableSink;
+ }
+
+ private void turnOffPageCache(StatementContext context) {
+ SessionVariable sessionVariable =
context.getConnectContext().getSessionVariable();
+ // set temporary session value, and then revert value in the 'finally
block' of StmtExecutor#execute
+ sessionVariable.setIsSingleSetVar(true);
+ try {
+ VariableMgr.setVar(sessionVariable,
+ new SetVar(SessionVariable.ENABLE_PAGE_CACHE, new
StringLiteral("false")));
+ } catch (Throwable t) {
+ throw new AnalysisException("Can not set turn off page cache for
insert into select", t);
+ }
+ }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 2851304dc37..25f2f2e2e28 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -886,8 +886,14 @@ public class StmtExecutor {
if (statement instanceof SelectStmt) {
SelectStmt selectStmt = (SelectStmt) statement;
Map<String, String> optHints =
selectStmt.getSelectList().getOptHints();
+ if (optHints == null) {
+ optHints = new HashMap<>();
+ }
if (optHints != null) {
sessionVariable.setIsSingleSetVar(true);
+ if (selectStmt.isFromInsert()) {
+ optHints.put("enable_page_cache", "false");
+ }
for (String key : optHints.keySet()) {
VariableMgr.setVar(sessionVariable, new SetVar(key, new
StringLiteral(optHints.get(key))));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]