You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@iotdb.apache.org by "changxue (Jira)" <ji...@apache.org> on 2022/11/15 08:25:00 UTC

[jira] [Created] (IOTDB-4943) [UDF]more than expect variables give the UDF, return 400 null, NPE

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)