/// <summary>Finds the log file with the given filename for the given container.</summary> /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/> public static FilePath GetContainerLogFile(ContainerId containerId, string fileName , string remoteUser, Context context) { Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container container = context.GetContainers()[containerId]; Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Application.Application application = GetApplicationForContainer(containerId, context); CheckAccess(remoteUser, application, context); if (container != null) { CheckState(container.GetContainerState()); } try { LocalDirsHandlerService dirsHandler = context.GetLocalDirsHandler(); string relativeContainerLogDir = ContainerLaunch.GetRelativeContainerLogDir(application .GetAppId().ToString(), containerId.ToString()); Path logPath = dirsHandler.GetLogPathToRead(relativeContainerLogDir + Path.Separator + fileName); URI logPathURI = new FilePath(logPath.ToString()).ToURI(); FilePath logFile = new FilePath(logPathURI.GetPath()); return(logFile); } catch (IOException e) { Log.Warn("Failed to find log file", e); throw new NotFoundException("Cannot find this log on the local disk."); } }
public virtual void TestLogFileWithDriveLetter() { ContainerImpl container = Org.Mockito.Mockito.Mock <ContainerImpl>(); ApplicationIdPBImpl appId = Org.Mockito.Mockito.Mock <ApplicationIdPBImpl>(); Org.Mockito.Mockito.When(appId.ToString()).ThenReturn("appId"); Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Application.Application app = Org.Mockito.Mockito.Mock <Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Application.Application >(); Org.Mockito.Mockito.When(app.GetAppId()).ThenReturn(appId); ApplicationAttemptIdPBImpl appAttemptId = Org.Mockito.Mockito.Mock <ApplicationAttemptIdPBImpl >(); Org.Mockito.Mockito.When(appAttemptId.GetApplicationId()).ThenReturn(appId); ConcurrentMap <ApplicationId, Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Application.Application > applications = new ConcurrentHashMap <ApplicationId, Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Application.Application >(); applications[appId] = app; ContainerId containerId = Org.Mockito.Mockito.Mock <ContainerIdPBImpl>(); Org.Mockito.Mockito.When(containerId.ToString()).ThenReturn("containerId"); Org.Mockito.Mockito.When(containerId.GetApplicationAttemptId()).ThenReturn(appAttemptId ); ConcurrentMap <ContainerId, Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container > containers = new ConcurrentHashMap <ContainerId, Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container >(); containers[containerId] = container; LocalDirsHandlerService localDirs = Org.Mockito.Mockito.Mock <LocalDirsHandlerService >(); Org.Mockito.Mockito.When(localDirs.GetLogPathToRead("appId" + Path.Separator + "containerId" + Path.Separator + "fileName")).ThenReturn(new Path("F:/nmlogs/appId/containerId/fileName" )); NodeManager.NMContext context = Org.Mockito.Mockito.Mock <NodeManager.NMContext>(); Org.Mockito.Mockito.When(context.GetLocalDirsHandler()).ThenReturn(localDirs); Org.Mockito.Mockito.When(context.GetApplications()).ThenReturn(applications); Org.Mockito.Mockito.When(context.GetContainers()).ThenReturn(containers); FilePath logFile = ContainerLogsUtils.GetContainerLogFile(containerId, "fileName" , null, context); NUnit.Framework.Assert.IsTrue("logFile lost drive letter " + logFile, logFile.ToString ().IndexOf("F:" + FilePath.separator + "nmlogs") > -1); }