Example #1
0
 public virtual void RegisterPendingTask(Task task, WrappedJvmID jvmID)
 {
     // Create the mapping so that it is easy to look up
     // when the jvm comes back to ask for Task.
     // A JVM not present in this map is an illegal task/JVM.
     jvmIDToActiveAttemptMap[jvmID] = task;
 }
Example #2
0
 public virtual void RegisterLaunchedTask(TaskAttemptId attemptID, WrappedJvmID jvmId
                                          )
 {
     // The AM considers the task to be launched (Has asked the NM to launch it)
     // The JVM will only be given a task after this registartion.
     launchedJVMs.AddItem(jvmId);
     taskHeartbeatHandler.Register(attemptID);
 }
Example #3
0
 public virtual void Unregister(TaskAttemptId attemptID, WrappedJvmID jvmID)
 {
     // Unregistration also comes from the same TaskAttempt which does the
     // registration. Events are ordered at TaskAttempt, so unregistration will
     // always come after registration.
     // Remove from launchedJVMs before jvmIDToActiveAttemptMap to avoid
     // synchronization issue with getTask(). getTask should be checking
     // jvmIDToActiveAttemptMap before it checks launchedJVMs.
     // remove the mappings if not already removed
     launchedJVMs.Remove(jvmID);
     Sharpen.Collections.Remove(jvmIDToActiveAttemptMap, jvmID);
     //unregister this attempt
     taskHeartbeatHandler.Unregister(attemptID);
 }
Example #4
0
        /// <exception cref="System.IO.IOException"/>
        public virtual JvmTask GetTask(JvmContext context)
        {
            // A rough imitation of code from TaskTracker.
            JVMId jvmId = context.jvmId;

            Log.Info("JVM with ID : " + jvmId + " asked for a task");
            JvmTask jvmTask = null;
            // TODO: Is it an authorized container to get a task? Otherwise return null.
            // TODO: Child.java's firstTaskID isn't really firstTaskID. Ask for update
            // to jobId and task-type.
            WrappedJvmID wJvmID = new WrappedJvmID(jvmId.GetJobId(), jvmId.isMap, jvmId.GetId
                                                       ());

            // Try to look up the task. We remove it directly as we don't give
            // multiple tasks to a JVM
            if (!jvmIDToActiveAttemptMap.Contains(wJvmID))
            {
                Log.Info("JVM with ID: " + jvmId + " is invalid and will be killed.");
                jvmTask = TaskForInvalidJvm;
            }
            else
            {
                if (!launchedJVMs.Contains(wJvmID))
                {
                    jvmTask = null;
                    Log.Info("JVM with ID: " + jvmId + " asking for task before AM launch registered. Given null task"
                             );
                }
                else
                {
                    // remove the task as it is no more needed and free up the memory.
                    // Also we have already told the JVM to process a task, so it is no
                    // longer pending, and further request should ask it to exit.
                    Task task = Sharpen.Collections.Remove(jvmIDToActiveAttemptMap, wJvmID);
                    launchedJVMs.Remove(wJvmID);
                    Log.Info("JVM with ID: " + jvmId + " given task: " + task.GetTaskID());
                    task.SetEncryptedSpillKey(encryptedSpillKey);
                    jvmTask = new JvmTask(task, false);
                }
            }
            return(jvmTask);
        }
        /// <exception cref="System.IO.IOException"/>
        public virtual void TestGetTask()
        {
            AppContext            appCtx             = Org.Mockito.Mockito.Mock <AppContext>();
            JobTokenSecretManager secret             = Org.Mockito.Mockito.Mock <JobTokenSecretManager>();
            RMHeartbeatHandler    rmHeartbeatHandler = Org.Mockito.Mockito.Mock <RMHeartbeatHandler
                                                                                 >();
            TaskHeartbeatHandler hbHandler = Org.Mockito.Mockito.Mock <TaskHeartbeatHandler>();

            TestTaskAttemptListenerImpl.MockTaskAttemptListenerImpl listener = new TestTaskAttemptListenerImpl.MockTaskAttemptListenerImpl
                                                                                   (appCtx, secret, rmHeartbeatHandler, hbHandler);
            Configuration conf = new Configuration();

            listener.Init(conf);
            listener.Start();
            JVMId        id  = new JVMId("foo", 1, true, 1);
            WrappedJvmID wid = new WrappedJvmID(id.GetJobId(), id.isMap, id.GetId());
            // Verify ask before registration.
            //The JVM ID has not been registered yet so we should kill it.
            JvmContext context = new JvmContext();

            context.jvmId = id;
            JvmTask result = listener.GetTask(context);

            NUnit.Framework.Assert.IsNotNull(result);
            NUnit.Framework.Assert.IsTrue(result.shouldDie);
            // Verify ask after registration but before launch.
            // Don't kill, should be null.
            TaskAttemptId attemptID = Org.Mockito.Mockito.Mock <TaskAttemptId>();
            Task          task      = Org.Mockito.Mockito.Mock <Task>();

            //Now put a task with the ID
            listener.RegisterPendingTask(task, wid);
            result = listener.GetTask(context);
            NUnit.Framework.Assert.IsNull(result);
            // Unregister for more testing.
            listener.Unregister(attemptID, wid);
            // Verify ask after registration and launch
            //Now put a task with the ID
            listener.RegisterPendingTask(task, wid);
            listener.RegisterLaunchedTask(attemptID, wid);
            Org.Mockito.Mockito.Verify(hbHandler).Register(attemptID);
            result = listener.GetTask(context);
            NUnit.Framework.Assert.IsNotNull(result);
            NUnit.Framework.Assert.IsFalse(result.shouldDie);
            // Don't unregister yet for more testing.
            //Verify that if we call it again a second time we are told to die.
            result = listener.GetTask(context);
            NUnit.Framework.Assert.IsNotNull(result);
            NUnit.Framework.Assert.IsTrue(result.shouldDie);
            listener.Unregister(attemptID, wid);
            // Verify after unregistration.
            result = listener.GetTask(context);
            NUnit.Framework.Assert.IsNotNull(result);
            NUnit.Framework.Assert.IsTrue(result.shouldDie);
            listener.Stop();
            // test JVMID
            JVMId jvmid = JVMId.ForName("jvm_001_002_m_004");

            NUnit.Framework.Assert.IsNotNull(jvmid);
            try
            {
                JVMId.ForName("jvm_001_002_m_004_006");
                Assert.Fail();
            }
            catch (ArgumentException e)
            {
                NUnit.Framework.Assert.AreEqual(e.Message, "TaskId string : jvm_001_002_m_004_006 is not properly formed"
                                                );
            }
        }