MtasSolrHistoryList.java
- package mtas.solr.handler.util;
- import java.io.IOException;
- import org.apache.solr.common.util.SimpleOrderedMap;
- public class MtasSolrHistoryList extends MtasSolrBaseList {
- private int softLimit;
- private int hardLimit;
-
- private static final String NAME_SOFTLIMIT = "softLimit";
- private static final String NAME_HARDLIMIT = "hardLimit";
-
- public MtasSolrHistoryList() {
- super();
- softLimit = 0;
- hardLimit = 0;
- }
-
- public MtasSolrHistoryList(int softLimit, int hardLimit) {
- this();
- setLimits(softLimit, hardLimit);
- }
-
- @Override
- public void add(MtasSolrStatus status) throws IOException {
- if(softLimit>0) {
- super.add(status);
- }
- }
-
- public void setLimits(int softLimit, int hardLimit) {
- if ((softLimit > 0 && hardLimit > softLimit) || (softLimit==0 && hardLimit==0)) {
- this.softLimit = softLimit;
- this.hardLimit = hardLimit;
- garbageCollect();
- } else {
- throw new IllegalArgumentException();
- }
- }
- public void garbageCollect() {
- if(softLimit==0) {
- reset();
- } else if (list.size() > hardLimit) {
- long boundaryTime = list.get(softLimit).getStartTime();
- list.removeIf(
- (MtasSolrStatus status) -> status.getStartTime() < boundaryTime);
- index.clear();
- list.forEach((MtasSolrStatus status) -> index.put(status.key(), status));
- }
- }
-
- @Override
- public SimpleOrderedMap<Object> createListOutput(boolean shardRequests) {
- SimpleOrderedMap<Object> output = super.createListOutput(shardRequests);
- output.add(NAME_SOFTLIMIT, softLimit);
- output.add(NAME_HARDLIMIT, hardLimit);
- return output;
- }
- }