public virtual IList <Container> GetTransferredContainers(ApplicationAttemptId currentAttempt
                                                                  )
        {
            ApplicationId            appId         = currentAttempt.GetApplicationId();
            SchedulerApplication <T> app           = applications[appId];
            IList <Container>        containerList = new AList <Container>();
            RMApp appImpl = this.rmContext.GetRMApps()[appId];

            if (appImpl.GetApplicationSubmissionContext().GetUnmanagedAM())
            {
                return(containerList);
            }
            if (app == null)
            {
                return(containerList);
            }
            ICollection <RMContainer> liveContainers = app.GetCurrentAppAttempt().GetLiveContainers
                                                           ();
            ContainerId amContainerId = rmContext.GetRMApps()[appId].GetCurrentAppAttempt().GetMasterContainer
                                            ().GetId();

            foreach (RMContainer rmContainer in liveContainers)
            {
                if (!rmContainer.GetContainerId().Equals(amContainerId))
                {
                    containerList.AddItem(rmContainer.GetContainer());
                }
            }
            return(containerList);
        }
示例#2
0
 public SchedulerApplicationAttempt(ApplicationAttemptId applicationAttemptId, string
                                    user, Queue queue, ActiveUsersManager activeUsersManager, RMContext rmContext)
 {
     // This pendingRelease is used in work-preserving recovery scenario to keep
     // track of the AM's outstanding release requests. RM on recovery could
     // receive the release request form AM before it receives the container status
     // from NM for recovery. In this case, the to-be-recovered containers reported
     // by NM should not be recovered.
     // Time of the last container scheduled at the current allowed level
     Preconditions.CheckNotNull(rmContext, "RMContext should not be null");
     this.rmContext         = rmContext;
     this.appSchedulingInfo = new AppSchedulingInfo(applicationAttemptId, user, queue,
                                                    activeUsersManager, rmContext.GetEpoch());
     this.queue          = queue;
     this.pendingRelease = new HashSet <ContainerId>();
     this.attemptId      = applicationAttemptId;
     if (rmContext.GetRMApps() != null && rmContext.GetRMApps().Contains(applicationAttemptId
                                                                         .GetApplicationId()))
     {
         ApplicationSubmissionContext appSubmissionContext = rmContext.GetRMApps()[applicationAttemptId
                                                                                   .GetApplicationId()].GetApplicationSubmissionContext();
         if (appSubmissionContext != null)
         {
             unmanagedAM = appSubmissionContext.GetUnmanagedAM();
             this.logAggregationContext = appSubmissionContext.GetLogAggregationContext();
         }
     }
 }
示例#3
0
        // resourceLimit: updated when LeafQueue#recoverContainer#allocateResource
        // is called.
        // newlyAllocatedContainers.add(rmContainer);
        // schedulingOpportunities
        // lastScheduledContainer
        public virtual void IncNumAllocatedContainers(NodeType containerType, NodeType requestType
                                                      )
        {
            RMAppAttempt attempt = rmContext.GetRMApps()[attemptId.GetApplicationId()].GetCurrentAppAttempt
                                       ();

            if (attempt != null)
            {
                attempt.GetRMAppAttemptMetrics().IncNumAllocatedContainers(containerType, requestType
                                                                           );
            }
        }
示例#4
0
        public virtual void Handle(NodesListManagerEvent @event)
        {
            RMNode eventNode = @event.GetNode();

            switch (@event.GetType())
            {
            case NodesListManagerEventType.NodeUnusable:
            {
                Log.Debug(eventNode + " reported unusable");
                unusableRMNodesConcurrentSet.AddItem(eventNode);
                foreach (RMApp app in rmContext.GetRMApps().Values)
                {
                    if (!app.IsAppFinalStateStored())
                    {
                        this.rmContext.GetDispatcher().GetEventHandler().Handle(new RMAppNodeUpdateEvent(
                                                                                    app.GetApplicationId(), eventNode, RMAppNodeUpdateEvent.RMAppNodeUpdateType.NodeUnusable
                                                                                    ));
                    }
                }
                break;
            }

            case NodesListManagerEventType.NodeUsable:
            {
                if (unusableRMNodesConcurrentSet.Contains(eventNode))
                {
                    Log.Debug(eventNode + " reported usable");
                    unusableRMNodesConcurrentSet.Remove(eventNode);
                }
                foreach (RMApp app_1 in rmContext.GetRMApps().Values)
                {
                    if (!app_1.IsAppFinalStateStored())
                    {
                        this.rmContext.GetDispatcher().GetEventHandler().Handle(new RMAppNodeUpdateEvent(
                                                                                    app_1.GetApplicationId(), eventNode, RMAppNodeUpdateEvent.RMAppNodeUpdateType.NodeUsable
                                                                                    ));
                    }
                }
                break;
            }

            default:
            {
                Log.Error("Ignoring invalid eventtype " + @event.GetType());
                break;
            }
            }
        }
示例#5
0
        public static ClientRMService MockClientRMService(RMContext rmContext)
        {
            ClientRMService           clientRMService = Org.Mockito.Mockito.Mock <ClientRMService>();
            IList <ApplicationReport> appReports      = new AList <ApplicationReport>();

            foreach (RMApp app in rmContext.GetRMApps().Values)
            {
                ApplicationReport appReport = ApplicationReport.NewInstance(app.GetApplicationId(
                                                                                ), (ApplicationAttemptId)null, app.GetUser(), app.GetQueue(), app.GetName(), (string
                                                                                                                                                              )null, 0, (Token)null, app.CreateApplicationState(), app.GetDiagnostics().ToString
                                                                                (), (string)null, app.GetStartTime(), app.GetFinishTime(), app.GetFinalApplicationStatus
                                                                                (), (ApplicationResourceUsageReport)null, app.GetTrackingUrl(), app.GetProgress(
                                                                                ), app.GetApplicationType(), (Token)null);
                appReports.AddItem(appReport);
            }
            GetApplicationsResponse response = Org.Mockito.Mockito.Mock <GetApplicationsResponse
                                                                         >();

            Org.Mockito.Mockito.When(response.GetApplicationList()).ThenReturn(appReports);
            try
            {
                Org.Mockito.Mockito.When(clientRMService.GetApplications(Matchers.Any <GetApplicationsRequest
                                                                                       >())).ThenReturn(response);
            }
            catch (YarnException)
            {
                NUnit.Framework.Assert.Fail("Exception is not expteced.");
            }
            return(clientRMService);
        }
