[teiid-issues] [JBoss JIRA] (TEIID-2769) BLOB as virtual procedure parameter is getting closed

Steven Hawkins (JIRA) issues at jboss.org
Thu Dec 12 13:44:32 EST 2013


    [ https://issues.jboss.org/browse/TEIID-2769?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12930923#comment-12930923 ] 

Steven Hawkins commented on TEIID-2769:
---------------------------------------

The issue here is that users have to careful when using the streaming option.  The xmlparse counts as one read and the xmltable counts as another and thus an exception.  If you pass the blob directly, use the wellformed option on xmlparse, or don't use a streaming result, then you won't get an exception.  I'm not sure if there is a change that we'd want to make here other than maybe putting a longer message about not re-reading a streaming result.
                
> BLOB as virtual procedure parameter is getting closed
> -----------------------------------------------------
>
>                 Key: TEIID-2769
>                 URL: https://issues.jboss.org/browse/TEIID-2769
>             Project: Teiid
>          Issue Type: Bug
>          Components: Server
>    Affects Versions: 8.4.1
>            Reporter: Van Halbert
>            Assignee: Steven Hawkins
>
> Not sure what is the cause.
> I have two virtual procedures [1][2]. [2] has a XMLLiteral parameter. I call [2] inside [1]. However I get exception [3] because the response.result blob stream is apparently closed.
> [1] CREATE VIRTUAL PROCEDURE
> BEGIN
> 	SELECT t.* FROM (EXEC PeopleRestXmlSource.invokeHttp('GET', null, null, TRUE)) AS response, TABLE(EXEC PeopleRestXmlView.getPeople_response(XMLPARSE(DOCUMENT response.result))) AS t;
> END
> [2] CREATE VIRTUAL PROCEDURE
> BEGIN
> 	SELECT t.* FROM XMLTABLE('//return' PASSING PeopleJaxwsView.getPeopleByName_response.xml_in COLUMNS name string PATH 'text()') AS t;
> END
> [3] 
> org.teiid.jdbc.TeiidSQLException: TEIID30328 Unable to evaluate XMLPARSE(DOCUMENT response.result): TEIID30331 java.sql.SQLException: Already Freed.
> 	at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:135)
> 	at org.teiid.jdbc.TeiidSQLException.create(TeiidSQLException.java:71)
> 	at org.teiid.jdbc.StatementImpl.postReceiveResults(StatementImpl.java:668)
> 	at org.teiid.jdbc.StatementImpl.access$100(StatementImpl.java:63)
> 	at org.teiid.jdbc.StatementImpl$2.onCompletion(StatementImpl.java:516)
> 	at org.teiid.client.util.ResultsFuture.done(ResultsFuture.java:135)
> 	at org.teiid.client.util.ResultsFuture.access$200(ResultsFuture.java:40)
> 	at org.teiid.client.util.ResultsFuture$1.receiveResults(ResultsFuture.java:79)
> 	at org.teiid.net.socket.SocketServerInstanceImpl.receivedMessage(SocketServerInstanceImpl.java:242)
> 	at org.teiid.net.socket.SocketServerInstanceImpl.read(SocketServerInstanceImpl.java:278)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.teiid.net.socket.SocketServerConnectionFactory$ShutdownHandler.invoke(SocketServerConnectionFactory.java:102)
> 	at $Proxy1.read(Unknown Source)
> 	at org.teiid.net.socket.SocketServerInstanceImpl$RemoteInvocationHandler$1.get(SocketServerInstanceImpl.java:377)
> 	at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:525)
> 	at org.teiid.jdbc.StatementImpl.executeSql(StatementImpl.java:393)
> 	at org.teiid.jdbc.StatementImpl.executeQuery(StatementImpl.java:327)
> 	at JDBCClient.execute(JDBCClient.java:81)
> 	at JDBCClient.main(JDBCClient.java:48)
> Caused by: org.teiid.api.exception.query.ExpressionEvaluationException: TEIID30328 Unable to evaluate XMLPARSE(DOCUMENT response.result): TEIID30331 java.sql.SQLException: Already Freed.
> 	at org.teiid.query.eval.Evaluator.evaluate(Evaluator.java:608)
> 	at org.teiid.query.processor.proc.ProcedurePlan.evaluateExpression(ProcedurePlan.java:804)
> 	at org.teiid.query.processor.proc.ProcedurePlan.open(ProcedurePlan.java:211)
> 	at org.teiid.query.processor.relational.PlanExecutionNode.open(PlanExecutionNode.java:82)
> 	at org.teiid.query.processor.relational.RelationalNode.open(RelationalNode.java:254)
> 	at org.teiid.query.processor.relational.JoinStrategy.openRight(JoinStrategy.java:105)
> 	at org.teiid.query.processor.relational.NestedTableJoinStrategy.process(NestedTableJoinStrategy.java:114)
> 	at org.teiid.query.processor.relational.JoinNode.nextBatchDirect(JoinNode.java:211)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:149)
> 	at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:149)
> 	at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:112)
> 	at org.teiid.query.processor.BatchIterator.finalRow(BatchIterator.java:69)
> 	at org.teiid.common.buffer.AbstractTupleSource.getCurrentTuple(AbstractTupleSource.java:70)
> 	at org.teiid.query.processor.BatchIterator.getCurrentTuple(BatchIterator.java:84)
> 	at org.teiid.common.buffer.AbstractTupleSource.hasNext(AbstractTupleSource.java:92)
> 	at org.teiid.query.processor.proc.ProcedurePlan.executePlan(ProcedurePlan.java:563)
> 	at org.teiid.query.processor.proc.CreateCursorResultSetInstruction.process(CreateCursorResultSetInstruction.java:68)
> 	at org.teiid.query.processor.proc.ProcedurePlan.processProcedure(ProcedurePlan.java:356)
> 	at org.teiid.query.processor.proc.ProcedurePlan.nextBatchDirect(ProcedurePlan.java:283)
> 	at org.teiid.query.processor.proc.ProcedurePlan.nextBatch(ProcedurePlan.java:257)
> 	at org.teiid.query.processor.relational.PlanExecutionNode.nextBatchDirect(PlanExecutionNode.java:118)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.ProjectNode.nextBatchDirect(ProjectNode.java:146)
> 	at org.teiid.query.processor.relational.RelationalNode.nextBatch(RelationalNode.java:278)
> 	at org.teiid.query.processor.relational.RelationalPlan.nextBatch(RelationalPlan.java:149)
> 	at org.teiid.query.processor.QueryProcessor.nextBatchDirect(QueryProcessor.java:149)
> 	at org.teiid.query.processor.QueryProcessor.nextBatch(QueryProcessor.java:112)
> 	at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:157)
> 	at org.teiid.query.processor.BatchCollector.collectTuples(BatchCollector.java:139)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.processMore(RequestWorkItem.java:435)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.process(RequestWorkItem.java:320)
> 	at org.teiid.dqp.internal.process.AbstractWorkItem.run(AbstractWorkItem.java:51)
> 	at org.teiid.dqp.internal.process.RequestWorkItem.run(RequestWorkItem.java:248)
> 	at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:269)
> 	at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119)
> 	at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:214)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:722)
> Caused by: org.teiid.api.exception.query.ExpressionEvaluationException: TEIID30331 java.sql.SQLException: Already Freed.
> 	at org.teiid.query.eval.Evaluator.evaluateXMLParse(Evaluator.java:734)
> 	at org.teiid.query.eval.Evaluator.internalEvaluate(Evaluator.java:668)
> 	at org.teiid.query.eval.Evaluator.evaluate(Evaluator.java:606)
> 	... 45 more
> Caused by: java.sql.SQLException: java.sql.SQLException: Already Freed.
> 	at org.teiid.core.types.BaseLob.getBinaryStream(BaseLob.java:105)
> 	at org.teiid.core.types.BaseLob.getCharacterStream(BaseLob.java:98)
> 	at org.teiid.query.eval.Evaluator.evaluateXMLParse(Evaluator.java:727)
> 	... 47 more
> Caused by: java.io.IOException: java.sql.SQLException: Already Freed.
> 	at org.teiid.core.types.InputStreamFactory$BlobInputStreamFactory.getInputStream(InputStreamFactory.java:205)
> 	at org.teiid.core.types.BaseLob.getBinaryStream(BaseLob.java:103)
> 	... 49 more
> Caused by: java.sql.SQLException: Already Freed.
> 	at org.teiid.translator.ws.BinaryWSProcedureExecution$StreamingBlob.getBinaryStream(BinaryWSProcedureExecution.java:72)
> 	at org.teiid.core.types.InputStreamFactory$BlobInputStreamFactory.getInputStream(InputStreamFactory.java:203)
> 	... 50 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the teiid-issues mailing list