Coverage Report - org.apache.giraph.utils.AdjustableSemaphore
 
Classes in this File Line Coverage Branch Coverage Complexity
AdjustableSemaphore
0%
0/12
0%
0/6
1.667
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 package org.apache.giraph.utils;
 20  
 
 21  
 import java.util.concurrent.Semaphore;
 22  
 
 23  
 import static com.google.common.base.Preconditions.checkState;
 24  
 
 25  
 /**
 26  
  * Implementation of a semaphore where number of available permits can change
 27  
  */
 28  
 public final class AdjustableSemaphore extends Semaphore {
 29  
   /** Maximum number of available permits */
 30  
   private int maxPermits;
 31  
 
 32  
   /**
 33  
    * Constructor
 34  
    * @param permits initial number of available permits
 35  
    */
 36  
   public AdjustableSemaphore(int permits) {
 37  0
     super(permits);
 38  0
     maxPermits = permits;
 39  0
   }
 40  
 
 41  
   @edu.umd.cs.findbugs.annotations.SuppressWarnings(
 42  
       "UG_SYNC_SET_UNSYNC_GET")
 43  
   public int getMaxPermits() {
 44  0
     return maxPermits;
 45  
   }
 46  
 
 47  
   /**
 48  
    * Adjusts the maximum number of available permits.
 49  
    *
 50  
    * @param newMax max number of permits
 51  
    */
 52  
   public synchronized void setMaxPermits(int newMax) {
 53  0
     checkState(newMax >= 0, "setMaxPermits: number of permits cannot be " +
 54  
         "less than 0");
 55  0
     int delta = newMax - this.maxPermits;
 56  0
     if (delta > 0) {
 57  
       // Releasing semaphore to make room for 'delta' more permits
 58  0
       release(delta);
 59  0
     } else if (delta < 0) {
 60  
       // Reducing number of permits in the semaphore
 61  0
       reducePermits(-delta);
 62  
     }
 63  0
     this.maxPermits = newMax;
 64  0
   }
 65  
 }