示例#1
0
        public static ZKBarrier Barrier(ZooKeeperWrapper handler, String synchNodePath, String owner, int size)
        {
            ZKBarrier sZK = new ZKBarrier(handler, synchNodePath, owner, size);

            sZK.Enter();
            return(sZK);
        }
示例#2
0
        // Prints the tree without changing the tree view state
        public static String PrintTree(ZooKeeperWrapper zk, String machinesPath, String sellersPath, String stamp)
        {
            StringBuilder sb       = new StringBuilder();
            List <String> machines = zk.GetChildren(machinesPath, true);

            sb.AppendLine("[" + stamp + "] Machines Tree: ");
            foreach (var machine in machines)
            {
                var machineRecord = zk.GetData <ZNodesDataStructures.MachineNode>(machinesPath + "/" + machine, true);
                sb.AppendLine("[" + stamp + "] \\-" + machine);
                sb.AppendLine("[" + stamp + "]       \\-P: " + String.Join(" ", machineRecord.primaryOf));
                sb.AppendLine("[" + stamp + "]       \\-B: " + String.Join(" ", machineRecord.backsUp));
            }
            sb.AppendLine("[" + stamp + "] Sellers Tree: ");
            List <String> sellers = zk.GetChildren(sellersPath, true);

            foreach (var seller in sellers)
            {
                sb.AppendLine("[" + stamp + "] \\-" + seller);
                var sellerMachines = zk.GetChildren(sellersPath + "/" + seller, true);
                foreach (var sellerMachine in sellerMachines)
                {
                    var machineSellerRecord = zk.GetData <ZNodesDataStructures.SellerNode>(sellersPath + "/" + seller + "/" + sellerMachine, true);
                    sb.AppendLine("[" + stamp + "]       \\-" + machineSellerRecord.role + ": " + sellerMachine + " " + machineSellerRecord.uri);
                }
            }
            return(sb.ToString());
        }
        public void initialize(String address, String clusterName, String originalSeller, Uri localService, MachineJoined mj, MachineDropped md)
        {
            this.mJoined          = mj;
            this.mDropped         = md;
            this.clusterName      = clusterName;
            this.zookeeperAddress = address;
            this.originalSeller   = originalSeller;

            if (null == zk)
            {
                zk = new ZooKeeperWrapper(address, SECONDS_TIMEOUT, ZK_RETRIES, new ZooKeeperTreeEvent(this));
            }
            intraClusterService = localService;

            constructClusterSubTree(); // Constructs the cluster's subtree if needed
            //
            tree = new TreeView(zk, MachinesPath, SellersPath);
            //tree.refresh(); // Build tree

            // Set watches
            setMachinesChildrenWatcher();
            setSellersChildrenWatcher();

            registerSellersNode();  // Add the seller which this machine represents to the sellers subtree
            registerMachinesNode(); // Add this machine to the Machines subtree
            //zk.GetData<ZNodesDataStructures.MachineNode>(id, new MachineNodeWatch(this));


            //machinesNodeChanged();

            //machinesNodeEvent(WatchedEvent @event);
        }
示例#4
0
        public ZKBarrier(ZooKeeperWrapper handler, String barrierPath, String owner, int size)
        {
            ZooKeeper zk = new ZooKeeper(handler.Address, new TimeSpan(0, 0, 0, handler.Timeout, 0), this);

            connected.WaitOne();

            if (null == zk.Exists(barrierPath, false))
            {
                zk.Create(barrierPath,
                          new byte[0],
                          Ids.OPEN_ACL_UNSAFE,
                          CreateMode.Persistent);
            }

            first  = new ZKSynch(handler, barrierPath + "/first_barrier", owner, size);
            second = new ZKSynch(handler, barrierPath + "/second_barrier", owner, size);
        }
示例#5
0
        public ZKSynch(ZooKeeperWrapper handler, String synchNodePath, String owner, int size)
        {
            zk = new ZooKeeper(handler.Address, new TimeSpan(0, 0, 0, handler.Timeout, 0), this);
            connected.WaitOne();

            synchPath  = synchNodePath;
            this.size  = size;
            this.owner = owner;
            //this.synchReady = synchPath + "/ready";

            if (null == zk.Exists(synchPath, false))
            {
                zk.Create(synchPath,
                          new byte[0],
                          Ids.OPEN_ACL_UNSAFE,
                          CreateMode.Persistent);
            }
        }
示例#6
0
        public TreeView(ZooKeeperWrapper zk, String machinesPath, String sellersPath)
        {
            this.machinesPath = machinesPath;
            this.sellersPath  = sellersPath;
            this.zk           = zk;

            var newMachinesView = zk.GetChildren(machinesPath, false);
            var newSellersView  = zk.GetChildren(sellersPath, false);

            // Build machines tree from ZK
            machinesData.Clear();
            foreach (var machine in newMachinesView)
            {
                var machineData = zk.GetData <ZNodesDataStructures.MachineNode>(machinesPath + "/" + machine, false);
                machinesData.Add(machine, machineData);
            }

            // Build sellers tree from ZK
            sellersData.Clear();
            foreach (var seller in newSellersView)
            {
                var sellerMachines = zk.GetChildren(sellersPath + "/" + seller, false);
                if (sellerMachines.Count > 2)
                {
                    throw new Exception("Seller " + seller + " has too many machines: " + String.Join(" ", sellerMachines));
                }

                Dictionary <ZNodesDataStructures.SellerNode.NodeRole, ZNodesDataStructures.SellerNode> nodeRoles = new Dictionary <ZNodesDataStructures.SellerNode.NodeRole, ZNodesDataStructures.SellerNode>();
                foreach (var machine in sellerMachines)
                {
                    var machineSellerNode = zk.GetData <ZNodesDataStructures.SellerNode>(sellersPath + "/" + seller + "/" + machine, false);
                    nodeRoles[machineSellerNode.role] = machineSellerNode;
                }

                //if (nodeRoles.Count != 2)
                //{
                //    throw new Exception("Seller " + seller + "doesn't have needed roles " + String.Join(" ", nodeRoles.Keys.ToArray()));
                //}

                sellersData[seller] = new Dictionary <ZNodesDataStructures.SellerNode.NodeRole, ZNodesDataStructures.SellerNode>(nodeRoles);
            }
        }