[
https://issues.jboss.org/browse/TEIID-5658?page=com.atlassian.jira.plugin...
]
Steven Hawkins updated TEIID-5658:
----------------------------------
Description:
Although it is not apparent in our logs, we are delivering response messages out of
order.
From our logs we have:
2019-02-14 08:18:12.476 org.teiid.ODBC TRACE NIO1 invoking server method: prepare [,
select 3 from pg_class where relname='pg_class', []]
2019-02-14 08:18:12.476 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f prepareCompleted []
2019-02-14 08:18:12.48 org.teiid.ODBC TRACE NIO1 invoking server method: bindParameters [,
, [], 0, null, UTF-8]
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f bindComplete null
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking server method:
getResultSetMetaDataDescription []
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f sendResultSetDescription
[[org.teiid.odbc.PGUtil$PgColInfo@333d1d1b], null]
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking server method: execute [, 0]
2019-02-14 08:18:12.484 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f sendResults [null,
org.teiid.jdbc.ResultSetImpl@4516a1a2, [org.teiid.odbc.PGUtil$PgColInfo@333d1d1b],
org.teiid.client.util.ResultsFuture@1e98b9de, FORWARD, -1, false, null]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE Worker2_QueryProcessorQueue211 invoking
client method: org.teiid.transport.ODBCClientInstance@6064753f sendCommandComplete [select
3 from pg_class where relname='pg_class', [1]]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE NIO1 invoking server method: sync null
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f ready [false, false]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE Worker0_QueryProcessorQueue212 invoking
client method: org.teiid.transport.ODBCClientInstance@3e802be1 ready [false, false]
At the network level we see ready delivered before the data row.
was:
The code is allowing for a sequence of events such as:
2019-02-13 14:07:47.613 org.teiid.ODBC TRACE NIO4 invoking server method: prepare [,
select oid from pg_class where relname='pg_class', []]
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 prepareCompleted []
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking server method: bindParameters
[, , [], 0, null, UTF-8]
2019-02-13 14:07:47.615 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 bindComplete null
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking server method:
getResultSetMetaDataDescription []
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 sendResultSetDescription
[[org.teiid.odbc.PGUtil$PgColInfo@1086babd], null]
2019-02-13 14:07:47.617 org.teiid.ODBC TRACE NIO4 invoking server method: execute [, 0]
2019-02-13 14:07:47.618 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 sendResults [null,
org.teiid.jdbc.ResultSetImpl@1e1aed1a, [org.teiid.odbc.PGUtil$PgColInfo@1086babd],
org.teiid.client.util.ResultsFuture@3b6cff36, FORWARD, -1, false, null]
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE NIO4 invoking server method: sync null
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE Worker0_QueryProcessorQueue368 invoking
client method: org.teiid.transport.ODBCClientInstance$1@d875495 sendCommandComplete
[select oid from pg_class where relname='pg_class', [1]]
2019-02-13 14:07:47.619 org.teiid.ODBC TRACE NIO4 invoking client method:
org.teiid.transport.ODBCClientInstance$1@d875495 ready [false, false]
That is after execute we are immediately responding with results. That response ahead of
the sync causes issues in the pg jdbc driver such as reporting that there is no result
set. See TEIID-5425
This does not appear to be a requirement of the flow:
https://www.postgresql.org/docs/9.3/protocol-flow.html#AEN99807
Summary: PG transport can deliver messages out of order (was: PG transport can
sendResults before sync)
PG transport can deliver messages out of order
----------------------------------------------
Key: TEIID-5658
URL:
https://issues.jboss.org/browse/TEIID-5658
Project: Teiid
Issue Type: Bug
Components: ODBC
Reporter: Steven Hawkins
Assignee: Steven Hawkins
Priority: Major
Fix For: 12.1, 12.0.1, 11.2.3
Although it is not apparent in our logs, we are delivering response messages out of
order.
From our logs we have:
2019-02-14 08:18:12.476 org.teiid.ODBC TRACE NIO1 invoking server method: prepare [,
select 3 from pg_class where relname='pg_class', []]
2019-02-14 08:18:12.476 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f prepareCompleted []
2019-02-14 08:18:12.48 org.teiid.ODBC TRACE NIO1 invoking server method: bindParameters
[, , [], 0, null, UTF-8]
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f bindComplete null
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking server method:
getResultSetMetaDataDescription []
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f sendResultSetDescription
[[org.teiid.odbc.PGUtil$PgColInfo@333d1d1b], null]
2019-02-14 08:18:12.481 org.teiid.ODBC TRACE NIO1 invoking server method: execute [, 0]
2019-02-14 08:18:12.484 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f sendResults [null,
org.teiid.jdbc.ResultSetImpl@4516a1a2, [org.teiid.odbc.PGUtil$PgColInfo@333d1d1b],
org.teiid.client.util.ResultsFuture@1e98b9de, FORWARD, -1, false, null]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE Worker2_QueryProcessorQueue211 invoking
client method: org.teiid.transport.ODBCClientInstance@6064753f sendCommandComplete [select
3 from pg_class where relname='pg_class', [1]]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE NIO1 invoking server method: sync null
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE NIO1 invoking client method:
org.teiid.transport.ODBCClientInstance@6064753f ready [false, false]
2019-02-14 08:18:12.486 org.teiid.ODBC TRACE Worker0_QueryProcessorQueue212 invoking
client method: org.teiid.transport.ODBCClientInstance@3e802be1 ready [false, false]
At the network level we see ready delivered before the data row.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)