Examples of DistributeLock


Examples of com.taobao.zeus.store.mysql.persistence.DistributeLock

   * 判断ScheduleServer是否正常运行
   * @author zhoufang
   *
   */
  private void update(){
    DistributeLock lock=(DistributeLock) getHibernateTemplate().execute(new HibernateCallback() {
      @Override
      public Object doInHibernate(Session session) throws HibernateException,
          SQLException {
        Query query=session.createQuery("from com.taobao.zeus.store.mysql.persistence.DistributeLock where subgroup=? order by id desc");
        query.setParameter(0, Environment.getScheduleGroup());
        query.setMaxResults(1);
        DistributeLock lock= (DistributeLock) query.uniqueResult();
        if(lock==null){
          lock=new DistributeLock();
          lock.setHost(host);
          lock.setServerUpdate(new Date());
          lock.setSubgroup(Environment.getScheduleGroup());
          session.save(lock);
          lock=(DistributeLock) query.uniqueResult();
        }
        return lock;
      }
    });
   
    if(host.equals(lock.getHost())){
      log.error("hold the locker and update time");
      lock.setServerUpdate(new Date());
      getHibernateTemplate().update(lock);
     
      zeusSchedule.startup(port);
    }else{//其他服务器抢占了锁
      log.error("not my locker");
      //如果最近更新时间在2分钟以上,则认为抢占的Master服务器已经失去连接,本服务器主动进行抢占
      if(System.currentTimeMillis()-lock.getServerUpdate().getTime()>1000*60*2L){
        log.error("rob the locker and update");
        lock.setHost(host);
        lock.setServerUpdate(new Date());
        lock.setSubgroup(Environment.getScheduleGroup());
        getHibernateTemplate().update(lock);
        zeusSchedule.startup(port);
      }else{//如果Master服务器没有问题,本服务器停止server角色
        zeusSchedule.shutdown();
      }
     
    }
   
    try {
      worker.connect(lock.getHost(),port);
    } catch (Exception e) {
      ScheduleInfoLog.error("start up worker fail", e);
    }
  }
View Full Code Here
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.