madrob commented on a change in pull request #1686:
URL: https://github.com/apache/lucene-solr/pull/1686#discussion_r467104137



##########
File path: solr/core/src/java/org/apache/solr/servlet/RequestRateLimiter.java
##########
@@ -58,18 +58,18 @@ public RequestRateLimiter(RateLimiterConfig 
rateLimiterConfig) {
   public Pair<Boolean, AcquiredSlotMetadata> handleRequest() throws 
InterruptedException {
 
     if (!rateLimiterConfig.isEnabled) {
-      return new Pair<Boolean, AcquiredSlotMetadata>(true, null);
+      return new Pair<Boolean, AcquiredSlotMetadata>(true, new 
AcquiredSlotMetadata(null, null));
     }
 
     if 
(guaranteedSlotsPool.tryAcquire(rateLimiterConfig.waitForSlotAcquisition, 
TimeUnit.MILLISECONDS)) {
-      return new Pair<Boolean, AcquiredSlotMetadata>(true, new 
AcquiredSlotMetadata(this, false));
+      return new Pair<Boolean, AcquiredSlotMetadata>(true, new 
AcquiredSlotMetadata(this, guaranteedSlotsPool));
     }
 
     if 
(borrowableSlotsPool.tryAcquire(rateLimiterConfig.waitForSlotAcquisition, 
TimeUnit.MILLISECONDS)) {
-      return new Pair<Boolean, AcquiredSlotMetadata>(true, new 
AcquiredSlotMetadata(this, true));
+      return new Pair<Boolean, AcquiredSlotMetadata>(true, new 
AcquiredSlotMetadata(this, borrowableSlotsPool));
     }
 
-    return new Pair<Boolean, AcquiredSlotMetadata>(false, null);
+    return new Pair<Boolean, AcquiredSlotMetadata>(false, new 
AcquiredSlotMetadata(null, null));
   }

Review comment:
       I would write this as something like:
   
   ```
   class SemaphoreWrapper() {
     Semaphore wrapped;
   
     release() {
       if (wrapped != null) wrapped.release();
     }
   }
   
     public SempahoreWrapper handleRequest() throws InterruptedException {
         if (!rateLimiterConfig.isEnabled) {
          return nopPool; // = new SemaphoreWrapper(null);
        }
   
       if 
(guaranteedSlotsPool.tryAcquire(rateLimiterConfig.waitForSlotAcquisition, 
TimeUnit.MILLISECONDS)) {
          return new SemaphoreWrapper(guaranteedSlotsPool);
        }
   
       if 
(borrowableSlotsPool.tryAcquire(rateLimiterConfig.waitForSlotAcquisition, 
TimeUnit.MILLISECONDS)) {
          return new SemaphoreWrapper(borrowableSlotsPool);
        }
    
         return null;
      }
   ```
   
   And probably have the limiter own the wrappers and return the right thing 
each time instead of creating a new wrapper.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to