Example #1
0
        public override nodeConf newConnected(string id, Ice.Current current__)
        {
            Console.WriteLine("Slave connected: {0}", id);
            if (IsDisconnecting)
            {
                throw new System.Exception("Node shutting down.");
            }
            lock (ranges)
            {
                nodeConf nc = new nodeConf();
                nc.parentNode = _nodeName;
                nc.nodeId = id;
                if (ranges.Count > 1)
                {
                    nc.min = ranges[0].min;
                    nc.max = ranges[0].max;
                    ranges.RemoveAt(0);
                }
                else
                {
                    nc.min = ranges[0].min;
                    long v = ranges[0].max;
                    v += ranges[0].min;
                    v /= 2;
                    nc.max = (int)v;
                    range r = ranges[0];
                    r.min = nc.max + 1;
                    ranges[0] = r;
                }

                lock (values)
                {
                    List<keyvaluepair> elems = new List<keyvaluepair>();
                    foreach (int crc in new List<int>(values.Keys))
                    {
                        if (crc >= nc.min && crc <= nc.max)
                        {
                            elems.AddRange(values[crc]);
                            values.Remove(crc);
                        }
                    }
                    nc.elems = elems.ToArray();
                }
                childs.Add(nc);
                Console.WriteLine(describe());
                return nc;
            }
        }
Example #2
0
 public override void slaveDisconnected(string id, range[] newRanges, nodeConf[] childRanges, Ice.Current current__)
 {
     lock (ranges)
     {
         Console.WriteLine("Slave disconected "+id);
         nodeConf removedNode = null;
         foreach (nodeConf nc in childs)
         {
             if (nc.nodeId == id)
             {
                 removedNode = nc;
             }
         }
         if (removedNode != null)
         {
             childs.Remove(removedNode);
             foreach (range r in newRanges)
             {
                 ranges.Add(r);
             }
             reduceRanges();
             foreach (nodeConf nc in childRanges)
             {
                 childs.Add(nc);
             }
         }
         else
         {
             Console.WriteLine("Struct fail: {0} is not a child of {1}", id, _nodeName);
         }
         Console.WriteLine(describe());
     }
 }
Example #3
0
 public override void masterDisconnected(string connectTo, range subtree, range[] newRanges, nodeConf[] childRanges, Ice.Current current__)
 {
     lock (ranges)
     {
         Console.WriteLine("Master disconnected");
         _parent = connectTo;
         if (_parent == null || _parent.Equals("")) // jestem nowy rootem dla tego poddrzewa
         {
             Console.WriteLine("setting subtree range: "+subtree.min + " : " + subtree.max);
             _parent = null;
             subtreeRange = subtree;
         }
         ranges.AddRange(newRanges);
         foreach (nodeConf nc in childRanges)
         {
             nc.parentNode = _nodeName;
         }
         childs.AddRange(childRanges);
         reduceRanges();
         Console.WriteLine(describe());
     }
 }