denisenkom / pytds

Python DBAPI driver for MSSQL using pure Python TDS (Tabular Data Stream) protocol implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Connection reset error

hardiksondagar opened this issue · comments

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

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

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

Is there a way to reproduce this issue reliably?