示例#6
0
        public virtual void TestStateStoreAppLimitLargerThanMemoryAppLimit()
        {
            long          now             = Runtime.CurrentTimeMillis();
            RMContext     rmContext       = MockRMContext(10, now - 20000);
            Configuration conf            = new YarnConfiguration();
            int           maxAppsInMemory = 8;

            conf.SetInt(YarnConfiguration.RmMaxCompletedApplications, maxAppsInMemory);
            // larger than maxCompletedAppsInMemory, reset to RM_MAX_COMPLETED_APPLICATIONS.
            conf.SetInt(YarnConfiguration.RmStateStoreMaxCompletedApplications, 1000);
            TestAppManager.TestRMAppManager appMonitor = new TestAppManager.TestRMAppManager(
                this, rmContext, conf);
            AddToCompletedApps(appMonitor, rmContext);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect", 10, appMonitor
                                            .GetCompletedAppsListSize());
            appMonitor.CheckAppNumCompletedLimit();
            int numRemoveApps = 10 - maxAppsInMemory;

            NUnit.Framework.Assert.AreEqual("Number of apps incorrect after # completed check"
                                            , maxAppsInMemory, rmContext.GetRMApps().Count);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect after check",
                                            maxAppsInMemory, appMonitor.GetCompletedAppsListSize());
            Org.Mockito.Mockito.Verify(rmContext.GetStateStore(), Org.Mockito.Mockito.Times(numRemoveApps
                                                                                            )).RemoveApplication(Matchers.IsA <RMApp>());
            NUnit.Framework.Assert.AreEqual(maxAppsInMemory, appMonitor.GetCompletedAppsInStateStore
                                                ());
        }
示例#7
0
        /// <exception cref="System.Exception"/>
        public virtual void WaitForState(RMAppAttemptState finalState)
        {
            RMApp        app         = context.GetRMApps()[attemptId.GetApplicationId()];
            RMAppAttempt attempt     = app.GetRMAppAttempt(attemptId);
            int          timeoutSecs = 0;

            while (!finalState.Equals(attempt.GetAppAttemptState()) && timeoutSecs++ < 40)
            {
                System.Console.Out.WriteLine("AppAttempt : " + attemptId + " State is : " + attempt
                                             .GetAppAttemptState() + " Waiting for state : " + finalState);
                Sharpen.Thread.Sleep(1000);
            }
            System.Console.Out.WriteLine("AppAttempt State is : " + attempt.GetAppAttemptState
                                             ());
            NUnit.Framework.Assert.AreEqual("AppAttempt state is not correct (timedout)", finalState
                                            , attempt.GetAppAttemptState());
        }
示例#8
0
        // Protected. For tests.
        protected internal virtual ContainerManagementProtocol GetContainerMgrProxy(ContainerId
                                                                                    containerId)
        {
            NodeId     node = masterContainer.GetNodeId();
            IPEndPoint containerManagerConnectAddress = NetUtils.CreateSocketAddrForHost(node
                                                                                         .GetHost(), node.GetPort());
            YarnRPC rpc = GetYarnRPC();
            UserGroupInformation currentUser = UserGroupInformation.CreateRemoteUser(containerId
                                                                                     .GetApplicationAttemptId().ToString());
            string user = rmContext.GetRMApps()[containerId.GetApplicationAttemptId().GetApplicationId
                                                    ()].GetUser();
            Token token = rmContext.GetNMTokenSecretManager().CreateNMToken(containerId.GetApplicationAttemptId
                                                                                (), node, user);

            currentUser.AddToken(ConverterUtils.ConvertFromYarn(token, containerManagerConnectAddress
                                                                ));
            return(NMProxy.CreateNMProxy <ContainerManagementProtocol>(conf, currentUser, rpc,
                                                                       containerManagerConnectAddress));
        }
示例#9
0
 protected internal virtual void AddToCompletedApps(TestAppManager.TestRMAppManager
                                                    appMonitor, RMContext rmContext)
 {
     foreach (RMApp app in rmContext.GetRMApps().Values)
     {
         if (app.GetState() == RMAppState.Finished || app.GetState() == RMAppState.Killed ||
             app.GetState() == RMAppState.Failed)
         {
             appMonitor.FinishApplication(app.GetApplicationId());
         }
     }
 }
示例#10
0
        public virtual void TestRMAppSubmit()
        {
            appMonitor.SubmitApplication(asContext, "test");
            RMApp app = rmContext.GetRMApps()[appId];

            NUnit.Framework.Assert.IsNotNull("app is null", app);
            NUnit.Framework.Assert.AreEqual("app id doesn't match", appId, app.GetApplicationId
                                                ());
            NUnit.Framework.Assert.AreEqual("app state doesn't match", RMAppState.New, app.GetState
                                                ());
            Org.Mockito.Mockito.Verify(metricsPublisher).AppACLsUpdated(Matchers.Any <RMApp>()
                                                                        , Matchers.Any <string>(), Matchers.AnyLong());
            // wait for event to be processed
            int timeoutSecs = 0;

            while ((GetAppEventType() == RMAppEventType.Kill) && timeoutSecs++ < 20)
            {
                Sharpen.Thread.Sleep(1000);
            }
            NUnit.Framework.Assert.AreEqual("app event type sent is wrong", RMAppEventType.Start
                                            , GetAppEventType());
        }
