Backport #16917
Updated by David Zafman almost 8 years ago
This error triggers another bug #16672 on upgrade to later releases. PGBackend::split_colls() will create a temp collection for OSD::RemoveWQ::_process() uses remove_dir() to delete objects and then remove_collection() to delete the child pg if the parent has temp_created set. collection. However, This causes a transaction with OP_RMCOLL to be created. That transaction causes _destroy_collection() to be called which only removes the child PG in OSD::split_pgs() doesn't get temp_created set, so later if that PG is removed collection requested not the temp collection pg_TEMP directory. This section of code is never removed. We shouldn't include the "destroy missing from Hammer's FileStore::destroy_collection(): // destroy parallel temp collection, too" code in FileStore::_destroy_collection() from later releases because in Hammer collections are opaque to the FileStore code. too if (!c.is_meta() && !c.is_temp()) { coll_t temp = c.get_temp(); int r2 = _destroy_collection(temp); if (r2 < 0) { r = r2; goto out_final; } }