This is an automated email from the ASF dual-hosted git repository.
zhangstar333 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 d5c82bd4fad [revert](Nereids): revert#30578 #30422 (#30594)
d5c82bd4fad is described below
commit d5c82bd4fadd461f06f91f134a8f60f97db3f7cf
Author: 谢健 <[email protected]>
AuthorDate: Tue Jan 30 19:35:12 2024 +0800
[revert](Nereids): revert#30578 #30422 (#30594)
* Revert "[fix](Nereids): don't log edit log when replaying"
* Revert "[fix](Nereids) create constraint write edit log in lock scope
(#30422)"
This reverts commit 27a12d37acbe2ca807f7ce56125ad4773d89f584.
---
.../java/org/apache/doris/catalog/TableIf.java | 78 ++++++++++------------
.../trees/plans/commands/AddConstraintCommand.java | 13 ++--
.../plans/commands/DropConstraintCommand.java | 5 +-
.../java/org/apache/doris/persist/EditLog.java | 2 +-
.../catalog/constraint/ConstraintPersistTest.java | 7 +-
5 files changed, 50 insertions(+), 55 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java
index 612bfc65eab..67efd98fec6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java
@@ -26,7 +26,6 @@ import org.apache.doris.cluster.ClusterNamespace;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.MetaNotFoundException;
import org.apache.doris.nereids.exceptions.AnalysisException;
-import org.apache.doris.persist.AlterConstraintLog;
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.statistics.BaseAnalysisTask;
import org.apache.doris.statistics.ColumnStatistic;
@@ -226,7 +225,7 @@ public interface TableIf {
}
// Note this function is not thread safe
- default void checkConstraintNotExistenceUnsafe(String name, Constraint
primaryKeyConstraint,
+ default void checkConstraintNotExistence(String name, Constraint
primaryKeyConstraint,
Map<String, Constraint> constraintMap) {
if (constraintMap.containsKey(name)) {
throw new RuntimeException(String.format("Constraint name %s has
existed", name));
@@ -239,72 +238,63 @@ public interface TableIf {
}
}
- default void addUniqueConstraint(String name, ImmutableList<String>
columns, boolean replay) {
+ default Constraint addUniqueConstraint(String name, ImmutableList<String>
columns) {
writeLock();
try {
Map<String, Constraint> constraintMap = getConstraintsMapUnsafe();
UniqueConstraint uniqueConstraint = new UniqueConstraint(name,
ImmutableSet.copyOf(columns));
- checkConstraintNotExistenceUnsafe(name, uniqueConstraint,
constraintMap);
+ checkConstraintNotExistence(name, uniqueConstraint, constraintMap);
constraintMap.put(name, uniqueConstraint);
- if (!replay) {
- Env.getCurrentEnv().getEditLog().logAddConstraint(
- new AlterConstraintLog(uniqueConstraint, this));
- }
+ return uniqueConstraint;
} finally {
writeUnlock();
}
}
- default void addPrimaryKeyConstraint(String name, ImmutableList<String>
columns, boolean replay) {
+ default Constraint addPrimaryKeyConstraint(String name,
ImmutableList<String> columns) {
writeLock();
try {
Map<String, Constraint> constraintMap = getConstraintsMapUnsafe();
PrimaryKeyConstraint primaryKeyConstraint = new
PrimaryKeyConstraint(name, ImmutableSet.copyOf(columns));
- checkConstraintNotExistenceUnsafe(name, primaryKeyConstraint,
constraintMap);
+ checkConstraintNotExistence(name, primaryKeyConstraint,
constraintMap);
constraintMap.put(name, primaryKeyConstraint);
- if (!replay) {
- Env.getCurrentEnv().getEditLog().logAddConstraint(
- new AlterConstraintLog(primaryKeyConstraint, this));
- }
+ return primaryKeyConstraint;
} finally {
writeUnlock();
}
}
- default PrimaryKeyConstraint tryGetPrimaryKeyForForeignKeyUnsafe(
- PrimaryKeyConstraint requirePrimaryKey, TableIf referencedTable) {
- Optional<Constraint> primaryKeyConstraint =
referencedTable.getConstraintsMapUnsafe().values().stream()
- .filter(requirePrimaryKey::equals)
- .findFirst();
- if (!primaryKeyConstraint.isPresent()) {
- throw new AnalysisException(String.format(
- "Foreign key constraint requires a primary key constraint
%s in %s",
- requirePrimaryKey.getPrimaryKeyNames(),
referencedTable.getName()));
+ default void updatePrimaryKeyForForeignKey(PrimaryKeyConstraint
requirePrimaryKey, TableIf referencedTable) {
+ referencedTable.writeLock();
+ try {
+ Optional<Constraint> primaryKeyConstraint =
referencedTable.getConstraintsMapUnsafe().values().stream()
+ .filter(requirePrimaryKey::equals)
+ .findFirst();
+ if (!primaryKeyConstraint.isPresent()) {
+ throw new AnalysisException(String.format(
+ "Foreign key constraint requires a primary key
constraint %s in %s",
+ requirePrimaryKey.getPrimaryKeyNames(),
referencedTable.getName()));
+ }
+ ((PrimaryKeyConstraint)
(primaryKeyConstraint.get())).addForeignTable(this);
+ } finally {
+ referencedTable.writeUnlock();
}
- return ((PrimaryKeyConstraint) (primaryKeyConstraint.get()));
}
- default void addForeignConstraint(String name, ImmutableList<String>
columns,
- TableIf referencedTable, ImmutableList<String> referencedColumns,
boolean replay) {
+ default Constraint addForeignConstraint(String name, ImmutableList<String>
columns,
+ TableIf referencedTable, ImmutableList<String> referencedColumns) {
writeLock();
- referencedTable.writeLock();
try {
Map<String, Constraint> constraintMap = getConstraintsMapUnsafe();
ForeignKeyConstraint foreignKeyConstraint =
new ForeignKeyConstraint(name, columns, referencedTable,
referencedColumns);
- checkConstraintNotExistenceUnsafe(name, foreignKeyConstraint,
constraintMap);
- PrimaryKeyConstraint requirePrimaryKeyName = new
PrimaryKeyConstraint(name,
+ checkConstraintNotExistence(name, foreignKeyConstraint,
constraintMap);
+ PrimaryKeyConstraint requirePrimaryKey = new
PrimaryKeyConstraint(name,
foreignKeyConstraint.getReferencedColumnNames());
- PrimaryKeyConstraint primaryKeyConstraint =
- tryGetPrimaryKeyForForeignKeyUnsafe(requirePrimaryKeyName,
referencedTable);
- primaryKeyConstraint.addForeignTable(this);
+ updatePrimaryKeyForForeignKey(requirePrimaryKey, referencedTable);
constraintMap.put(name, foreignKeyConstraint);
- if (!replay) {
- Env.getCurrentEnv().getEditLog().logAddConstraint(
- new AlterConstraintLog(foreignKeyConstraint, this));
- }
+ return foreignKeyConstraint;
} finally {
- referencedTable.writeUnlock();
writeUnlock();
}
}
@@ -313,21 +303,22 @@ public interface TableIf {
if (constraint instanceof UniqueConstraint) {
UniqueConstraint uniqueConstraint = (UniqueConstraint) constraint;
this.addUniqueConstraint(constraint.getName(),
-
ImmutableList.copyOf(uniqueConstraint.getUniqueColumnNames()), true);
+
ImmutableList.copyOf(uniqueConstraint.getUniqueColumnNames()));
} else if (constraint instanceof PrimaryKeyConstraint) {
PrimaryKeyConstraint primaryKeyConstraint = (PrimaryKeyConstraint)
constraint;
this.addPrimaryKeyConstraint(primaryKeyConstraint.getName(),
-
ImmutableList.copyOf(primaryKeyConstraint.getPrimaryKeyNames()), true);
+
ImmutableList.copyOf(primaryKeyConstraint.getPrimaryKeyNames()));
} else if (constraint instanceof ForeignKeyConstraint) {
ForeignKeyConstraint foreignKey = (ForeignKeyConstraint)
constraint;
this.addForeignConstraint(foreignKey.getName(),
ImmutableList.copyOf(foreignKey.getForeignKeyNames()),
foreignKey.getReferencedTable(),
-
ImmutableList.copyOf(foreignKey.getReferencedColumnNames()), true);
+
ImmutableList.copyOf(foreignKey.getReferencedColumnNames()));
}
}
- default void dropConstraint(String name, boolean replay) {
+ default Constraint dropConstraint(String name) {
+ Constraint dropConstraint;
writeLock();
try {
Map<String, Constraint> constraintMap = getConstraintsMapUnsafe();
@@ -341,12 +332,11 @@ public interface TableIf {
((PrimaryKeyConstraint) constraint).getForeignTables()
.forEach(t -> t.dropFKReferringPK(this,
(PrimaryKeyConstraint) constraint));
}
- if (!replay) {
- Env.getCurrentEnv().getEditLog().logDropConstraint(new
AlterConstraintLog(constraint, this));
- }
+ dropConstraint = constraint;
} finally {
writeUnlock();
}
+ return dropConstraint;
}
default void dropFKReferringPK(TableIf table, PrimaryKeyConstraint
constraint) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
index 38bf71133c0..8c90bc0f914 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
@@ -17,6 +17,7 @@
package org.apache.doris.nereids.trees.plans.commands;
+import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.common.Pair;
import org.apache.doris.nereids.NereidsPlanner;
@@ -29,6 +30,7 @@ import
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel
import org.apache.doris.nereids.trees.plans.logical.LogicalCatalogRelation;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.persist.AlterConstraintLog;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.StmtExecutor;
@@ -61,16 +63,19 @@ public class AddConstraintCommand extends Command
implements ForwardWithSync {
@Override
public void run(ConnectContext ctx, StmtExecutor executor) throws
Exception {
Pair<ImmutableList<String>, TableIf> columnsAndTable =
extractColumnsAndTable(ctx, constraint.toProject());
+ org.apache.doris.catalog.constraint.Constraint catalogConstraint =
null;
if (constraint.isForeignKey()) {
Pair<ImmutableList<String>, TableIf> referencedColumnsAndTable
= extractColumnsAndTable(ctx,
constraint.toReferenceProject());
- columnsAndTable.second.addForeignConstraint(name,
columnsAndTable.first,
- referencedColumnsAndTable.second,
referencedColumnsAndTable.first, false);
+ catalogConstraint =
columnsAndTable.second.addForeignConstraint(name, columnsAndTable.first,
+ referencedColumnsAndTable.second,
referencedColumnsAndTable.first);
} else if (constraint.isPrimaryKey()) {
- columnsAndTable.second.addPrimaryKeyConstraint(name,
columnsAndTable.first, false);
+ catalogConstraint =
columnsAndTable.second.addPrimaryKeyConstraint(name, columnsAndTable.first);
} else if (constraint.isUnique()) {
- columnsAndTable.second.addUniqueConstraint(name,
columnsAndTable.first, false);
+ catalogConstraint =
columnsAndTable.second.addUniqueConstraint(name, columnsAndTable.first);
}
+ Env.getCurrentEnv().getEditLog().logAddConstraint(
+ new AlterConstraintLog(catalogConstraint,
columnsAndTable.second));
}
private Pair<ImmutableList<String>, TableIf>
extractColumnsAndTable(ConnectContext ctx, LogicalPlan plan) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
index 9878b0e9263..84143f234c3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropConstraintCommand.java
@@ -17,6 +17,7 @@
package org.apache.doris.nereids.trees.plans.commands;
+import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.nereids.NereidsPlanner;
import org.apache.doris.nereids.exceptions.AnalysisException;
@@ -27,6 +28,7 @@ import
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel
import org.apache.doris.nereids.trees.plans.logical.LogicalCatalogRelation;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.persist.AlterConstraintLog;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.StmtExecutor;
@@ -56,7 +58,8 @@ public class DropConstraintCommand extends Command implements
ForwardWithSync {
@Override
public void run(ConnectContext ctx, StmtExecutor executor) throws
Exception {
TableIf table = extractTable(ctx, plan);
- table.dropConstraint(name, false);
+ org.apache.doris.catalog.constraint.Constraint catalogConstraint =
table.dropConstraint(name);
+ Env.getCurrentEnv().getEditLog().logDropConstraint(new
AlterConstraintLog(catalogConstraint, table));
}
private TableIf extractTable(ConnectContext ctx, LogicalPlan plan) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
index 8400c0d6672..958277dd6b7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java
@@ -983,7 +983,7 @@ public class EditLog {
}
case OperationType.OP_DROP_CONSTRAINT: {
final AlterConstraintLog log = (AlterConstraintLog)
journal.getData();
-
log.getTableIf().dropConstraint(log.getConstraint().getName(), true);
+
log.getTableIf().dropConstraint(log.getConstraint().getName());
break;
}
case OperationType.OP_ALTER_USER: {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/constraint/ConstraintPersistTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/constraint/ConstraintPersistTest.java
index 045d1893022..64f3db583ad 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/catalog/constraint/ConstraintPersistTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/catalog/constraint/ConstraintPersistTest.java
@@ -169,11 +169,8 @@ class ConstraintPersistTest extends TestWithFeService
implements PlanPatternMatc
@Test
void externalTableTest() throws Exception {
ExternalTable externalTable = new ExternalTable();
- try {
- externalTable.addPrimaryKeyConstraint("pk",
ImmutableList.of("col"), false);
- } catch (Exception ignore) {
- // ignore
- }
+ externalTable.addPrimaryKeyConstraint("pk", ImmutableList.of("col"));
+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DataOutput output = new DataOutputStream(outputStream);
externalTable.write(output);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]