Package com.alimama.mdrill.solr.hbaserealtime.realtime

Source Code of com.alimama.mdrill.solr.hbaserealtime.realtime.RealTimeDirectorUtils

package com.alimama.mdrill.solr.hbaserealtime.realtime;

import java.io.IOException;
import java.util.Timer;
import java.util.concurrent.atomic.AtomicLong;
import java.util.zip.CRC32;

import org.apache.commons.io.FileUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.cache.Cache;
import org.apache.lucene.util.cache.SimpleLRUCache;
import org.apache.solr.common.SolrInputDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alimama.mdrill.hdfsDirectory.FileSystemDirectory;
import com.alimama.mdrill.solr.hbaserealtime.DirectoryInfo;
import com.alimama.mdrill.utils.UniqConfig;


//review ok 2013-12-27
public class RealTimeDirectorUtils {
  public static Logger LOG = LoggerFactory.getLogger(RealTimeDirectorUtils.class);

  private static Timer timerslow = null;
  private static Timer timerquick = null;
  private static Object TIMER_LOCK=new Object()

  public static Timer getQuickTimer()
  {
    synchronized (TIMER_LOCK) {
      if(timerquick==null)
      {
        timerquick=new Timer();
      }
     
      return timerquick;
    }
  }
 
  public static Timer getSlowTimer()
  {
    synchronized (TIMER_LOCK) {
      if(timerslow==null)
      {
        timerslow=new Timer();
      }
     
      return timerslow;
    }
  }

  private static Cache<Long, Object> termsCache = Cache.synchronizedCache(new SimpleLRUCache<Long, Object>(UniqConfig.MaybeRepCheckCacheSize()));
 
  private static AtomicLong debuglines=new AtomicLong(0);
 
 

  public static void deleteDirector(DirectoryInfo m1,Configuration conf) throws IOException
  {
    String[] list=m1.d.listAll();
    if(list!=null)
    {
      for(String s:list)
      {
        m1.d.deleteFile(s);
      }
    }
    if(m1.d instanceof FSDirectory)
    {
      FSDirectory fd=(FSDirectory)m1.d;
            FileUtils.forceDelete(fd.getDirectory());
    }
   
    if(m1.d instanceof FileSystemDirectory)
    {
      FileSystemDirectory fd=(FileSystemDirectory)m1.d;
      FileSystem fs=FileSystem.get(conf);
      fs.delete(fd.directory,true);
    }
  }
  public static synchronized boolean maybeReplication(SolrInputDocument doc)
  {
    if(debuglines.incrementAndGet()%10000==0)
    {
      LOG.info("addDoc "+doc.toString()+",termsCache.size="+termsCache.size());
      if(debuglines.get()>100000000)
      {
        debuglines.set(0);
      }
    }
    Object uuid=doc.getFieldValue("mdrill_uuid");
    if(uuid!=null)
    {
      try{
        Long uuidl=(Long)uuid;
        synchronized (termsCache) {
          if(termsCache.containsKey(uuidl))
          {
//            LOG.info("replication uuid :"+String.valueOf(uuid)+",doc="+doc.toString()+",termsCache.size="+termsCache.size());
            termsCache.put(uuidl, new Object());
            return true;
          }
          termsCache.put(uuidl, new Object());
        }
      }catch(Throwable e)
      {
        LOG.info("uuid is null:doc="+doc.toString()+",termsCache.size="+termsCache.size(),e);
      }
    }else{
      LOG.info("uuid is null:doc="+doc.toString()+",termsCache.size="+termsCache.size());
    }
   
    return false;
  }

  public static Long uuid()
  {
    CRC32 crc32 = new CRC32();
    crc32.update(String.valueOf(java.util.UUID.randomUUID().toString()).getBytes());
    return crc32.getValue();
  }
}
TOP

Related Classes of com.alimama.mdrill.solr.hbaserealtime.realtime.RealTimeDirectorUtils

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.