Package org.goldenorb.server

Source Code of org.goldenorb.server.LeaderGroupMemberMonitor

package org.goldenorb.server;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.goldenorb.client.OrbTrackerMemberData;
import org.goldenorb.conf.OrbConfigurable;
import org.goldenorb.conf.OrbConfiguration;
import org.goldenorb.jet.OrbTrackerMember;
import org.goldenorb.zookeeper.OrbZKFailure;
import org.goldenorb.zookeeper.ZookeeperUtils;

/**
* An implementation of Watcher that watches the child nodes of the LeaderGroup node in ZooKeeper and notifies
* an OrbTrackermemberDataServiceImpl servlet when ever the data of those nodes change.
*/
public class LeaderGroupMemberMonitor implements Watcher {
 
  private OrbTrackerMember orbTrackerMember;
  private ZooKeeper zk;
  private String path;
  private String name;
  private OrbTrackerMemberDataServiceImpl statusServer;
 
  public LeaderGroupMemberMonitor(String path,
                                  ZooKeeper zk,
                                  String name,
                                  OrbTrackerMemberDataServiceImpl statusServer) throws OrbZKFailure {
    this.path = path;
    this.name = name;
    this.zk = zk;
    this.statusServer = statusServer;
    orbTrackerMember = (OrbTrackerMember) ZookeeperUtils.getNodeWritable(zk, path, new OrbTrackerMember(),
      this);
    if (orbTrackerMember != null) {
      upDateServer();
    }
  }
 
  @Override
  public void process(WatchedEvent event) {
    if (event.getType() != Event.EventType.NodeDeleted) {
      try {
        orbTrackerMember = (OrbTrackerMember) ZookeeperUtils.getNodeWritable(zk, path,
          new OrbTrackerMember(), this);
      } catch (OrbZKFailure e) {
        System.err.println("ERROR RETRIEVING MEMBER NODE DATA FROM ZOOKER : " + path);
        e.printStackTrace();
      }
      if (event.getType() == Event.EventType.NodeDataChanged && orbTrackerMember != null) {
        upDateServer();
      }
    } else { // node was deleted
      statusServer.removeNodeData(name);
    }
  }
 
  private void upDateServer() {
    statusServer.updateNodeData(new OrbTrackerMemberData(name, orbTrackerMember.getPartitionCapacity(),
        orbTrackerMember.getAvailablePartitions(), orbTrackerMember.getReservedPartitions(), orbTrackerMember
            .getInUsePartitions(), orbTrackerMember.getHostname(), orbTrackerMember.isLeader(),
        orbTrackerMember.getPort()));
  }
 
}
TOP

Related Classes of org.goldenorb.server.LeaderGroupMemberMonitor

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.