示例#11
0
        public virtual void TestRMAppRetireNullApp()
        {
            long      now       = Runtime.CurrentTimeMillis();
            RMContext rmContext = MockRMContext(10, now - 20000);

            TestAppManager.TestRMAppManager appMonitor = new TestAppManager.TestRMAppManager(
                this, rmContext, new Configuration());
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect before", 10, rmContext.
                                            GetRMApps().Count);
            appMonitor.FinishApplication(null);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect after check",
                                            0, appMonitor.GetCompletedAppsListSize());
        }
示例#12
0
        public virtual void TestRMAppRetireZeroSetting()
        {
            long          now       = Runtime.CurrentTimeMillis();
            RMContext     rmContext = MockRMContext(10, now - 20000);
            Configuration conf      = new YarnConfiguration();

            conf.SetInt(YarnConfiguration.RmStateStoreMaxCompletedApplications, 0);
            conf.SetInt(YarnConfiguration.RmMaxCompletedApplications, 0);
            TestAppManager.TestRMAppManager appMonitor = new TestAppManager.TestRMAppManager(
                this, rmContext, conf);
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect before", 10, rmContext.
                                            GetRMApps().Count);
            AddToCompletedApps(appMonitor, rmContext);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect", 10, appMonitor
                                            .GetCompletedAppsListSize());
            appMonitor.CheckAppNumCompletedLimit();
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect after # completed check"
                                            , 0, rmContext.GetRMApps().Count);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect after check",
                                            0, appMonitor.GetCompletedAppsListSize());
            Org.Mockito.Mockito.Verify(rmContext.GetStateStore(), Org.Mockito.Mockito.Times(10
                                                                                            )).RemoveApplication(Matchers.IsA <RMApp>());
        }
示例#13
0
        public virtual void TestRMAppRetireNone()
        {
            long now = Runtime.CurrentTimeMillis();
            // Create such that none of the applications will retire since
            // haven't hit max #
            RMContext     rmContext = MockRMContext(10, now - 10);
            Configuration conf      = new YarnConfiguration();

            conf.SetInt(YarnConfiguration.RmMaxCompletedApplications, 10);
            TestAppManager.TestRMAppManager appMonitor = new TestAppManager.TestRMAppManager(
                this, rmContext, conf);
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect before checkAppTimeLimit"
                                            , 10, rmContext.GetRMApps().Count);
            // add them to completed apps list
            AddToCompletedApps(appMonitor, rmContext);
            // shouldn't  have to many apps
            appMonitor.CheckAppNumCompletedLimit();
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect after # completed check"
                                            , 10, rmContext.GetRMApps().Count);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect after check",
                                            10, appMonitor.GetCompletedAppsListSize());
            Org.Mockito.Mockito.Verify(rmContext.GetStateStore(), Org.Mockito.Mockito.Never()
                                       ).RemoveApplication(Matchers.IsA <RMApp>());
        }
示例#14
0
        public virtual void SetUp()
        {
            CapacityScheduler spyCs = new CapacityScheduler();

            cs           = Org.Mockito.Mockito.Spy(spyCs);
            scheduler    = cs;
            rmContext    = TestUtils.GetMockRMContext();
            spyRMContext = Org.Mockito.Mockito.Spy(rmContext);
            ConcurrentMap <ApplicationId, RMApp> spyApps = Org.Mockito.Mockito.Spy(new ConcurrentHashMap
                                                                                   <ApplicationId, RMApp>());
            RMApp rmApp = Org.Mockito.Mockito.Mock <RMApp>();

            Org.Mockito.Mockito.When(rmApp.GetRMAppAttempt((ApplicationAttemptId)Matchers.Any
                                                               ())).ThenReturn(null);
            Org.Mockito.Mockito.DoReturn(rmApp).When(spyApps)[(ApplicationId)Matchers.Any()];
            Org.Mockito.Mockito.When(spyRMContext.GetRMApps()).ThenReturn(spyApps);
            Org.Mockito.Mockito.When(spyRMContext.GetScheduler()).ThenReturn(scheduler);
            CapacitySchedulerConfiguration csConf = new CapacitySchedulerConfiguration();

            ReservationSystemTestUtil.SetupQueueConfiguration(csConf);
            cs.SetConf(csConf);
            csContext = Org.Mockito.Mockito.Mock <CapacitySchedulerContext>();
            Org.Mockito.Mockito.When(csContext.GetConfiguration()).ThenReturn(csConf);
            Org.Mockito.Mockito.When(csContext.GetConf()).ThenReturn(csConf);
            Org.Mockito.Mockito.When(csContext.GetMinimumResourceCapability()).ThenReturn(minAlloc
                                                                                          );
            Org.Mockito.Mockito.When(csContext.GetMaximumResourceCapability()).ThenReturn(maxAlloc
                                                                                          );
            Org.Mockito.Mockito.When(csContext.GetClusterResource()).ThenReturn(Resources.CreateResource
                                                                                    (100 * 16 * Gb, 100 * 32));
            Org.Mockito.Mockito.When(scheduler.GetClusterResource()).ThenReturn(Resources.CreateResource
                                                                                    (125 * Gb, 125));
            Org.Mockito.Mockito.When(csContext.GetResourceCalculator()).ThenReturn(new DefaultResourceCalculator
                                                                                       ());
            RMContainerTokenSecretManager containerTokenSecretManager = new RMContainerTokenSecretManager
                                                                            (csConf);

            containerTokenSecretManager.RollMasterKey();
            Org.Mockito.Mockito.When(csContext.GetContainerTokenSecretManager()).ThenReturn(containerTokenSecretManager
                                                                                            );
            cs.SetRMContext(spyRMContext);
            cs.Init(csConf);
            cs.Start();
            SetupPlanFollower();
        }
