[
https://issues.apache.org/jira/browse/IOTDB-4943?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yuan Tian reassigned IOTDB-4943:
--------------------------------
Assignee: liaolanyu (was: Yuan Tian)
> [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: liaolanyu
> Priority: Minor
> Attachments: normla-udf-0.14-SNAPSHOT.jar
>
>
> [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)