Exemplo n.º 1
0
        private void ResendSplitToNextWorker(IWorker worker, long fileSize, long totalSplits, long remainingSplits)
        {
            FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);
            Thread       liveCheck        = new Thread(this.liveCheck);
            IAsyncResult RemAr            = RemoteDel.BeginInvoke(clientURL, myURL, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, false, null, null);

            liveCheck.Start(RemAr);
        }
Exemplo n.º 2
0
        public void ReceiveWork(string clientURL, long fileSize, long splits, string mapperName, byte[] mapperCode)
        {
            try
            {
                Logger.LogInfo("Received: " + clientURL + " with " + splits + " splits fileSize =" + fileSize);


                if (!didStartedPrimaryProcess)
                {
                    StartPrimaryJobTrackerProcess(clientURL, fileSize, splits, mapperName, mapperCode);
                    didStartedPrimaryProcess = true;
                }

                /* wait until if I am unfrozen and revert to Worker if needed */
                Logger.LogWarn("Testing in freeze state");
                WaitForUnfreezeAndCheckChanges();
                /* --------------------------- */


                IWorker nextWorker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                if (splits > fileSize)
                {
                    splits = fileSize;
                }
                long splitSize = fileSize / splits;

                FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(nextWorker.FetchWorker);
                IAsyncResult        RemAr     = RemoteDel.BeginInvoke(clientURL, myURL, mapperName, mapperCode, fileSize, splits, splits, myURL, true, null, null);

                if (secondaryJT == null)
                {
                    Logger.LogErr("Job tracker backup hasn't been configured yet");
                    secondaryJT.PrimaryStartedJob();
                }

                return;
            }
            catch (RemotingException e)
            {
                Logger.LogErr("Remoting Exception: " + e.Message);
            }
        }
