Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. vea_reserve() is called to reserve space on data blob for the value.

  2. RDMA value to DMA buffer, then bio_iod_post_async() is called to submit SPDK write to data blob for the value.

  3. bio_wal_id_get() is called to acquire WAL transaction ID, please be aware this function could yield when checkpointing failed to reclaim log space promptly.

  4. umem_tx_begin() is called to start local transaction.

  5. Update VOS index, publish reserve by vea_publish(), the new umem API will be called by to track all the changes, the API will also update the per-page pending transaction information.

  6. umem_tx_commit() is called to commit the transaction, it first updates the per-page pending transaction ID, then calls bio_wal_commit() will be invoked at the end umem_tx_commit() (through registered callback), bio_wal_commit() internally waits for the value update from step 2 and other prior depended WAL commits completed, after bio_wal_commit() finished, it updates the per-page committed transaction ID.

  7. Reply to client.

Small value update steps

  1. umem_reserve() is called to reserve space on VOS blob for the value.

  2. Copy value to reserved space on tmpfs, then bio_iod_post_async() is called to submit SPDK write to VOS blob for the value. (This is to be determined, if we do direct SSD I/O to VOS blob here, we need to rely on allocator to not locate new data with old data on same page, so maybe we’d write the value in WAL through some new API?)

  3. bio_wal_id_get() is called to acquire WAL transaction ID, please be aware this function could yield when checkpointing failed to reclaim log space promptly.

  4. umem_tx_begin() is called to start local transaction.

  5. Update VOS index, publish reserve by umem_publish(), the new umem API will be called by to track all the changes, the API will also update the per-page pending transaction information.

  6. umem_tx_commit() is called to commit the transaction, it first updates the per-page pending transaction ID, then calls bio_wal_commit() will be invoked at the end umem_tx_commit() (through registered callback), bio_wal_commit() internally waits for the value update from step 2 (or submit value to WAL?this won’t be necessary if we write value in WAL) and other prior depended WAL commits completed, after bio_wal_commit() finished, it updates the per-page committed transaction ID.

  7. Reply to client.