incubator-doris [Bug]Modify a dynamic partition property in a non-dynamic partition table will throw a Exception

kcwpcxri  于 2022-04-22  发布在  Java
关注(0)|答案(0)|浏览(117)

Describe the bug

When user use cmd like alter table xxx set ("dynamic_partition.enable"="true"); , if the table is not a dynamic partition table, It will throw a Exception like following

java.lang.NumberFormatException: null
        at java.lang.Integer.parseInt(Integer.java:614) ~[?:?]
        at java.lang.Integer.parseInt(Integer.java:770) ~[?:?]
        at org.apache.doris.catalog.DynamicPartitionProperty.<init>(DynamicPartitionProperty.java:60) ~[palo-fe.jar:?]
        at org.apache.doris.catalog.TableProperty.buildDynamicProperty(TableProperty.java:100) ~[palo-fe.jar:?]
        at org.apache.doris.catalog.Catalog.modifyTableDynamicPartition(Catalog.java:5167) ~[palo-fe.jar:?]
        at org.apache.doris.alter.SchemaChangeHandler.process(SchemaChangeHandler.java:1395) ~[palo-fe.jar:?]
        at org.apache.doris.alter.Alter.processAlterTable(Alter.java:189) ~[palo-fe.jar:?]
        at org.apache.doris.catalog.Catalog.alterTable(Catalog.java:4846) ~[palo-fe.jar:?]
        at org.apache.doris.qe.DdlExecutor.execute(DdlExecutor.java:113) ~[palo-fe.jar:?]
        at org.apache.doris.qe.StmtExecutor.handleDdlStmt(StmtExecutor.java:870) [palo-fe.jar:?]
        at org.apache.doris.qe.StmtExecutor.execute(StmtExecutor.java:281) [palo-fe.jar:?]
        at org.apache.doris.qe.ConnectProcessor.proxyExecute(ConnectProcessor.java:431) [palo-fe.jar:?]
        at org.apache.doris.service.FrontendServiceImpl.forward(FrontendServiceImpl.java:577) [palo-fe.jar:?]
        at org.apache.doris.thrift.FrontendService$Processor$forward.getResult(FrontendService.java:1633) [palo-fe.jar:?]
        at org.apache.doris.thrift.FrontendService$Processor$forward.getResult(FrontendService.java:1618) [palo-fe.jar:?]
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) [libthrift-0.9.3.jar:0.9.3]
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) [libthrift-0.9.3.jar:0.9.3]
        at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286) [libthrift-0.9.3.jar:0.9.3]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
        at java.lang.Thread.run(Thread.java:834) [?:?]

It is because we forget to check if the table is a dynamic partition table, it means that the table's dynamic property is null, so the current logic try to create a new DynamicProperty with the property contains only one paramater.

incubator-doris/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java

Lines 1394 to 1396 in ad17afe

| | } elseif (DynamicPartitionUtil.checkDynamicPartitionPropertiesExist(properties)) { |
| | Catalog.getCurrentCatalog().modifyTableDynamicPartition(db, olapTable, properties); |
| | return; |

Solution

Add check logic before alter a table's dynamic properties

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题