Assertions are used in Ceph to ensure that, during the execution of the code, any assumptions that have been made about the operating environment remain true. These assertions are scattered throughout the Ceph code and are designed to catch any conditions that may go on to cause further problems if the code is not stopped.
If you trigger an assertion in Ceph, it's likely that some form of data has a value that is unexpected. This may be caused by some form or corruption or unhandled bug.
If an OSD causes an assert and refuses to restart, the usual recommended approach would be to destroy the OSD, recreate it, and then let Ceph backfill objects back to it. If you have a reproducible failure scenario, it is probably also worth filing a bug in the Ceph bug tracker.
As mentioned, OSDs can fail either due to hardware or software faults in either the stored...