MtasSolrHistoryList.java

  1. package mtas.solr.handler.util;

  2. import java.io.IOException;

  3. import org.apache.solr.common.util.SimpleOrderedMap;

  4. public class MtasSolrHistoryList extends MtasSolrBaseList {

  5.   private int softLimit;
  6.   private int hardLimit;
  7.  
  8.   private static final String NAME_SOFTLIMIT = "softLimit";
  9.   private static final String NAME_HARDLIMIT = "hardLimit";
  10.  
  11.   public MtasSolrHistoryList() {
  12.     super();
  13.     softLimit = 0;
  14.     hardLimit = 0;
  15.   }
  16.  
  17.   public MtasSolrHistoryList(int softLimit, int hardLimit) {  
  18.     this();
  19.     setLimits(softLimit, hardLimit);      
  20.   }
  21.  
  22.   @Override
  23.   public void add(MtasSolrStatus status) throws IOException {
  24.     if(softLimit>0) {
  25.       super.add(status);
  26.     }
  27.   }
  28.  
  29.   public void setLimits(int softLimit, int hardLimit) {
  30.     if ((softLimit > 0 && hardLimit > softLimit) || (softLimit==0 && hardLimit==0)) {
  31.       this.softLimit = softLimit;
  32.       this.hardLimit = hardLimit;
  33.       garbageCollect();
  34.     } else {
  35.       throw new IllegalArgumentException();
  36.     }  
  37.   }

  38.   public void garbageCollect() {
  39.     if(softLimit==0) {
  40.       reset();
  41.     } else if (list.size() > hardLimit) {
  42.       long boundaryTime = list.get(softLimit).getStartTime();
  43.       list.removeIf(
  44.           (MtasSolrStatus status) -> status.getStartTime() < boundaryTime);
  45.       index.clear();
  46.       list.forEach((MtasSolrStatus status) -> index.put(status.key(), status));
  47.     }
  48.   }
  49.    
  50.   @Override
  51.   public SimpleOrderedMap<Object> createListOutput(boolean shardRequests) {
  52.     SimpleOrderedMap<Object> output = super.createListOutput(shardRequests);
  53.     output.add(NAME_SOFTLIMIT, softLimit);
  54.     output.add(NAME_HARDLIMIT, hardLimit);
  55.     return output;
  56.   }

  57. }