denisenkom / pytds

Python DBAPI driver for MSSQL using pure Python TDS (Tabular Data Stream) protocol implementation
MIT License
192 stars 53 forks source link

Connection reset error #134

Open hardiksondagar opened 2 years ago

hardiksondagar commented 2 years ago

For some queries, it is resetting connection in read package method. Same query works in pymssql and pyodbc.

Traceback (most recent call last):
  File "/home/hardiksondagar/sqlserver-sh/tds.py", line 14, in <module>
    cur.execute(query)
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/__init__.py", line 732, in execute
    self._execute(operation, params)
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/__init__.py", line 721, in _execute
    self._session.find_result_or_done()
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 1605, in find_result_or_done
    marker = self.get_token_id()
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 1549, in get_token_id
    marker = self._reader.get_byte()
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 170, in get_byte
    return self.unpack(_byte)[0]
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 165, in unpack
    buf, offset = readall_fast(self, struc.size)
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds_base.py", line 577, in readall_fast
    buf, offset = stm.read_fast(size)
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 145, in read_fast
    self._read_packet()
  File "/home/hardiksondagar/sqlserver-sh/env/lib/python3.9/site-packages/pytds/tds.py", line 232, in _read_packet
    received = self._transport.recv_into(self._bufview[pos:], _header.size - pos)
ConnectionResetError: [Errno 104] Connection reset by peer

server info

product_version - 201326633
tds_version - 1879048192 (7.0)
mars_enabled - False
hardiksondagar commented 2 years ago

Reducing blocksize from 4096 to 1024 in pytds.connect, fixes the issue.

hardiksondagar commented 2 years ago

One more interesting finding is, this issue comes only when query length is more than 600 characters. Weird

denisenkom commented 11 months ago

Is there a way to reproduce this issue reliably?