示例#15
0
        protected internal virtual void CreateApplicationWithAMResource(ApplicationAttemptId
                                                                        attId, string queue, string user, Resource amResource)
        {
            RMContext rmContext = resourceManager.GetRMContext();
            RMApp     rmApp     = new RMAppImpl(attId.GetApplicationId(), rmContext, conf, null, null
                                                , null, ApplicationSubmissionContext.NewInstance(null, null, null, null, null, false
                                                                                                 , false, 0, amResource, null), null, null, 0, null, null, null);

            rmContext.GetRMApps()[attId.GetApplicationId()] = rmApp;
            AppAddedSchedulerEvent appAddedEvent = new AppAddedSchedulerEvent(attId.GetApplicationId
                                                                                  (), queue, user);

            scheduler.Handle(appAddedEvent);
            AppAttemptAddedSchedulerEvent attempAddedEvent = new AppAttemptAddedSchedulerEvent
                                                                 (attId, false);

            scheduler.Handle(attempAddedEvent);
        }
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual FinishApplicationMasterResponse FinishApplicationMaster(FinishApplicationMasterRequest
                                                                               request)
        {
            ApplicationAttemptId applicationAttemptId = AuthorizeRequest().GetApplicationAttemptId
                                                            ();
            ApplicationId appId = applicationAttemptId.GetApplicationId();
            RMApp         rmApp = rmContext.GetRMApps()[applicationAttemptId.GetApplicationId()];

            // checking whether the app exits in RMStateStore at first not to throw
            // ApplicationDoesNotExistInCacheException before and after
            // RM work-preserving restart.
            if (rmApp.IsAppFinalStateStored())
            {
                Log.Info(rmApp.GetApplicationId() + " unregistered successfully. ");
                return(FinishApplicationMasterResponse.NewInstance(true));
            }
            ApplicationMasterService.AllocateResponseLock Lock = responseMap[applicationAttemptId
                                                                 ];
            if (Lock == null)
            {
                ThrowApplicationDoesNotExistInCacheException(applicationAttemptId);
            }
            // Allow only one thread in AM to do finishApp at a time.
            lock (Lock)
            {
                if (!HasApplicationMasterRegistered(applicationAttemptId))
                {
                    string message = "Application Master is trying to unregister before registering for: "
                                     + appId;
                    Log.Error(message);
                    RMAuditLogger.LogFailure(this.rmContext.GetRMApps()[appId].GetUser(), RMAuditLogger.AuditConstants
                                             .UnregisterAm, string.Empty, "ApplicationMasterService", message, appId, applicationAttemptId
                                             );
                    throw new ApplicationMasterNotRegisteredException(message);
                }
                this.amLivelinessMonitor.ReceivedPing(applicationAttemptId);
                rmContext.GetDispatcher().GetEventHandler().Handle(new RMAppAttemptUnregistrationEvent
                                                                       (applicationAttemptId, request.GetTrackingUrl(), request.GetFinalApplicationStatus
                                                                           (), request.GetDiagnostics()));
                // For UnmanagedAMs, return true so they don't retry
                return(FinishApplicationMasterResponse.NewInstance(rmApp.GetApplicationSubmissionContext
                                                                       ().GetUnmanagedAM()));
            }
        }
示例#17
0
        private RMAppImpl CreateMockRMApp(ApplicationAttemptId attemptId, RMContext context
                                          )
        {
            RMAppImpl app = Org.Mockito.Mockito.Mock <RMAppImpl>();

            Org.Mockito.Mockito.When(app.GetApplicationId()).ThenReturn(attemptId.GetApplicationId
                                                                            ());
            RMAppAttemptImpl attempt = Org.Mockito.Mockito.Mock <RMAppAttemptImpl>();

            Org.Mockito.Mockito.When(attempt.GetAppAttemptId()).ThenReturn(attemptId);
            RMAppAttemptMetrics attemptMetric = Org.Mockito.Mockito.Mock <RMAppAttemptMetrics>
                                                    ();

            Org.Mockito.Mockito.When(attempt.GetRMAppAttemptMetrics()).ThenReturn(attemptMetric
                                                                                  );
            Org.Mockito.Mockito.When(app.GetCurrentAppAttempt()).ThenReturn(attempt);
            context.GetRMApps().PutIfAbsent(attemptId.GetApplicationId(), app);
            return(app);
        }
示例#18
0
        public virtual AggregateAppResourceUsage GetAggregateAppResourceUsage()
        {
            long memorySeconds = finishedMemorySeconds.Get();
            long vcoreSeconds  = finishedVcoreSeconds.Get();
            // Only add in the running containers if this is the active attempt.
            RMAppAttempt currentAttempt = rmContext.GetRMApps()[attemptId.GetApplicationId()]
                                          .GetCurrentAppAttempt();

            if (currentAttempt.GetAppAttemptId().Equals(attemptId))
            {
                ApplicationResourceUsageReport appResUsageReport = rmContext.GetScheduler().GetAppResourceUsageReport
                                                                       (attemptId);
                if (appResUsageReport != null)
                {
                    memorySeconds += appResUsageReport.GetMemorySeconds();
                    vcoreSeconds  += appResUsageReport.GetVcoreSeconds();
                }
            }
            return(new AggregateAppResourceUsage(memorySeconds, vcoreSeconds));
        }
