/// <exception cref="System.IO.IOException"/>
        protected internal virtual void LocalizeFiles(LocalizationProtocol nodemanager, CompletionService
                                                      <Path> cs, UserGroupInformation ugi)
        {
            while (true)
            {
                try
                {
                    LocalizerStatus            status   = CreateStatus();
                    LocalizerHeartbeatResponse response = nodemanager.Heartbeat(status);
                    switch (response.GetLocalizerAction())
                    {
                    case LocalizerAction.Live:
                    {
                        IList <ResourceLocalizationSpec> newRsrcs = response.GetResourceSpecs();
                        foreach (ResourceLocalizationSpec newRsrc in newRsrcs)
                        {
                            if (!pendingResources.Contains(newRsrc.GetResource()))
                            {
                                pendingResources[newRsrc.GetResource()] = cs.Submit(Download(new Path(newRsrc.GetDestinationDirectory
                                                                                                          ().GetFile()), newRsrc.GetResource(), ugi));
                            }
                        }
                        break;
                    }

                    case LocalizerAction.Die:
                    {
                        // killall running localizations
                        foreach (Future <Path> pending in pendingResources.Values)
                        {
                            pending.Cancel(true);
                        }
                        status = CreateStatus();
                        // ignore response
                        try
                        {
                            nodemanager.Heartbeat(status);
                        }
                        catch (YarnException)
                        {
                        }
                        return;
                    }
                    }
                    cs.Poll(1000, TimeUnit.Milliseconds);
                }
                catch (Exception)
                {
                    return;
                }
                catch (YarnException)
                {
                    // TODO cleanup
                    return;
                }
            }
        }
        Heartbeat(RpcController controller, YarnServerNodemanagerServiceProtos.LocalizerStatusProto
                  proto)
        {
            LocalizerStatusPBImpl request = new LocalizerStatusPBImpl(proto);

            try
            {
                LocalizerHeartbeatResponse response = real.Heartbeat(request);
                return(((LocalizerHeartbeatResponsePBImpl)response).GetProto());
            }
            catch (YarnException e)
            {
                throw new ServiceException(e);
            }
            catch (IOException e)
            {
                throw new ServiceException(e);
            }
        }
        public virtual void TestLocalizerRPC()
        {
            IPEndPoint locAddr = new IPEndPoint("0.0.0.0", 8040);

            TestPBLocalizerRPC.LocalizerService server = new TestPBLocalizerRPC.LocalizerService
                                                             (locAddr);
            try
            {
                server.Start();
                Configuration        conf   = new Configuration();
                YarnRPC              rpc    = YarnRPC.Create(conf);
                LocalizationProtocol client = (LocalizationProtocol)rpc.GetProxy(typeof(LocalizationProtocol
                                                                                        ), locAddr, conf);
                LocalizerStatus status = recordFactory.NewRecordInstance <LocalizerStatus>();
                status.SetLocalizerId("localizer0");
                LocalizerHeartbeatResponse response = client.Heartbeat(status);
                NUnit.Framework.Assert.AreEqual(DieHBResponse(), response);
            }
            finally
            {
                server.Stop();
            }
            NUnit.Framework.Assert.IsTrue(true);
        }
Exemple #4
0
        public virtual void TestContainerLocalizerMain()
        {
            FileContext fs = FileContext.GetLocalFSFileContext();

            spylfs = Org.Mockito.Mockito.Spy(fs.GetDefaultFileSystem());
            ContainerLocalizer localizer = SetupContainerLocalizerForTest();
            // verify created cache
            IList <Path> privCacheList = new AList <Path>();
            IList <Path> appCacheList  = new AList <Path>();

            foreach (Path p in localDirs)
            {
                Path @base     = new Path(new Path(p, ContainerLocalizer.Usercache), appUser);
                Path privcache = new Path(@base, ContainerLocalizer.Filecache);
                privCacheList.AddItem(privcache);
                Path appDir   = new Path(@base, new Path(ContainerLocalizer.Appcache, appId));
                Path appcache = new Path(appDir, ContainerLocalizer.Filecache);
                appCacheList.AddItem(appcache);
            }
            // mock heartbeat responses from NM
            ResourceLocalizationSpec rsrcA = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);
            ResourceLocalizationSpec rsrcB = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);
            ResourceLocalizationSpec rsrcC = GetMockRsrc(random, LocalResourceVisibility.Application
                                                         , appCacheList[0]);
            ResourceLocalizationSpec rsrcD = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);

            Org.Mockito.Mockito.When(nmProxy.Heartbeat(Matchers.IsA <LocalizerStatus>())).ThenReturn
                (new MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections.SingletonList
                                                        (rsrcA))).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections
                                                                                                                .SingletonList(rsrcB))).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction
                                                                                                                                                                                      .Live, Sharpen.Collections.SingletonList(rsrcC))).ThenReturn(new MockLocalizerHeartbeatResponse
                                                                                                                                                                                                                                                       (LocalizerAction.Live, Sharpen.Collections.SingletonList(rsrcD))).ThenReturn(new
                                                                                                                                                                                                                                                                                                                                    MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections.EmptyList
                                                                                                                                                                                                                                                                                                                                                                   <ResourceLocalizationSpec>())).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction
                                                                                                                                                                                                                                                                                                                                                                                                                                                .Die, null));
            LocalResource tRsrcA = rsrcA.GetResource();
            LocalResource tRsrcB = rsrcB.GetResource();
            LocalResource tRsrcC = rsrcC.GetResource();
            LocalResource tRsrcD = rsrcD.GetResource();

            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcA.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcA), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcB.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcB), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcC.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcC), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcD.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcD), Matchers.IsA <UserGroupInformation>());
            // run localization
            NUnit.Framework.Assert.AreEqual(0, localizer.RunLocalization(nmAddr));
            foreach (Path p_1 in localDirs)
            {
                Path @base     = new Path(new Path(p_1, ContainerLocalizer.Usercache), appUser);
                Path privcache = new Path(@base, ContainerLocalizer.Filecache);
                // $x/usercache/$user/filecache
                Org.Mockito.Mockito.Verify(spylfs).Mkdir(Matchers.Eq(privcache), Matchers.Eq(CacheDirPerm
                                                                                             ), Matchers.Eq(false));
                Path appDir = new Path(@base, new Path(ContainerLocalizer.Appcache, appId));
                // $x/usercache/$user/appcache/$appId/filecache
                Path appcache = new Path(appDir, ContainerLocalizer.Filecache);
                Org.Mockito.Mockito.Verify(spylfs).Mkdir(Matchers.Eq(appcache), Matchers.Eq(CacheDirPerm
                                                                                            ), Matchers.Eq(false));
            }
            // verify tokens read at expected location
            Org.Mockito.Mockito.Verify(spylfs).Open(tokenPath);
            // verify downloaded resources reported to NM
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcA.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcB.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcC.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcD.GetResource())));
            // verify all HB use localizerID provided
            Org.Mockito.Mockito.Verify(nmProxy, Org.Mockito.Mockito.Never()).Heartbeat(Matchers.ArgThat
                                                                                           (new _ArgumentMatcher_193()));
        }