Project

General

Profile

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; 
     } 
   } 

Back