fix read write request leak when executor full. (#4024)

Co-authored-by: wangjinlong <wangjinlong@zhihu.com>
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieRequestProcessor.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieRequestProcessor.java
index 7ebd8c9..a77b3d7 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieRequestProcessor.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieRequestProcessor.java
@@ -667,6 +667,9 @@
                     BookieProtocol.ETOOMANYREQUESTS,
                     ResponseBuilder.buildErrorResponse(BookieProtocol.ETOOMANYREQUESTS, r),
                     requestStats.getAddRequestStats());
+                r.release();
+                r.recycle();
+                write.recycle();
             }
         }
     }
@@ -703,6 +706,7 @@
                     ResponseBuilder.buildErrorResponse(BookieProtocol.ETOOMANYREQUESTS, r),
                     requestStats.getReadRequestStats());
                 onReadRequestFinish();
+                read.recycle();
             }
         }
     }
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/ReadEntryProcessor.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/ReadEntryProcessor.java
index 4c9c1c9..04efd96 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/ReadEntryProcessor.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/ReadEntryProcessor.java
@@ -189,7 +189,7 @@
         return String.format("ReadEntry(%d, %d)", request.getLedgerId(), request.getEntryId());
     }
 
-    private void recycle() {
+    void recycle() {
         request.recycle();
         super.reset();
         this.recyclerHandle.recycle(this);