changxue created IOTDB-4943: ------------------------------- Summary: [UDF]more than expect variables give the UDF, return 400 null, NPE Key: IOTDB-4943 URL: https://issues.apache.org/jira/browse/IOTDB-4943 Project: Apache IoTDB Issue Type: Bug Affects Versions: 0.14.0-SNAPSHOT Reporter: changxue Assignee: Yuan Tian
[UDF]more than expect variables give the UDF, return 400 null, NPE 我定义了一个udf 类,里面只需要一个参数,但是我传给它2列值。不应该报空指针。 reproduction: 1. put the jar file of attachment in $IOTDB_HOME/ext/udf/ 2. execute the sql commands below: {code} CREATE FUNCTION COUNT_SEC as "com.timecho.udf.normal.TestStateWindowAccessStrategy"; CREATE TIMESERIES root.udf.d1.s1 WITH DATATYPE=boolean, ENCODING=PLAIN; CREATE TIMESERIES root.udf.d1.s2 WITH DATATYPE=boolean, ENCODING=PLAIN; CREATE TIMESERIES root.udf.d1.ss1 WITH DATATYPE=boolean, ENCODING=PLAIN; INSERT INTO root.udf.d1 (time, s1, s2) VALUES (1, 1, 1),(2, 1, 0),(3, 0, 1),(4, 0, 1),(5, 0, 1),(8, 1, 1),(7, 1, 1),(6, null, 1),(12, 1, 1),(20, 1, 1); show regions; -- notice here select count_sec(s1,s2) from root.udf.d1; {code} datanode logs of data region leader: {code} 2022-11-15 16:17:22,078 [pool-24-IoTDB-DataNodeInternalRPC-Processor-6$20221115_081722_00130_3.1.0] ERROR o.a.i.d.m.e.f.FragmentInstanceManager:131 - error when create FragmentInstanceExecution. java.lang.UnsupportedOperationException: null at org.apache.iotdb.db.mpp.transformation.dag.intermediate.MultiInputColumnIntermediateLayer.constructRowStateWindowReader(MultiInputColumnIntermediateLayer.java:780) at org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer.constructRowWindowReader(IntermediateLayer.java:68) at org.apache.iotdb.db.mpp.plan.expression.visitor.IntermediateLayerVisitor.getUdfTransformer(IntermediateLayerVisitor.java:401) at org.apache.iotdb.db.mpp.plan.expression.visitor.IntermediateLayerVisitor.visitFunctionExpression(IntermediateLayerVisitor.java:205) at org.apache.iotdb.db.mpp.plan.expression.visitor.IntermediateLayerVisitor.visitFunctionExpression(IntermediateLayerVisitor.java:82) at org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression.accept(FunctionExpression.java:131) at org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor.process(ExpressionVisitor.java:53) at org.apache.iotdb.db.mpp.transformation.dag.builder.EvaluationDAGBuilder.buildResultColumnPointReaders(EvaluationDAGBuilder.java:107) at org.apache.iotdb.db.mpp.execution.operator.process.TransformOperator.initTransformers(TransformOperator.java:136) at org.apache.iotdb.db.mpp.execution.operator.process.TransformOperator.<init>(TransformOperator.java:97) at org.apache.iotdb.db.mpp.plan.planner.OperatorTreeGenerator.visitTransform(OperatorTreeGenerator.java:904) at org.apache.iotdb.db.mpp.plan.planner.OperatorTreeGenerator.visitTransform(OperatorTreeGenerator.java:208) at org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TransformNode.accept(TransformNode.java:89) at org.apache.iotdb.db.mpp.plan.planner.OperatorTreeGenerator.visitFragmentSink(OperatorTreeGenerator.java:1552) at org.apache.iotdb.db.mpp.plan.planner.OperatorTreeGenerator.visitFragmentSink(OperatorTreeGenerator.java:208) at org.apache.iotdb.db.mpp.plan.planner.plan.node.sink.FragmentSinkNode.accept(FragmentSinkNode.java:75) at org.apache.iotdb.db.mpp.plan.planner.LocalExecutionPlanner.plan(LocalExecutionPlanner.java:68) at org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceManager.lambda$execDataQueryFragmentInstance$1(FragmentInstanceManager.java:116) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceManager.execDataQueryFragmentInstance(FragmentInstanceManager.java:101) at org.apache.iotdb.db.consensus.statemachine.DataRegionStateMachine.read(DataRegionStateMachine.java:426) at org.apache.iotdb.consensus.multileader.MultiLeaderServerImpl.read(MultiLeaderServerImpl.java:282) at org.apache.iotdb.consensus.multileader.MultiLeaderConsensus.read(MultiLeaderConsensus.java:182) at org.apache.iotdb.db.mpp.execution.executor.RegionReadExecutor.execute(RegionReadExecutor.java:44) at org.apache.iotdb.db.service.thrift.impl.DataNodeInternalRPCServiceImpl.sendFragmentInstance(DataNodeInternalRPCServiceImpl.java:267) at org.apache.iotdb.mpp.rpc.thrift.IDataNodeRPCService$Processor$sendFragmentInstance.getResult(IDataNodeRPCService.java:3582) at org.apache.iotdb.mpp.rpc.thrift.IDataNodeRPCService$Processor$sendFragmentInstance.getResult(IDataNodeRPCService.java:3562) at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38) at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38) at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:248) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)