Refactored test fixture code to properly execute object context operations
within event loop context, fixing ceph_assert(osd != -1) failures.
Key changes:
- Split functions calling get_object_context() into implementation and
wrapper functions that schedule work on the primary OSD via event loop
- Added accessor functions (set_object_context, clear_object_contexts)
to encapsulate per-OSD object_contexts map access
- Fixed lambda capture bug in PGBackendTestFixture::update_osdmap()
- Refactored run_parallel_recovery_and_verify_callbacks() to execute
within proper event loop context
All object context operations now execute within the correct OSD context,
with get_object_context() as the single point querying the current OSD.
Added test ZeroSizeObjectWithAttributesRecovery to verify recovery of
zero-size objects with attributes after primary failover, ensuring
attributes are properly recovered on the failed shard.
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com> Assisted-by: IBM-Bob:Claude-Sonnet
# Conflicts:
# src/test/osd/ECPeeringTestFixture.cc