diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java index e949c5c2c2..07770833f5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java @@ -2804,7 +2804,7 @@ public class SchemaChangeHandler extends AlterHandler { BinlogConfig oldBinlogConfig; BinlogConfig newBinlogConfig; - db.readLock(); + olapTable.readLock(); try { oldBinlogConfig = new BinlogConfig(olapTable.getBinlogConfig()); newBinlogConfig = new BinlogConfig(oldBinlogConfig); @@ -2812,7 +2812,7 @@ public class SchemaChangeHandler extends AlterHandler { } catch (Exception e) { throw new DdlException(e.getMessage()); } finally { - db.readUnlock(); + olapTable.readUnlock(); } for (AlterClause alterClause : alterClauses) { @@ -2858,6 +2858,19 @@ public class SchemaChangeHandler extends AlterHandler { return true; } + // check db binlog config, if db binlog config is not same as table binlog config, throw exception + BinlogConfig dbBinlogConfig; + db.readLock(); + try { + dbBinlogConfig = new BinlogConfig(db.getBinlogConfig()); + } finally { + db.readUnlock(); + } + boolean dbBinlogEnable = (dbBinlogConfig != null && dbBinlogConfig.isEnable()); + if (dbBinlogEnable && !newBinlogConfig.isEnable()) { + throw new DdlException("db binlog is enable, but table binlog is disable"); + } + LOG.info("begin to update table's binlog config. table: {}, old binlog: {}, new binlog: {}", olapTable.getName(), oldBinlogConfig, newBinlogConfig); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java index 8bcd6a7d8f..43c5211e07 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java @@ -66,8 +66,10 @@ public class ModifyTablePropertiesClause extends AlterTableClause { } if (properties.size() != 1 - && !TableProperty.isSamePrefixProperties(properties, TableProperty.DYNAMIC_PARTITION_PROPERTY_PREFIX)) { - throw new AnalysisException("Can only set one table property at a time"); + && !TableProperty.isSamePrefixProperties(properties, TableProperty.DYNAMIC_PARTITION_PROPERTY_PREFIX) + && !TableProperty.isSamePrefixProperties(properties, PropertyAnalyzer.PROPERTIES_BINLOG_PREFIX)) { + throw new AnalysisException( + "Can only set one table property(without dynamic partition && binlog) at a time"); } if (properties.containsKey(PropertyAnalyzer.PROPERTIES_COLOCATE_WITH)) {