示例#19
0
        public FiCaSchedulerApp(ApplicationAttemptId applicationAttemptId, string user, Queue
                                queue, ActiveUsersManager activeUsersManager, RMContext rmContext)
            : base(applicationAttemptId, user, queue, activeUsersManager, rmContext)
        {
            RMApp    rmApp = rmContext.GetRMApps()[GetApplicationId()];
            Resource amResource;

            if (rmApp == null || rmApp.GetAMResourceRequest() == null)
            {
                //the rmApp may be undefined (the resource manager checks for this too)
                //and unmanaged applications do not provide an amResource request
                //in these cases, provide a default using the scheduler
                amResource = rmContext.GetScheduler().GetMinimumResourceCapability();
            }
            else
            {
                amResource = rmApp.GetAMResourceRequest().GetCapability();
            }
            SetAMResource(amResource);
        }
示例#20
0
        public virtual void TestAppBlockRenderWithNullCurrentAppAttempt()
        {
            ApplicationId AppId = ApplicationId.NewInstance(1234L, 0);
            Injector      injector;
            // init app
            RMApp app = Org.Mockito.Mockito.Mock <RMApp>();

            Org.Mockito.Mockito.When(app.GetTrackingUrl()).ThenReturn("http://host:123");
            Org.Mockito.Mockito.When(app.GetState()).ThenReturn(RMAppState.Failed);
            Org.Mockito.Mockito.When(app.GetApplicationId()).ThenReturn(AppId);
            Org.Mockito.Mockito.When(app.GetApplicationType()).ThenReturn("Type");
            Org.Mockito.Mockito.When(app.GetUser()).ThenReturn("user");
            Org.Mockito.Mockito.When(app.GetName()).ThenReturn("Name");
            Org.Mockito.Mockito.When(app.GetQueue()).ThenReturn("queue");
            Org.Mockito.Mockito.When(app.GetDiagnostics()).ThenReturn(new StringBuilder());
            Org.Mockito.Mockito.When(app.GetFinalApplicationStatus()).ThenReturn(FinalApplicationStatus
                                                                                 .Failed);
            Org.Mockito.Mockito.When(app.GetFinalApplicationStatus()).ThenReturn(FinalApplicationStatus
                                                                                 .Failed);
            Org.Mockito.Mockito.When(app.GetStartTime()).ThenReturn(0L);
            Org.Mockito.Mockito.When(app.GetFinishTime()).ThenReturn(0L);
            Org.Mockito.Mockito.When(app.CreateApplicationState()).ThenReturn(YarnApplicationState
                                                                              .Failed);
            RMAppMetrics appMetrics = new RMAppMetrics(Resource.NewInstance(0, 0), 0, 0, 0, 0
                                                       );

            Org.Mockito.Mockito.When(app.GetRMAppMetrics()).ThenReturn(appMetrics);
            // initialize RM Context, and create RMApp, without creating RMAppAttempt
            RMContext rmContext = TestRMWebApp.MockRMContext(15, 1, 2, 8);

            rmContext.GetRMApps()[AppId] = app;
            injector = WebAppTests.CreateMockInjector <RMContext>(rmContext, new _Module_76(rmContext
                                                                                            ));
            AppBlock instance = injector.GetInstance <AppBlock>();

            instance.Set(YarnWebParams.ApplicationId, AppId.ToString());
            instance.Render();
        }
示例#21
0
        public virtual void SetUp()
        {
            conf = CreateConfiguration();
            ReservationSystemTestUtil.SetupFSAllocationFile(AllocFile);
            ReservationSystemTestUtil testUtil = new ReservationSystemTestUtil();

            // Setup
            rmContext    = TestUtils.GetMockRMContext();
            spyRMContext = Org.Mockito.Mockito.Spy(rmContext);
            fs           = ReservationSystemTestUtil.SetupFairScheduler(testUtil, spyRMContext, conf, 125
                                                                        );
            scheduler = fs;
            ConcurrentMap <ApplicationId, RMApp> spyApps = Org.Mockito.Mockito.Spy(new ConcurrentHashMap
                                                                                   <ApplicationId, RMApp>());
            RMApp rmApp = Org.Mockito.Mockito.Mock <RMApp>();

            Org.Mockito.Mockito.When(rmApp.GetRMAppAttempt((ApplicationAttemptId)Matchers.Any
                                                               ())).ThenReturn(null);
            Org.Mockito.Mockito.DoReturn(rmApp).When(spyApps)[(ApplicationId)Matchers.Any()];
            Org.Mockito.Mockito.When(spyRMContext.GetRMApps()).ThenReturn(spyApps);
            ReservationSystemTestUtil.SetupFSAllocationFile(AllocFile);
            SetupPlanFollower();
        }
        internal virtual void HandleNMContainerStatus(NMContainerStatus containerStatus,
                                                      NodeId nodeId)
        {
            ApplicationAttemptId appAttemptId = containerStatus.GetContainerId().GetApplicationAttemptId
                                                    ();
            RMApp rmApp = rmContext.GetRMApps()[appAttemptId.GetApplicationId()];

            if (rmApp == null)
            {
                Log.Error("Received finished container : " + containerStatus.GetContainerId() + " for unknown application "
                          + appAttemptId.GetApplicationId() + " Skipping.");
                return;
            }
            if (rmApp.GetApplicationSubmissionContext().GetUnmanagedAM())
            {
                if (Log.IsDebugEnabled())
                {
                    Log.Debug("Ignoring container completion status for unmanaged AM " + rmApp.GetApplicationId
                                  ());
                }
                return;
            }
            RMAppAttempt rmAppAttempt    = rmApp.GetRMAppAttempt(appAttemptId);
            Container    masterContainer = rmAppAttempt.GetMasterContainer();

            if (masterContainer.GetId().Equals(containerStatus.GetContainerId()) && containerStatus
                .GetContainerState() == ContainerState.Complete)
            {
                ContainerStatus status = ContainerStatus.NewInstance(containerStatus.GetContainerId
                                                                         (), containerStatus.GetContainerState(), containerStatus.GetDiagnostics(), containerStatus
                                                                     .GetContainerExitStatus());
                // sending master container finished event.
                RMAppAttemptContainerFinishedEvent evt = new RMAppAttemptContainerFinishedEvent(appAttemptId
                                                                                                , status, nodeId);
                rmContext.GetDispatcher().GetEventHandler().Handle(evt);
            }
        }
示例#23
0
        public virtual void TestRMAppRetireSomeDifferentStates()
        {
            long now = Runtime.CurrentTimeMillis();
            // these parameters don't matter, override applications below
            RMContext     rmContext = MockRMContext(10, now - 20000);
            Configuration conf      = new YarnConfiguration();

            conf.SetInt(YarnConfiguration.RmStateStoreMaxCompletedApplications, 2);
            conf.SetInt(YarnConfiguration.RmMaxCompletedApplications, 2);
            TestAppManager.TestRMAppManager appMonitor = new TestAppManager.TestRMAppManager(
                this, rmContext, conf);
            // clear out applications map
            rmContext.GetRMApps().Clear();
            NUnit.Framework.Assert.AreEqual("map isn't empty", 0, rmContext.GetRMApps().Count
                                            );
            // 6 applications are in final state, 4 are not in final state.
            // / set with various finished states
            RMApp app = new MockRMApp(0, now - 20000, RMAppState.Killed);

            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(1, now - 200000, RMAppState.Failed);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(2, now - 30000, RMAppState.Finished);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(3, now - 20000, RMAppState.Running);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(4, now - 20000, RMAppState.New);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            // make sure it doesn't expire these since still running
            app = new MockRMApp(5, now - 10001, RMAppState.Killed);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(6, now - 30000, RMAppState.Accepted);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(7, now - 20000, RMAppState.Submitted);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(8, now - 10001, RMAppState.Failed);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            app = new MockRMApp(9, now - 20000, RMAppState.Failed);
            rmContext.GetRMApps()[app.GetApplicationId()] = app;
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect before", 10, rmContext.
                                            GetRMApps().Count);
            // add them to completed apps list
            AddToCompletedApps(appMonitor, rmContext);
            // shouldn't  have to many apps
            appMonitor.CheckAppNumCompletedLimit();
            NUnit.Framework.Assert.AreEqual("Number of apps incorrect after # completed check"
                                            , 6, rmContext.GetRMApps().Count);
            NUnit.Framework.Assert.AreEqual("Number of completed apps incorrect after check",
                                            2, appMonitor.GetCompletedAppsListSize());
            // 6 applications in final state, 4 of them are removed
            Org.Mockito.Mockito.Verify(rmContext.GetStateStore(), Org.Mockito.Mockito.Times(4
                                                                                            )).RemoveApplication(Matchers.IsA <RMApp>());
        }
示例#24
0
        public virtual void TestHeadroom()
        {
            CapacitySchedulerConfiguration csConf = new CapacitySchedulerConfiguration();

            csConf.SetUserLimit(CapacitySchedulerConfiguration.Root + "." + A, 25);
            SetupQueueConfiguration(csConf);
            YarnConfiguration        conf      = new YarnConfiguration();
            CapacitySchedulerContext csContext = Org.Mockito.Mockito.Mock <CapacitySchedulerContext
                                                                           >();

            Org.Mockito.Mockito.When(csContext.GetConfiguration()).ThenReturn(csConf);
            Org.Mockito.Mockito.When(csContext.GetConf()).ThenReturn(conf);
            Org.Mockito.Mockito.When(csContext.GetMinimumResourceCapability()).ThenReturn(Resources
                                                                                          .CreateResource(Gb));
            Org.Mockito.Mockito.When(csContext.GetMaximumResourceCapability()).ThenReturn(Resources
                                                                                          .CreateResource(16 * Gb));
            Org.Mockito.Mockito.When(csContext.GetApplicationComparator()).ThenReturn(CapacityScheduler
                                                                                      .applicationComparator);
            Org.Mockito.Mockito.When(csContext.GetQueueComparator()).ThenReturn(CapacityScheduler
                                                                                .queueComparator);
            Org.Mockito.Mockito.When(csContext.GetResourceCalculator()).ThenReturn(resourceCalculator
                                                                                   );
            Org.Mockito.Mockito.When(csContext.GetRMContext()).ThenReturn(rmContext);
            // Say cluster has 100 nodes of 16G each
            Org.Apache.Hadoop.Yarn.Api.Records.Resource clusterResource = Resources.CreateResource
                                                                              (100 * 16 * Gb);
            Org.Mockito.Mockito.When(csContext.GetClusterResource()).ThenReturn(clusterResource
                                                                                );
            IDictionary <string, CSQueue> queues = new Dictionary <string, CSQueue>();

            CapacityScheduler.ParseQueue(csContext, csConf, null, "root", queues, queues, TestUtils
                                         .spyHook);
            // Manipulate queue 'a'
            LeafQueue         queue         = TestLeafQueue.StubLeafQueue((LeafQueue)queues[A]);
            string            host_0        = "host_0";
            string            rack_0        = "rack_0";
            FiCaSchedulerNode node_0        = TestUtils.GetMockNode(host_0, rack_0, 0, 16 * Gb);
            string            user_0        = "user_0";
            string            user_1        = "user_1";
            RecordFactory     recordFactory = RecordFactoryProvider.GetRecordFactory(null);
            RMContext         rmContext     = TestUtils.GetMockRMContext();
            RMContext         spyRMContext  = Org.Mockito.Mockito.Spy(rmContext);
            ConcurrentMap <ApplicationId, RMApp> spyApps = Org.Mockito.Mockito.Spy(new ConcurrentHashMap
                                                                                   <ApplicationId, RMApp>());
            RMApp           rmApp             = Org.Mockito.Mockito.Mock <RMApp>();
            ResourceRequest amResourceRequest = Org.Mockito.Mockito.Mock <ResourceRequest>();

            Org.Apache.Hadoop.Yarn.Api.Records.Resource amResource = Resources.CreateResource
                                                                         (0, 0);
            Org.Mockito.Mockito.When(amResourceRequest.GetCapability()).ThenReturn(amResource
                                                                                   );
            Org.Mockito.Mockito.When(rmApp.GetAMResourceRequest()).ThenReturn(amResourceRequest
                                                                              );
            Org.Mockito.Mockito.DoReturn(rmApp).When(spyApps)[(ApplicationId)Matchers.Any()];
            Org.Mockito.Mockito.When(spyRMContext.GetRMApps()).ThenReturn(spyApps);
            Priority priority_1 = TestUtils.CreateMockPriority(1);
            // Submit first application with some resource-requests from user_0,
            // and check headroom
            ApplicationAttemptId appAttemptId_0_0 = TestUtils.GetMockApplicationAttemptId(0,
                                                                                          0);
            FiCaSchedulerApp app_0_0 = new FiCaSchedulerApp(appAttemptId_0_0, user_0, queue,
                                                            queue.GetActiveUsersManager(), spyRMContext);

            queue.SubmitApplicationAttempt(app_0_0, user_0);
            IList <ResourceRequest> app_0_0_requests = new AList <ResourceRequest>();

            app_0_0_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 *
                                                                     Gb, 2, true, priority_1, recordFactory));
            app_0_0.UpdateResourceRequests(app_0_0_requests);
            // Schedule to compute
            queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource
                                                                               ));
            Org.Apache.Hadoop.Yarn.Api.Records.Resource expectedHeadroom = Resources.CreateResource
                                                                               (10 * 16 * Gb, 1);
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom());
            // Submit second application from user_0, check headroom
            ApplicationAttemptId appAttemptId_0_1 = TestUtils.GetMockApplicationAttemptId(1,
                                                                                          0);
            FiCaSchedulerApp app_0_1 = new FiCaSchedulerApp(appAttemptId_0_1, user_0, queue,
                                                            queue.GetActiveUsersManager(), spyRMContext);

            queue.SubmitApplicationAttempt(app_0_1, user_0);
            IList <ResourceRequest> app_0_1_requests = new AList <ResourceRequest>();

            app_0_1_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 *
                                                                     Gb, 2, true, priority_1, recordFactory));
            app_0_1.UpdateResourceRequests(app_0_1_requests);
            // Schedule to compute
            queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource
                                                                               ));
            // Schedule to compute
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom());
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom());
            // no change
            // Submit first application from user_1, check  for new headroom
            ApplicationAttemptId appAttemptId_1_0 = TestUtils.GetMockApplicationAttemptId(2,
                                                                                          0);
            FiCaSchedulerApp app_1_0 = new FiCaSchedulerApp(appAttemptId_1_0, user_1, queue,
                                                            queue.GetActiveUsersManager(), spyRMContext);

            queue.SubmitApplicationAttempt(app_1_0, user_1);
            IList <ResourceRequest> app_1_0_requests = new AList <ResourceRequest>();

            app_1_0_requests.AddItem(TestUtils.CreateResourceRequest(ResourceRequest.Any, 1 *
                                                                     Gb, 2, true, priority_1, recordFactory));
            app_1_0.UpdateResourceRequests(app_1_0_requests);
            // Schedule to compute
            queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource
                                                                               ));
            // Schedule to compute
            expectedHeadroom = Resources.CreateResource(10 * 16 * Gb / 2, 1);
            // changes
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom());
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom());
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_1_0.GetHeadroom());
            // Now reduce cluster size and check for the smaller headroom
            clusterResource = Resources.CreateResource(90 * 16 * Gb);
            queue.AssignContainers(clusterResource, node_0, new ResourceLimits(clusterResource
                                                                               ));
            // Schedule to compute
            expectedHeadroom = Resources.CreateResource(9 * 16 * Gb / 2, 1);
            // changes
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_0.GetHeadroom());
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_0_1.GetHeadroom());
            NUnit.Framework.Assert.AreEqual(expectedHeadroom, app_1_0.GetHeadroom());
        }
示例#25
0
 public virtual void LogApplicationSummary(ApplicationId appId)
 {
     RMAppManager.ApplicationSummary.LogAppSummary(rmContext.GetRMApps()[appId]);
 }