Exemplo n.º 3
0
        public void liveCheck(object ar)
        {
            IAsyncResult iar = (IAsyncResult)ar;

            Thread.Sleep(TIMEOUT);

            if (!iar.IsCompleted)
            {
                IWorker worker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                try
                {
                    bool alive = worker.IsAlive();
                }
                catch (Exception ex)
                {
                    Logger.LogErr("exception: " + ex.ToString());
                    Logger.LogErr(" ---- NODE DOWN ALERT ---- ");
                    nodeDown();
                    PrintUpdateNetwork();
                    worker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                    FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);

                    if (backupStatus == ExecutionState.WORKING)
                    {
                        IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                    }
                    else
                    {
                        if (remainingSplits > 1)
                        {
                            IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits - 1, myURL, true, null, null);
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        public void liveCheck(object ar)
        {
            IAsyncResult iar = (IAsyncResult)ar;
            Thread.Sleep(TIMEOUT);

            if (!iar.IsCompleted)
            {
               IWorker worker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
               try
               {
                   bool alive = worker.IsAlive();
               }
               catch (Exception ex)
               {
                   Logger.LogErr("exception: " + ex.ToString());
                   Logger.LogErr(" ---- NODE DOWN ALERT ---- ");
                   nodeDown();
                   PrintUpdateNetwork();
                   worker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                   FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);

                   if (backupStatus == ExecutionState.WORKING)
                   {
                       IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                   }
                   else
                   {
                       if (remainingSplits > 1)
                       {
                           IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits - 1, myURL, true, null, null);

                       }
                   }
               }
            }
        }
Exemplo n.º 5
0
        public bool FetchWorker(string clientURL, string jobTrackerURL, string mapperName, byte[] mapperCode, long fileSize, long totalSplits, long remainingSplits, string backURL, bool propagateRemainingSplits)
        {
            try
            {
                /* wait until if I am unfrozen */
                WaitForUnfreeze();
                /* --------------------------- */

                //dead node revived!!! nooooooooo !
                if (!backURL.Equals(this.backURL))
                {
                    Logger.LogInfo("Receiving work from the Dead. Invoking Node Registration");
                    //do stuff to recover that node back to the network
                    IWorker revivedWorker = (IWorker)Activator.GetObject(typeof(IWorker), backURL);
                    RecoverDeadNodeAsyncDel deadDel = new RecoverDeadNodeAsyncDel(revivedWorker.Register);
                    IAsyncResult deadResponse = deadDel.BeginInvoke(currentJobTrackerUrl, null, null);
                    return true;
                }

                currentJobTrackerUrl = jobTrackerURL;
                currentJobTracker = (IWorker)Activator.GetObject(typeof(IWorker), currentJobTrackerUrl);

                backupWorkData(status, clientURL, jobTrackerURL, mapperName, mapperCode, fileSize, totalSplits, remainingSplits);

                IWorker worker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);
                Thread liveCheck = new Thread(this.liveCheck);

                if (serverRole == ServerRole.JOB_TRACKER)
                {
                    IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                    liveCheck.Start(RemAr);
                }
                else
                {
                    if (!didRegisted)
                    {
                        RegisterAtJobTracker();
                        didRegisted = true;
                    }

                    if (status == ExecutionState.WORKING && propagateRemainingSplits)
                    {
                        Logger.LogInfo("[JT FORWARD] Forwarded work from JobTracker: " + currentJobTrackerUrl + " remainingSplits: " + remainingSplits);
                        IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                        liveCheck.Start(RemAr);
                    }
                    else
                    {
                        Logger.LogInfo("[RECEIVED SPLIT] Received Work from JobTracker: " + currentJobTrackerUrl + " remainingSplits: " + remainingSplits);

                        LogStartSplit(id, fileSize, totalSplits, remainingSplits);

                        serverRole = ServerRole.WORKER;
                        status = ExecutionState.WORKING;

                        this.clientURL = clientURL;
                        client = (IClient)Activator.GetObject(typeof(IClient), clientURL);

                        if (remainingSplits > 1 && propagateRemainingSplits)
                        {
                            Logger.LogInfo("[WORKER FORWARD NEXT SPLIT]");
                            IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits - 1, myURL, true, null, null);
                            liveCheck.Start(RemAr);
                        }

                        long startSplit = (remainingSplits - 1) * (fileSize / totalSplits);

                        long endSplit;
                        if (remainingSplits == totalSplits)
                        {
                            endSplit = fileSize;
                        }
                        else
                        {
                            endSplit = (remainingSplits - 1 + 1) * (fileSize / totalSplits) - 1;//Making sure it reaches 0
                        }

                        Logger.LogInfo("client.getWorkSplit(" + startSplit + ", " + endSplit + ")");

                        SleepIfAskedTo();

                        //if (this.mapper == null || this.mapperType == null)
                        //{
                            GetMapperObject(mapperName, mapperCode);
                        //}

                        fetchItProcessItSendIt(startSplit, endSplit, remainingSplits);
                        status = ExecutionState.WAITING;
                        Logger.LogInfo("client.finishedProcessingSplit(" + startSplit + ", " + endSplit + ")");
                        LogEndSplit(id, totalSplits, remainingSplits);

                        processedSplits++;
                        if (remainingSplits == 1)
                        {
                            IWorker wasIDeadWorker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                            wasIDeadWorker.deadCheck(myURL);
                        }

                    }
                }
                return true;
            }
            catch (Exception e)
            {
                Logger.LogErr("Exception: " + e.ToString());
            }
            return true;
        }
