#1335

fix(storage): defer entries that do not fit the flush buffer tail

OpenLantaoJinwants to merge intofrom

Closes #1334.

Cache entries that don't fit the remaining space of the current flush buffer were dropped instead of written into the next buffer, and dropping the PieceRef also evicted them from the Keeper. Since rotation is gated on no_io_task, this silently lost the tail of every write burst.

  • Buffer::push / push_slice return Push { Ok, NoSpace, Unstorable } instead of bool.
  • The flush runner keeps a pending queue: a NoSpace submission is retried after the buffer rotates, and later submissions queue behind it so a Submission::Wait can't overtake a deferred entry and let Flusher::wait() return too early.
  • NoSpace from an already-empty buffer means the entry can never fit, so it's dropped and counted there — retries stay bounded.
  • storage_queue_buffer_overflow now counts only entries that can never be stored.

Tests cover a deferred entry persisted in submission order, an entry over max_entry_size dropped, an entry larger than an empty buffer dropped rather than retried forever, and balanced submit_queue_size accounting.