示例#26
0
        public virtual void TestReleaseWhileRunning()
        {
            DrainDispatcher drainDispatcher = new DrainDispatcher();
            EventHandler <RMAppAttemptEvent> appAttemptEventHandler = Org.Mockito.Mockito.Mock
                                                                      <EventHandler>();
            EventHandler generic = Org.Mockito.Mockito.Mock <EventHandler>();

            drainDispatcher.Register(typeof(RMAppAttemptEventType), appAttemptEventHandler);
            drainDispatcher.Register(typeof(RMNodeEventType), generic);
            drainDispatcher.Init(new YarnConfiguration());
            drainDispatcher.Start();
            NodeId               nodeId       = BuilderUtils.NewNodeId("host", 3425);
            ApplicationId        appId        = BuilderUtils.NewApplicationId(1, 1);
            ApplicationAttemptId appAttemptId = BuilderUtils.NewApplicationAttemptId(appId, 1
                                                                                     );
            ContainerId containerId            = BuilderUtils.NewContainerId(appAttemptId, 1);
            ContainerAllocationExpirer expirer = Org.Mockito.Mockito.Mock <ContainerAllocationExpirer
                                                                           >();
            Resource  resource  = BuilderUtils.NewResource(512, 1);
            Priority  priority  = BuilderUtils.NewPriority(5);
            Container container = BuilderUtils.NewContainer(containerId, nodeId, "host:3465",
                                                            resource, priority, null);
            ConcurrentMap <ApplicationId, RMApp> rmApps = Org.Mockito.Mockito.Spy(new ConcurrentHashMap
                                                                                  <ApplicationId, RMApp>());
            RMApp rmApp = Org.Mockito.Mockito.Mock <RMApp>();

            Org.Mockito.Mockito.When(rmApp.GetRMAppAttempt((ApplicationAttemptId)Matchers.Any
                                                               ())).ThenReturn(null);
            Org.Mockito.Mockito.DoReturn(rmApp).When(rmApps)[(ApplicationId)Matchers.Any()];
            RMApplicationHistoryWriter writer = Org.Mockito.Mockito.Mock <RMApplicationHistoryWriter
                                                                          >();
            SystemMetricsPublisher publisher = Org.Mockito.Mockito.Mock <SystemMetricsPublisher
                                                                         >();
            RMContext rmContext = Org.Mockito.Mockito.Mock <RMContext>();

            Org.Mockito.Mockito.When(rmContext.GetDispatcher()).ThenReturn(drainDispatcher);
            Org.Mockito.Mockito.When(rmContext.GetContainerAllocationExpirer()).ThenReturn(expirer
                                                                                           );
            Org.Mockito.Mockito.When(rmContext.GetRMApplicationHistoryWriter()).ThenReturn(writer
                                                                                           );
            Org.Mockito.Mockito.When(rmContext.GetRMApps()).ThenReturn(rmApps);
            Org.Mockito.Mockito.When(rmContext.GetSystemMetricsPublisher()).ThenReturn(publisher
                                                                                       );
            Org.Mockito.Mockito.When(rmContext.GetYarnConfiguration()).ThenReturn(new YarnConfiguration
                                                                                      ());
            RMContainer rmContainer = new RMContainerImpl(container, appAttemptId, nodeId, "user"
                                                          , rmContext);

            NUnit.Framework.Assert.AreEqual(RMContainerState.New, rmContainer.GetState());
            NUnit.Framework.Assert.AreEqual(resource, rmContainer.GetAllocatedResource());
            NUnit.Framework.Assert.AreEqual(nodeId, rmContainer.GetAllocatedNode());
            NUnit.Framework.Assert.AreEqual(priority, rmContainer.GetAllocatedPriority());
            Org.Mockito.Mockito.Verify(writer).ContainerStarted(Matchers.Any <RMContainer>());
            Org.Mockito.Mockito.Verify(publisher).ContainerCreated(Matchers.Any <RMContainer>(
                                                                       ), Matchers.AnyLong());
            rmContainer.Handle(new RMContainerEvent(containerId, RMContainerEventType.Start));
            drainDispatcher.Await();
            NUnit.Framework.Assert.AreEqual(RMContainerState.Allocated, rmContainer.GetState(
                                                ));
            rmContainer.Handle(new RMContainerEvent(containerId, RMContainerEventType.Acquired
                                                    ));
            drainDispatcher.Await();
            NUnit.Framework.Assert.AreEqual(RMContainerState.Acquired, rmContainer.GetState()
                                            );
            rmContainer.Handle(new RMContainerEvent(containerId, RMContainerEventType.Launched
                                                    ));
            drainDispatcher.Await();
            NUnit.Framework.Assert.AreEqual(RMContainerState.Running, rmContainer.GetState());
            NUnit.Framework.Assert.AreEqual("http://host:3465/node/containerlogs/container_1_0001_01_000001/user"
                                            , rmContainer.GetLogURL());
            // In RUNNING state. Verify RELEASED and associated actions.
            Org.Mockito.Mockito.Reset(appAttemptEventHandler);
            ContainerStatus containerStatus = SchedulerUtils.CreateAbnormalContainerStatus(containerId
                                                                                           , SchedulerUtils.ReleasedContainer);

            rmContainer.Handle(new RMContainerFinishedEvent(containerId, containerStatus, RMContainerEventType
                                                            .Released));
            drainDispatcher.Await();
            NUnit.Framework.Assert.AreEqual(RMContainerState.Released, rmContainer.GetState()
                                            );
            NUnit.Framework.Assert.AreEqual(SchedulerUtils.ReleasedContainer, rmContainer.GetDiagnosticsInfo
                                                ());
            NUnit.Framework.Assert.AreEqual(ContainerExitStatus.Aborted, rmContainer.GetContainerExitStatus
                                                ());
            NUnit.Framework.Assert.AreEqual(ContainerState.Complete, rmContainer.GetContainerState
                                                ());
            Org.Mockito.Mockito.Verify(writer).ContainerFinished(Matchers.Any <RMContainer>());
            Org.Mockito.Mockito.Verify(publisher).ContainerFinished(Matchers.Any <RMContainer>
                                                                        (), Matchers.AnyLong());
            ArgumentCaptor <RMAppAttemptContainerFinishedEvent> captor = ArgumentCaptor.ForClass
                                                                         <RMAppAttemptContainerFinishedEvent>();

            Org.Mockito.Mockito.Verify(appAttemptEventHandler).Handle(captor.Capture());
            RMAppAttemptContainerFinishedEvent cfEvent = captor.GetValue();

            NUnit.Framework.Assert.AreEqual(appAttemptId, cfEvent.GetApplicationAttemptId());
            NUnit.Framework.Assert.AreEqual(containerStatus, cfEvent.GetContainerStatus());
            NUnit.Framework.Assert.AreEqual(RMAppAttemptEventType.ContainerFinished, cfEvent.
                                            GetType());
            // In RELEASED state. A FINIHSED event may come in.
            rmContainer.Handle(new RMContainerFinishedEvent(containerId, SchedulerUtils.CreateAbnormalContainerStatus
                                                                (containerId, "FinishedContainer"), RMContainerEventType.Finished));
            NUnit.Framework.Assert.AreEqual(RMContainerState.Released, rmContainer.GetState()
                                            );
        }