Hello, All! It appears I now have some time to look into old issues.
I know for a long time that it is possible to optimize NBAK module: Currently, difference file page is allocated inside CCH_mark and this is sub-optimal. This has not been the case during nbackup development. Early version allocated difference pages much later, just before writing a page - in write_page function. This didn't work because lock manager calls could not be used inside AST handlers due to signals handling logic. Another issue at play here is early "disk full" failure path during CCH_mark rather then write_page, but I am not sure it really matters in terms of possible database corruption - "careful write" should in theory take care of things even if write_page fails due to "disk full" condition. Firebird doesn't use signals for AST delivery for a long time already and it might be possible to issue new locks from inside AST handler. Therefore it might make sense to go back to this logic. This would make nbackup state locks very transient and do not require flushing page cache during transitions. It also might be possible to use shared memory for synchronization instead of lock manager calls to speed things up. I might do either or both of those things. What do you think? Is it worthwhile to spend time and effort in this area? Or better consider NBAK stable and fast enough and address some other issue? Nikolay Samofatov ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel