Package com.alimama.mdrill.partion

Source Code of com.alimama.mdrill.partion.PartionListener

package com.alimama.mdrill.partion;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.solr.client.solrj.SolrServerException;

import com.alimama.mdrill.topology.SolrStartJetty;
import com.alipay.bluewhale.core.cluster.SolrInfo;
import com.alipay.bluewhale.core.cluster.SolrInfo.ShardCount;

public class PartionListener  implements StatListenerInterface{

  @Override
  public void init() {
  }

  private String parttype;
  @Override
  public void setPartionType(String parttype) {
    this.parttype=parttype;
  }
 
  public String getPartionType()
  {
    return this.parttype;
  }

 
 
 
  private ArrayList<String> tablePartions = new ArrayList<String>();
  private HashSet<String> tablePartionsSet = new HashSet<String>();
  private HashMap<String, ShardCount> recorecount = new HashMap<String, ShardCount>();
  private AtomicInteger lastPartionIndex = new AtomicInteger(0);

  public boolean containsTablePartion(String partion)
  {
    return this.tablePartionsSet.contains(partion);
  }
 
  private void requestPartions(SolrStartJetty solrservice,String tablename) throws MalformedURLException, SolrServerException
  {
    String partion = "";
    int len = tablePartions.size();
    if (len > 0) {
      int index = lastPartionIndex.incrementAndGet();
      if (index >= len) {
        index = 0;
        lastPartionIndex.set(index);
      }
      partion = tablePartions.get(index);
    }
    if (partion != null) {
      long cnt = solrservice.checkSolr(tablename, partion);
      this.recorecount.put(partion, new ShardCount(cnt));
 
    }
  }
 
  @Override
  public void fetchCount(SolrStartJetty solrservice, String tablename,
      GetPartions.TablePartion part) throws MalformedURLException,
      SolrServerException {
    this.requestPartions(solrservice,tablename);
  }
 

  @Override
  public void syncClearPartions() {
    tablePartions.clear();
    tablePartionsSet.clear();
  }
 
  @Override
  public void syncClearStat() {
    HashSet<String> toclear = new HashSet<String>();
    for(String k:recorecount.keySet())
    {
      if(!this.containsTablePartion(k))
      {
        toclear.add(k);
      }
    }
   
    for(String k:toclear)
    {
      this.recorecount.remove(k);
    }

  }

  @Override
  public void addPartionStat(String partion) {
    tablePartions.add(partion);
    tablePartionsSet.add(partion);
  }

 

 

  @Override
  public HashMap<String, ShardCount> getPartioncount() {
    return recorecount;
  }

  @Override
  public HashMap<String, ShardCount> getExtaCount() {
    return new HashMap<String, SolrInfo.ShardCount>();
  }

}
TOP

Related Classes of com.alimama.mdrill.partion.PartionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.