Exemplo n.º 1
0
        //start receiving requests from the failed server
        public void substituteFailedServer()
        {
            lock (Datastore.SERVEROBJECTS)
            {
                List <ServerObject> replaceList = Replica.WORKERSERVEROBJECTS;

                //Send replaceList to sucessor, the data must always be in two place
                // WARNING: Verificar se o sucessor é ele próprio
                IWorkerReplica sucessor = (IWorkerReplica)Activator.GetObject(
                    typeof(IWorkerReplica), Replica.SUCESSOR + "WorkerReplica");


                Datastore.SERVEROBJECTS.AddRange(replaceList);


                //sucessor.update(replaceList);

                // Instead of sending only the replace list, it is send all primary objects just to be sure
                sucessor.update(Datastore.SERVEROBJECTS);

                // debug info
                Console.WriteLine("Printing worker main server objects:");
                foreach (ServerObject o in Datastore.SERVEROBJECTS)
                {
                    Console.WriteLine("\t UID= " + o.UID + " VALUE=" + o.VALUE);
                }
            }
        }
Exemplo n.º 2
0
        // Update function called by the workers, receives list of server objects
        // from a given server. If worker_url does not exist in worker_serverObjects
        // it means that it is a new server

        //Send updated to sucessor, if sucessor died return false -> transaction abort
        //call master to stabalize the system
        internal static UpdateState updateSucessor(List <ServerObject> writtenObjects)
        {
            try
            {
                IWorkerReplica sucessor = (IWorkerReplica)Activator.GetObject(typeof(IWorkerReplica), Replica.SUCESSOR + "WorkerReplica");
                sucessor.update(writtenObjects);
                return(UpdateState.COMMIT);
            }
            catch (SocketException)
            {
                // manageFailedServer(Replica.SUCESSOR);
                //updateSucessor(writtenObjects);
                return(UpdateState.ABORT);
            }
            catch (System.IO.IOException)
            {
                //manageFailedServer(Replica.SUCESSOR);
                //updateSucessor(writtenObjects);
                return(UpdateState.ABORT);
            }
        }