## Proposed changes cherry-pick from #38700 Issue Number: close #xxx <!--Describe your changes.--> --------- ## Proposed changes Issue Number: close #xxx <!--Describe your changes.--> Co-authored-by: garenshi <garenshi@tencent.com>
This commit is contained in:
@ -3952,7 +3952,7 @@ show_stmt ::=
|
||||
{:
|
||||
RESULT = new ShowStoragePolicyUsingStmt(null);
|
||||
:}
|
||||
| KW_SHOW KW_STORAGE KW_POLICY KW_USING KW_FOR ident:policy
|
||||
| KW_SHOW KW_STORAGE KW_POLICY KW_USING KW_FOR ident_or_text:policy
|
||||
{:
|
||||
RESULT = new ShowStoragePolicyUsingStmt(policy);
|
||||
:}
|
||||
|
||||
@ -76,6 +76,7 @@ import org.apache.doris.thrift.TSortType;
|
||||
import org.apache.doris.thrift.TTabletType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
@ -177,7 +178,19 @@ public class Alter {
|
||||
}
|
||||
// check currentStoragePolicy resource exist.
|
||||
Env.getCurrentEnv().getPolicyMgr().checkStoragePolicyExist(currentStoragePolicy);
|
||||
|
||||
boolean enableUniqueKeyMergeOnWrite;
|
||||
olapTable.readLock();
|
||||
try {
|
||||
enableUniqueKeyMergeOnWrite = olapTable.getEnableUniqueKeyMergeOnWrite();
|
||||
} finally {
|
||||
olapTable.readUnlock();
|
||||
}
|
||||
// must check here whether you can set the policy, otherwise there will be inconsistent metadata
|
||||
if (enableUniqueKeyMergeOnWrite && !Strings.isNullOrEmpty(currentStoragePolicy)) {
|
||||
throw new UserException(
|
||||
"Can not set UNIQUE KEY table that enables Merge-On-write"
|
||||
+ " with storage policy(" + currentStoragePolicy + ")");
|
||||
}
|
||||
olapTable.setStoragePolicy(currentStoragePolicy);
|
||||
needProcessOutsideTableLock = true;
|
||||
} else if (currentAlterOps.checkIsBeingSynced(alterClauses)) {
|
||||
|
||||
@ -2215,11 +2215,6 @@ public class SchemaChangeHandler extends AlterHandler {
|
||||
}
|
||||
}
|
||||
String storagePolicy = properties.get(PropertyAnalyzer.PROPERTIES_STORAGE_POLICY);
|
||||
if (enableUniqueKeyMergeOnWrite && !Strings.isNullOrEmpty(storagePolicy)) {
|
||||
throw new UserException(
|
||||
"Can not set UNIQUE KEY table that enables Merge-On-write" + " with storage policy(" + storagePolicy
|
||||
+ ")");
|
||||
}
|
||||
long storagePolicyId = storagePolicyNameToId(storagePolicy);
|
||||
|
||||
String compactionPolicy = properties.get(PropertyAnalyzer.PROPERTIES_COMPACTION_POLICY);
|
||||
|
||||
@ -5144,6 +5144,9 @@ public class Env {
|
||||
// storage policy re-use modify in memory
|
||||
Optional.ofNullable(tableProperty.getStoragePolicy()).filter(p -> !p.isEmpty())
|
||||
.ifPresent(p -> olapTable.getPartitionInfo().setStoragePolicy(partition.getId(), p));
|
||||
Optional.ofNullable(tableProperty.getStoragePolicy()).filter(p -> !p.isEmpty())
|
||||
.ifPresent(p -> olapTable.getPartitionInfo().getDataProperty(partition.getId())
|
||||
.setStoragePolicy(p));
|
||||
}
|
||||
break;
|
||||
case OperationType.OP_UPDATE_BINLOG_CONFIG:
|
||||
|
||||
@ -27,6 +27,7 @@ import org.apache.doris.analysis.CreateTableStmt;
|
||||
import org.apache.doris.analysis.DateLiteral;
|
||||
import org.apache.doris.analysis.DropResourceStmt;
|
||||
import org.apache.doris.analysis.ShowCreateMaterializedViewStmt;
|
||||
import org.apache.doris.analysis.ShowCreateTableStmt;
|
||||
import org.apache.doris.catalog.ColocateGroupSchema;
|
||||
import org.apache.doris.catalog.ColocateTableIndex.GroupId;
|
||||
import org.apache.doris.catalog.Column;
|
||||
@ -244,6 +245,10 @@ public class AlterTest {
|
||||
createTable("create table test.unique_sequence_col (k1 int, v1 int, v2 date) ENGINE=OLAP "
|
||||
+ " UNIQUE KEY(`k1`) DISTRIBUTED BY HASH(`k1`) BUCKETS 1"
|
||||
+ " PROPERTIES (\"replication_num\" = \"1\", \"function_column.sequence_col\" = \"v1\");");
|
||||
|
||||
createTable("CREATE TABLE test.tbl_storage(k1 int) ENGINE=OLAP UNIQUE KEY (k1)\n"
|
||||
+ "DISTRIBUTED BY HASH(k1) BUCKETS 3\n"
|
||||
+ "PROPERTIES('replication_num' = '1','enable_unique_key_merge_on_write' = 'true');");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
@ -1433,4 +1438,17 @@ public class AlterTest {
|
||||
String stmt = "alter table test.unique_sequence_col modify column v1 Date";
|
||||
alterTable(stmt, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testModifyTableForStoragePolicy() throws Exception {
|
||||
String sql = "ALTER TABLE test.tbl_storage SET ('storage_policy' = 'testPolicy')";
|
||||
alterTableWithExceptionMsg(sql, "errCode = 2, detailMessage = Can not set UNIQUE KEY table that enables "
|
||||
+ "Merge-On-write with storage policy(testPolicy)");
|
||||
String showSQl = "show create table test.tbl_storage";
|
||||
ShowCreateTableStmt showStmt = (ShowCreateTableStmt) UtFrameUtils.parseAndAnalyzeStmt(showSQl, connectContext);
|
||||
ShowExecutor executor = new ShowExecutor(connectContext, showStmt);
|
||||
List<List<String>> resultRows = executor.execute().getResultRows();
|
||||
String createSql = resultRows.get(0).get(1);
|
||||
Assert.assertFalse(createSql.contains("storage_policy"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user