Esempio n. 1
0
        private static JobEndNotifier.JobEndStatusInfo CreateNotification(JobConf conf, JobStatus
                                                                          status)
        {
            JobEndNotifier.JobEndStatusInfo notification = null;
            string uri = conf.GetJobEndNotificationURI();

            if (uri != null)
            {
                int  retryAttempts = conf.GetInt(JobContext.MrJobEndRetryAttempts, 0);
                long retryInterval = conf.GetInt(JobContext.MrJobEndRetryInterval, 30000);
                int  timeout       = conf.GetInt(JobContext.MrJobEndNotificationTimeout, JobContext.DefaultMrJobEndNotificationTimeout
                                                 );
                if (uri.Contains("$jobId"))
                {
                    uri = uri.Replace("$jobId", ((JobID)status.GetJobID()).ToString());
                }
                if (uri.Contains("$jobStatus"))
                {
                    string statusStr = (status.GetRunState() == JobStatus.Succeeded) ? "SUCCEEDED" :
                                       (status.GetRunState() == JobStatus.Failed) ? "FAILED" : "KILLED";
                    uri = uri.Replace("$jobStatus", statusStr);
                }
                notification = new JobEndNotifier.JobEndStatusInfo(uri, retryAttempts, retryInterval
                                                                   , timeout);
            }
            return(notification);
        }
Esempio n. 2
0
 // for use by the LocalJobRunner, without using a thread&queue,
 // simple synchronous way
 public static void LocalRunnerNotification(JobConf conf, JobStatus status)
 {
     JobEndNotifier.JobEndStatusInfo notification = CreateNotification(conf, status);
     if (notification != null)
     {
         do
         {
             try
             {
                 int code = HttpNotification(notification.GetUri(), notification.GetTimeout());
                 if (code != 200)
                 {
                     throw new IOException("Invalid response status code: " + code);
                 }
                 else
                 {
                     break;
                 }
             }
             catch (IOException ioex)
             {
                 Log.Error("Notification error [" + notification.GetUri() + "]", ioex);
             }
             catch (Exception ex)
             {
                 Log.Error("Notification error [" + notification.GetUri() + "]", ex);
             }
             try
             {
                 Sharpen.Thread.Sleep(notification.GetRetryInterval());
             }
             catch (Exception iex)
             {
                 Log.Error("Notification retry error [" + notification + "]", iex);
             }
         }while (notification.ConfigureForRetry());
     }
 }