Exemplo n.º 6
0
        public bool FetchWorker(string clientURL, string jobTrackerURL, string mapperName, byte[] mapperCode, long fileSize, long totalSplits, long remainingSplits, string backURL, bool propagateRemainingSplits)
        {
            try
            {
                /* wait until if I am unfrozen */
                WaitForUnfreeze();
                /* --------------------------- */

                //dead node revived!!! nooooooooo !
                if (!backURL.Equals(this.backURL))
                {
                    Logger.LogInfo("Receiving work from the Dead. Invoking Node Registration");
                    //do stuff to recover that node back to the network
                    IWorker revivedWorker                = (IWorker)Activator.GetObject(typeof(IWorker), backURL);
                    RecoverDeadNodeAsyncDel deadDel      = new RecoverDeadNodeAsyncDel(revivedWorker.Register);
                    IAsyncResult            deadResponse = deadDel.BeginInvoke(currentJobTrackerUrl, null, null);
                    return(true);
                }


                currentJobTrackerUrl = jobTrackerURL;
                currentJobTracker    = (IWorker)Activator.GetObject(typeof(IWorker), currentJobTrackerUrl);

                backupWorkData(status, clientURL, jobTrackerURL, mapperName, mapperCode, fileSize, totalSplits, remainingSplits);

                IWorker             worker    = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);
                Thread liveCheck = new Thread(this.liveCheck);

                if (serverRole == ServerRole.JOB_TRACKER)
                {
                    IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                    liveCheck.Start(RemAr);
                }
                else
                {
                    if (!didRegisted)
                    {
                        RegisterAtJobTracker();
                        didRegisted = true;
                    }

                    if (status == ExecutionState.WORKING && propagateRemainingSplits)
                    {
                        Logger.LogInfo("[JT FORWARD] Forwarded work from JobTracker: " + currentJobTrackerUrl + " remainingSplits: " + remainingSplits);
                        IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, true, null, null);
                        liveCheck.Start(RemAr);
                    }
                    else
                    {
                        Logger.LogInfo("[RECEIVED SPLIT] Received Work from JobTracker: " + currentJobTrackerUrl + " remainingSplits: " + remainingSplits);

                        LogStartSplit(id, fileSize, totalSplits, remainingSplits);

                        serverRole = ServerRole.WORKER;
                        status     = ExecutionState.WORKING;

                        this.clientURL = clientURL;
                        client         = (IClient)Activator.GetObject(typeof(IClient), clientURL);

                        if (remainingSplits > 1 && propagateRemainingSplits)
                        {
                            Logger.LogInfo("[WORKER FORWARD NEXT SPLIT]");
                            IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, currentJobTrackerUrl, mapperName, mapperCode, fileSize, totalSplits, remainingSplits - 1, myURL, true, null, null);
                            liveCheck.Start(RemAr);
                        }

                        long startSplit = (remainingSplits - 1) * (fileSize / totalSplits);

                        long endSplit;
                        if (remainingSplits == totalSplits)
                        {
                            endSplit = fileSize;
                        }
                        else
                        {
                            endSplit = (remainingSplits - 1 + 1) * (fileSize / totalSplits) - 1;//Making sure it reaches 0
                        }

                        Logger.LogInfo("client.getWorkSplit(" + startSplit + ", " + endSplit + ")");

                        SleepIfAskedTo();

                        //if (this.mapper == null || this.mapperType == null)
                        //{
                        GetMapperObject(mapperName, mapperCode);
                        //}

                        fetchItProcessItSendIt(startSplit, endSplit, remainingSplits);
                        status = ExecutionState.WAITING;
                        Logger.LogInfo("client.finishedProcessingSplit(" + startSplit + ", " + endSplit + ")");
                        LogEndSplit(id, totalSplits, remainingSplits);


                        processedSplits++;
                        if (remainingSplits == 1)
                        {
                            IWorker wasIDeadWorker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                            wasIDeadWorker.deadCheck(myURL);
                        }
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                Logger.LogErr("Exception: " + e.ToString());
            }
            return(true);
        }
Exemplo n.º 7
0
 private void ResendSplitToNextWorker(IWorker worker, long fileSize, long totalSplits, long remainingSplits)
 {
     FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(worker.FetchWorker);
     Thread liveCheck = new Thread(this.liveCheck);
     IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, myURL, mapperName, mapperCode, fileSize, totalSplits, remainingSplits, myURL, false, null, null);
     liveCheck.Start(RemAr);
 }
Exemplo n.º 8
0
        public void ReceiveWork(string clientURL, long fileSize, long splits, string mapperName, byte[] mapperCode)
        {
            try
            {
                Logger.LogInfo("Received: " + clientURL + " with " + splits + " splits fileSize =" + fileSize);

                if (!didStartedPrimaryProcess)
                {
                    StartPrimaryJobTrackerProcess(clientURL, fileSize, splits, mapperName, mapperCode);
                    didStartedPrimaryProcess = true;
                }

                /* wait until if I am unfrozen and revert to Worker if needed */
                Logger.LogWarn("Testing in freeze state");
                WaitForUnfreezeAndCheckChanges();
                /* --------------------------- */

                IWorker nextWorker = (IWorker)Activator.GetObject(typeof(IWorker), nextURL);
                if (splits > fileSize)
                    splits = fileSize;
                long splitSize = fileSize / splits;

                FetchWorkerAsyncDel RemoteDel = new FetchWorkerAsyncDel(nextWorker.FetchWorker);
                IAsyncResult RemAr = RemoteDel.BeginInvoke(clientURL, myURL, mapperName, mapperCode, fileSize, splits, splits, myURL, true, null, null);

                if (secondaryJT == null) {
                    Logger.LogErr("Job tracker backup hasn't been configured yet");
                    secondaryJT.PrimaryStartedJob();
                }

                return;
            }
            catch (RemotingException e)
            {
                Logger.LogErr("Remoting Exception: " + e.Message);
            }
        }