[freetds] ct_cancel hangs

Christophe Combelles ccomb at free.fr
Mon Jul 23 12:08:12 EDT 2007


James K. Lowden a écrit :
> Christophe Combelles wrote:
>> I'm posting here my own monolog of a problem I have with
>> accessing a windows based sybase ASA 7.0 from python/freetds on linux.
> 
> Christophe, 
> 
> Post a TDSDUMP log of the activity here.  That will allow us to isolate
> the "hang" at the TDS level, and might provide enough information about
> the API calling sequence to decide if Python is doing the right thing.  
> 
> I changed (i.e. fixed) cancel processing in the current snapshot some
> months back, but ct-lib cancel processing isn't something I know much
> about.  We'll have to compare your log to the unit test (if extant) and
> the docs to see what should be done.  
> 

I really want to provide most information to investigate this, but I must be 
extremely careful because the database is full of personal medical informations, 
and I'm not authorized to disclose any of them, even accidentally, along with a 
logfile. Another thing is the full logfile size is 2,5Mb and I'm sure nobody 
will appreciate to receive it :)

Actually the hang occurs for requests that should return large results.
I'm doing just one cursor.fetchone(), then at the moment I run cursor.close() 
the logfile suddenly grows a lot (2,5MB) (it seems to contain the full result), 
then the close() operation never returns.

Here is the part of the logfile that contains the CANCEL_ALL operation.
If needed, please point me to the correct part of the logfile to provide so that 
the problem could be found.


(...)
ct.c:1858:_ct_get_client_type(type 39, user 1516, size 10)
cs.c:351:cs_convert()
ct.c:1971:_ct_get_server_type(0)
ct.c:1971:_ct_get_server_type(0)
cs.c:358:cs_convert() srctype = 47 (7) desttype = 47 (10)
cs.c:383:cs_convert() srctype = desttype
cs.c:419:cs_convert() desttype = character
ct.c:1677:_ct_bind_data(): column_type: 39 column_len: 1
ct.c:1971:_ct_get_server_type(0)
ct.c:1858:_ct_get_client_type(type 39, user 1515, size 2)
cs.c:351:cs_convert()
ct.c:1971:_ct_get_server_type(0)
ct.c:1971:_ct_get_server_type(0)
cs.c:358:cs_convert() srctype = 47 (1) desttype = 47 (2)
cs.c:383:cs_convert() srctype = desttype
cs.c:419:cs_convert() desttype = character
ct.c:2049:ct_cancel()
ct.c:2216:CS_CANCEL_ALL with connection
ct.c:2218:ct_cancel() cancelling a command for a connection
ct.c:2228:ct_cancel() command state SENT
ct.c:2229:ct_cancel() sending a cancel
net.c:673:Sending packet
0000 06 01 00 08 00 00 00 00-                        |........|

util.c:119:Changing query state from PENDING to READING
token.c:526:processing result tokens.  marker is  d1(ROW)
token.c:1863:tds_get_data: column 0, type 56, varint size 0
token.c:1920:processing row.  column size is 4
token.c:1863:tds_get_data: column 1, type 47, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 2, type 56, varint size 0
token.c:1920:processing row.  column size is 4
token.c:1863:tds_get_data: column 3, type 47, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 4, type 38, varint size 1
token.c:1920:processing row.  column size is 4
token.c:1863:tds_get_data: column 5, type 39, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 6, type 38, varint size 1
...

(about 45000 lines)

...
token.c:1863:tds_get_data: column 9, type 111, varint size 1
token.c:1920:processing row.  column size is 8
token.c:1863:tds_get_data: column 10, type 39, varint size 1
token.c:1920:processing row.  column size is 3
token.c:1863:tds_get_data: column 11, type 39, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 12, type 111, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 13, type 39, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 14, type 39, varint size 1
token.c:1920:processing row.  column size is -1
token.c:526:processing result tokens.  marker is  d1(ROW)
token.c:1863:tds_get_data: column 0, type 56, varint size 0
token.c:1920:processing row.  column size is 4
token.c:1863:tds_get_data: column 1, type 47, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 2, type 56, varint size 0
token.c:1920:processing row.  column size is 4
token.c:1863:tds_get_data: column 3, type 47, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 4, type 38, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 5, type 39, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 6, type 38, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 7, type 39, varint size 1
token.c:1920:processing row.  column size is -1
token.c:1863:tds_get_data: column 8, type 47, varint size 1
token.c:1920:processing row.  column size is 16
token.c:1863:tds_get_data: column 9, type 111, varint size 1
token.c:1920:processing row.  column size is 8
token.c:1863:tds_get_data: column 10, type 39, varint size 1
token.c:1920:processing row.  column size is 3
token.c:1863:tds_get_data: column 11, type 39, varint size 1
token.c:1920:processing row.  column size is 1
token.c:1863:tds_get_data: column 12, type 111, varint size 1
net.c:446:Received header
0000 04 01 00 11 00 00 00 00-                        |........|

net.c:542:Received packet
0000 fd 30 00 02 00 d1 04 00-00                      |.0...... .|

token.c:1920:processing row.  column size is 253




More information about the FreeTDS mailing list