2 @message |
firebird.driver.types.InterfaceError: Result code does not match request code
LOG DETAILS:
2025-06-26 15:38:19.123
2025-06-26 15:38:19.129 act = <firebird.qa.plugin.Action object at [hex]>
2025-06-26 15:38:19.135 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-06-26 15:38:19.141
2025-06-26 15:38:19.146 @pytest.mark.encryption
2025-06-26 15:38:19.153 @pytest.mark.version('>=3.0.2')
2025-06-26 15:38:19.163 def test_1(act: Action, capsys):
2025-06-26 15:38:19.171 map_dbo = {}
2025-06-26 15:38:19.182
2025-06-26 15:38:19.194 # Query to find first generators page number:
2025-06-26 15:38:19.202 first_gens_page_sql = f"""
2025-06-26 15:38:19.212 select p.rdb$page_number
2025-06-26 15:38:19.222 from rdb$pages p
2025-06-26 15:38:19.231 where p.rdb$page_type = {GENS_PAGE}
2025-06-26 15:38:19.243 order by p.rdb$page_number desc
2025-06-26 15:38:19.252 rows 1
2025-06-26 15:38:19.260 """
2025-06-26 15:38:19.268
2025-06-26 15:38:19.275 # Query to find relation_id and first PP for 'TEST' table:
2025-06-26 15:38:19.284 first_pp_sql = f"""
2025-06-26 15:38:19.299 select p.rdb$relation_id, p.rdb$page_number
2025-06-26 15:38:19.317 from rdb$pages p
2025-06-26 15:38:19.329 join rdb$relations r on p.rdb$relation_id = r.rdb$relation_id
2025-06-26 15:38:19.336 where r.rdb$relation_name=upper('TEST') and p.rdb$page_type = {POINTER_PAGE}
2025-06-26 15:38:19.342 order by p.rdb$page_number
2025-06-26 15:38:19.348 rows 1
2025-06-26 15:38:19.353 """
2025-06-26 15:38:19.357
2025-06-26 15:38:19.362 broken_pages_map = { POINTER_PAGE : [], DATA_PAGE : [], IDX_ROOT_PAGE : [], IDX_B_TREE : [], BLOB_PAGE : [], GENS_PAGE : [] }
2025-06-26 15:38:19.367 with act.db.connect() as con:
2025-06-26 15:38:19.371 fill_dbo(con, map_dbo)
2025-06-26 15:38:19.378 c = con.cursor()
2025-06-26 15:38:19.387
2025-06-26 15:38:19.396 broken_pages_map[GENS_PAGE] = [c.execute(first_gens_page_sql).fetchone()[0],]
2025-06-26 15:38:19.402
2025-06-26 15:38:19.408 test_rel_id, test_rel_first_pp = c.execute(first_pp_sql).fetchone()
2025-06-26 15:38:19.414
2025-06-26 15:38:19.420 # Found first page for each of three types: Data, Index and Blob
2025-06-26 15:38:19.426 # (loop starts from first PointerPage of table 'TEST')
2025-06-26 15:38:19.431 brk_datapage = brk_indxpage = brk_blobpage = -1
2025-06-26 15:38:19.437
2025-06-26 15:38:19.443 for page_no in range(test_rel_first_pp, con.info.pages_allocated):
2025-06-26 15:38:19.451 > page_type, relation_id, page_info = parse_page_header(con, page_no, map_dbo)
2025-06-26 15:38:19.460
2025-06-26 15:38:19.468 tests/bugs/core_5501_test.py:423:
2025-06-26 15:38:19.475 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2025-06-26 15:38:19.483
2025-06-26 15:38:19.494 con = Connection[2997], page_number = 406
2025-06-26 15:38:19.502 map_dbo = {(128, -1): ('TEST', ''), (128, 0): ('TEST', 'TEST_S_UNQ')}
2025-06-26 15:38:19.509
2025-06-26 15:38:19.516 def parse_page_header(con: Connection, page_number: int, map_dbo: Dict):
2025-06-26 15:38:19.522 > page_buffer = con.info.get_page_content(page_number)
2025-06-26 15:38:19.528
2025-06-26 15:38:19.534 tests/bugs/core_5501_test.py:263:
2025-06-26 15:38:19.540 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2025-06-26 15:38:19.545
2025-06-26 15:38:19.552 self = <firebird.driver.core.DatabaseInfoProvider object at [hex]>
2025-06-26 15:38:19.557 page_number = 406
2025-06-26 15:38:19.563
2025-06-26 15:38:19.569 def get_page_content(self, page_number: int) -> bytes:
2025-06-26 15:38:19.575 """Returns content of single database page.
2025-06-26 15:38:19.581
2025-06-26 15:38:19.586 Arguments:
2025-06-26 15:38:19.592 page_number: Sequence number of database page to be fetched from server.
2025-06-26 15:38:19.604 """
2025-06-26 15:38:19.614 > return self.get_info(DbInfoCode.PAGE_CONTENTS, page_number)
2025-06-26 15:38:19.622
2025-06-26 15:38:19.632 ../lib/python3.11/site-packages/firebird/driver/core.py:1338:
2025-06-26 15:38:19.642 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2025-06-26 15:38:19.649
2025-06-26 15:38:19.656 self = <firebird.driver.core.DatabaseInfoProvider object at [hex]>
2025-06-26 15:38:19.663 info_code = <DbInfoCode.PAGE_CONTENTS: 113>, page_number = 406
2025-06-26 15:38:19.669
2025-06-26 15:38:19.675 def get_info(self, info_code: DbInfoCode, page_number: int=None) -> Any:
2025-06-26 15:38:19.681 """Returns requested information from associated attachment.
2025-06-26 15:38:19.690
2025-06-26 15:38:19.701 Arguments:
2025-06-26 15:38:19.708 info_code: A code specifying the required information.
2025-06-26 15:38:19.716 page_number: A page number for `DbInfoCode.PAGE_CONTENTS` request. Ignored for other requests.
2025-06-26 15:38:19.723
2025-06-26 15:38:19.728 Returns:
2025-06-26 15:38:19.734 The data type of returned value depends on information required.
2025-06-26 15:38:19.740 """
2025-06-26 15:38:19.745 if info_code in self._cache:
2025-06-26 15:38:19.751 return self._cache[info_code]
2025-06-26 15:38:19.760 if info_code not in self._handlers:
2025-06-26 15:38:19.772 raise NotSupportedError(f"Info code {info_code} not supported by engine version {self.__engine_version}")
2025-06-26 15:38:19.781 self.response.clear()
2025-06-26 15:38:19.788 request = bytes([info_code])
2025-06-26 15:38:19.795 if info_code == DbInfoCode.PAGE_CONTENTS:
2025-06-26 15:38:19.800 request += (4).to_bytes(2, 'little')
2025-06-26 15:38:19.806 request += page_number.to_bytes(4, 'little')
2025-06-26 15:38:19.816 if len(self.response.raw) < self.page_size + 10:
2025-06-26 15:38:19.827 self.response.resize(self.page_size + 10)
2025-06-26 15:38:19.838 self._get_data(request)
2025-06-26 15:38:19.848 tag = self.response.get_tag()
2025-06-26 15:38:19.856 if request[0] != tag:
2025-06-26 15:38:19.863 if info_code in (DbInfoCode.ACTIVE_TRANSACTIONS, DbInfoCode.LIMBO):
2025-06-26 15:38:19.870 # isc_info_active_transactions and isc_info_limbo with no transactions to
2025-06-26 15:38:19.877 # report returns empty buffer and does not follow this rule
2025-06-26 15:38:19.883 pass
2025-06-26 15:38:19.890 elif tag == isc_info_error: # pragma: no cover
2025-06-26 15:38:19.895 raise InterfaceError("An error response was received")
2025-06-26 15:38:19.903 else: # pragma: no cover
2025-06-26 15:38:19.913 > raise InterfaceError("Result code does not match request code")
2025-06-26 15:38:19.921 E firebird.driver.types.InterfaceError: Result code does not match request code
2025-06-26 15:38:19.929
2025-06-26 15:38:19.935 ../lib/python3.11/site-packages/firebird/driver/core.py:1316: InterfaceError
2025-06-26 15:38:19.945 ---------------------------- Captured stdout setup -----------------------------
2025-06-26 15:38:19.957 Creating db: localhost:/var/tmp/qa_2024/test_11113/test.fdb [page_size=8192, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
|
3 #text |
act = <firebird.qa.plugin.Action pytest object at [hex]>
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>
@pytest.mark.encryption
@pytest.mark.version('>=3.0.2')
def test_1(act: Action, capsys):
map_dbo = {}
# Query to find first generators page number:
first_gens_page_sql = f"""
select p.rdb$page_number
from rdb$pages p
where p.rdb$page_type = {GENS_PAGE}
order by p.rdb$page_number desc
rows 1
"""
# Query to find relation_id and first PP for 'TEST' table:
first_pp_sql = f"""
select p.rdb$relation_id, p.rdb$page_number
from rdb$pages p
join rdb$relations r on p.rdb$relation_id = r.rdb$relation_id
where r.rdb$relation_name=upper('TEST') and p.rdb$page_type = {POINTER_PAGE}
order by p.rdb$page_number
rows 1
"""
broken_pages_map = { POINTER_PAGE : [], DATA_PAGE : [], IDX_ROOT_PAGE : [], IDX_B_TREE : [], BLOB_PAGE : [], GENS_PAGE : [] }
with act.db.connect() as con:
fill_dbo(con, map_dbo)
c = con.cursor()
broken_pages_map[GENS_PAGE] = [c.execute(first_gens_page_sql).fetchone()[0],]
test_rel_id, test_rel_first_pp = c.execute(first_pp_sql).fetchone()
# Found first page for each of three types: Data, Index and Blob
# (loop starts from first PointerPage of table 'TEST')
brk_datapage = brk_indxpage = brk_blobpage = -1
for page_no in range(test_rel_first_pp, con.info.pages_allocated):
> page_type, relation_id, page_info = parse_page_header(con, page_no, map_dbo)
tests/bugs/core_5501_test.py:423:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
con = Connection[2997], page_number = 406
map_dbo = {(128, -1): ('TEST', ''), (128, 0): ('TEST', 'TEST_S_UNQ')}
def parse_page_header(con: Connection, page_number: int, map_dbo: Dict):
> page_buffer = con.info.get_page_content(page_number)
tests/bugs/core_5501_test.py:263:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <firebird.driver.core.DatabaseInfoProvider pytest object at [hex]>
page_number = 406
def get_page_content(self, page_number: int) -> bytes:
"""Returns content of single database page.
Arguments:
page_number: Sequence number of database page to be fetched from server.
"""
> return self.get_info(DbInfoCode.PAGE_CONTENTS, page_number)
../lib/python3.11/site-packages/firebird/driver/core.py:1338:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <firebird.driver.core.DatabaseInfoProvider pytest object at [hex]>
info_code = <DbInfoCode.PAGE_CONTENTS: 113>, page_number = 406
def get_info(self, info_code: DbInfoCode, page_number: int=None) -> Any:
"""Returns requested information from associated attachment.
Arguments:
info_code: A code specifying the required information.
page_number: A page number for `DbInfoCode.PAGE_CONTENTS` request. Ignored for other requests.
Returns:
The data type of returned value depends on information required.
"""
if info_code in self._cache:
return self._cache[info_code]
if info_code not in self._handlers:
raise NotSupportedError(f"Info code {info_code} not supported by engine version {self.__engine_version}")
self.response.clear()
request = bytes([info_code])
if info_code == DbInfoCode.PAGE_CONTENTS:
request += (4).to_bytes(2, 'little')
request += page_number.to_bytes(4, 'little')
if len(self.response.raw) < self.page_size + 10:
self.response.resize(self.page_size + 10)
self._get_data(request)
tag = self.response.get_tag()
if request[0] != tag:
if info_code in (DbInfoCode.ACTIVE_TRANSACTIONS, DbInfoCode.LIMBO):
# isc_info_active_transactions and isc_info_limbo with no transactions to
# report returns empty buffer and does not follow this rule
pass
elif tag == isc_info_error: # pragma: no cover
raise InterfaceError("An error response was received")
else: # pragma: no cover
> raise InterfaceError("Result code does not match request code")
E firebird.driver.types.InterfaceError: Result code does not match request code
../lib/python3.11/site-packages/firebird/driver/core.py:1316: InterfaceError
|