[feat] Add observability to OutOfMemoryErrors when OutOfMemoryPolicy is FallbackToHeap
FEATURE REQUEST
Currently when direct memory allocation fails with OutOfMemoryError, the default OutOfMemoryPolicy is FallbackToHeap and the exception is catched silently:
https://github.com/apache/bookkeeper/blob/b372e9031e3f43adc831947332a6852680e750db/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/impl/ByteBufAllocatorImpl.java#L174-L187
It would be great to be able to observe this condition. Pulsar uses ByteBufAllocatorImpl also for Pulsar client and it's hard to detect that Netty direct buffer direct access isn't properly configured unless there's a way to observe the condition. Netty direct memory buffer access is explained in Pulsar client's "Java client Performance considerations", https://pulsar.apache.org/docs/4.0.x/client-libraries-java-setup/#java-client-performance .
After there's a counter in ByteBufAllocatorImpl, it would be possible to implement a metric in Pulsar client.
I guess having a metric for heapBuffer allocations would also be a way to notice the rate of heapBuffer allocations.