Add functions to query submission queue capacity
Useful for debugging purpose. It also allows caller to proactively check queue capacity and avoid overflowing the queue. Caller can now handle large number of requests in a more planned and graceful way.
Test: th
Change-Id: I9f60a8f79bf898ddf5f307800bac91cb50949455
diff --git a/liburing_cpp/include/liburing_cpp/IoUring.h b/liburing_cpp/include/liburing_cpp/IoUring.h
index 324fb10..09ed5cc 100644
--- a/liburing_cpp/include/liburing_cpp/IoUring.h
+++ b/liburing_cpp/include/liburing_cpp/IoUring.h
@@ -62,6 +62,13 @@
virtual IoUringSQE PrepWrite(int fd, const void *buf, unsigned nbytes,
uint64_t offset) = 0;
+ // Return number of SQEs available in the queue. If this is 0, subsequent
+ // calls to Prep*() functions will fail.
+ virtual size_t SQELeft() const = 0;
+ // Return number of SQEs currently in the queue. SQEs already submitted would
+ // not be counted.
+ virtual size_t SQEReady() const = 0;
+
// Ring operations
virtual IoUringSubmitResult Submit() = 0;
// Submit and block until |completions| number of CQEs are available
diff --git a/liburing_cpp/src/IoUring.cpp b/liburing_cpp/src/IoUring.cpp
index a5fe76f..f561d25 100644
--- a/liburing_cpp/src/IoUring.cpp
+++ b/liburing_cpp/src/IoUring.cpp
@@ -100,6 +100,10 @@
io_uring_prep_write(sqe, fd, buf, nbytes, offset);
return IoUringSQE{static_cast<void*>(sqe)};
}
+
+ size_t SQELeft() const override { return io_uring_sq_space_left(&ring); }
+ size_t SQEReady() const override { return io_uring_sq_ready(&ring); }
+
IoUringSubmitResult Submit() override {
return IoUringSubmitResult{io_uring_submit(&ring)};
}