Skip to content

Expression index may become inconsistent if CREATE INDEX was interrupted after b-tree creation but before commiting [CORE5275] #5553

@firebird-automations

Description

@firebird-automations

Submitted by: @aafemt

Running test bugs.core_1746 from standard test suite for both SS and CS mode makes engine abort with following call stack:

> engine13.dll!fb_assert_impl(const char * msg, const char * file, int line, bool do_abort) Line 49 C++
engine13.dll!BTR_description(Jrd::thread_db * tdbb, Jrd::jrd_rel * relation, Ods::index_root_page * root, Jrd::index_desc * idx, unsigned short id) Line 535 C++
engine13.dll!BTR_next_index(Jrd::thread_db * tdbb, Jrd::jrd_rel * relation, Jrd::jrd_tra * transaction, Jrd::index_desc * idx, Jrd::win * window) Line 1765 C++
engine13.dll!IDX_store(Jrd::thread_db * tdbb, Jrd::record_param * rpb, Jrd::jrd_tra * transaction) Line 1009 C++
engine13.dll!Jrd::StoreNode::store(Jrd::thread_db * tdbb, Jrd::jrd_req * request, Jrd::StmtNode::WhichTrigger whichTrig) Line 6975 C++
engine13.dll!Jrd::StoreNode::execute(Jrd::thread_db * tdbb, Jrd::jrd_req * request, Jrd::StmtNode::ExeState * exeState) Line 6912 C++
engine13.dll!EXE_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * request, const Jrd::StmtNode * node) Line 1295 C++
engine13.dll!looper_seh(Jrd::thread_db * tdbb, Jrd::jrd_req * request, const Jrd::StmtNode * node) Line 1407 C++
engine13.dll!execute_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * request, Jrd::jrd_tra * transaction, const Jrd::StmtNode * node, Jrd::jrd_req::req_s next_state) Line 1029 C++
engine13.dll!EXE_receive(Jrd::thread_db * tdbb, Jrd::jrd_req * request, unsigned short msg, unsigned long length, unsigned char * buffer, bool top_level) Line 632 C++
engine13.dll!Jrd::ExecProcedureNode::executeProcedure(Jrd::thread_db * tdbb, Jrd::jrd_req * request) Line 2979 C++
engine13.dll!Jrd::ExecProcedureNode::execute(Jrd::thread_db * tdbb, Jrd::jrd_req * request, Jrd::StmtNode::ExeState * __formal) Line 2900 C++
engine13.dll!EXE_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * request, const Jrd::StmtNode * node) Line 1295 C++
engine13.dll!looper_seh(Jrd::thread_db * tdbb, Jrd::jrd_req * request, const Jrd::StmtNode * node) Line 1407 C++
engine13.dll!execute_looper(Jrd::thread_db * tdbb, Jrd::jrd_req * request, Jrd::jrd_tra * transaction, const Jrd::StmtNode * node, Jrd::jrd_req::req_s next_state) Line 1029 C++
engine13.dll!EXE_receive(Jrd::thread_db * tdbb, Jrd::jrd_req * request, unsigned short msg, unsigned long length, unsigned char * buffer, bool top_level) Line 632 C++
engine13.dll!JRD_receive(Jrd::thread_db * tdbb, Jrd::jrd_req * request, unsigned short msg_type, unsigned long msg_length, unsigned char * msg) Line 7578 C++
engine13.dll!Jrd::DsqlDmlRequest::execute(Jrd::thread_db * tdbb, Jrd::jrd_tra * * traHandle, Firebird::IMessageMetadata * inMetadata, const unsigned char * inMsg, Firebird::IMessageMetadata * outMetadata, unsigned char * outMsg, bool singleton) Line 728 C++
engine13.dll!DSQL_execute(Jrd::thread_db * tdbb, Jrd::jrd_tra * * tra_handle, Jrd::dsql_req * request, Firebird::IMessageMetadata * in_meta, const unsigned char * in_msg, Firebird::IMessageMetadata * out_meta, unsigned char * out_msg) Line 177 C++
engine13.dll!Jrd::JStatement::execute(Firebird::CheckStatusWrapper * user_status, Firebird::ITransaction * apiTra, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 4434 C++
engine13.dll!Firebird::IStatementBaseImpl<Jrd::JStatement,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Jrd::JStatement,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Jrd::JStatement,Firebird::CheckStatusWrapper,Firebird::InheritFirebird::IStatement\ > > > >::cloopexecuteDispatcher(Firebird::IStatement * self, Firebird::IStatus * status, Firebird::ITransaction * transaction, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 8198 C++
fbclient.dll!Firebird::IStatement::executeFirebird::CheckStatusWrapper\(Firebird::CheckStatusWrapper * status, Firebird::ITransaction * transaction, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 1637 C++
fbclient.dll!Why::YStatement::execute(Firebird::CheckStatusWrapper * status, Firebird::ITransaction * transaction, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 4353 C++
fbclient.dll!Firebird::IStatementBaseImpl<Why::YStatement,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Why::YStatement,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Why::YStatement,Firebird::CheckStatusWrapper,Firebird::InheritFirebird::IStatement\ > > > >::cloopexecuteDispatcher(Firebird::IStatement * self, Firebird::IStatus * status, Firebird::ITransaction * transaction, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 8198 C++
firebird.exe!Firebird::IStatement::executeFirebird::CheckStatusWrapper\(Firebird::CheckStatusWrapper * status, Firebird::ITransaction * transaction, Firebird::IMessageMetadata * inMetadata, void * inBuffer, Firebird::IMessageMetadata * outMetadata, void * outBuffer) Line 1637 C++
firebird.exe!rem_port::execute_statement(P_OP op, p_sqldata * sqldata, packet * sendL) Line 3302 C++
firebird.exe!process_packet(rem_port * port, packet * sendL, packet * receive, rem_port * * result) Line 4376 C++
firebird.exe!loopThread(void * __formal) Line 5817 C++
firebird.exe!`anonymous namespace'::ThreadArgs::run() Line 78 C++
firebird.exe!threadStart(void * arg) Line 94 C++
[External Code]

In release builds a bugcheck (invalid send request) may be raised instead.

Commits: 38d2631 062f5d7 0229709

====== Test Details ======

See comments in .fbt: main test idea is almost the same as it initially was for core-1746.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions