Exemplo n.º 1
0
 public virtual void ReplaceIfExist(TimelineDomain domain)
 {
     if (aclExts.Contains(domain.GetId()))
     {
         PutDomainIntoCache(domain);
     }
 }
Exemplo n.º 2
0
        private TimelineACLsManager.AccessControlListExt PutDomainIntoCache(TimelineDomain
                                                                            domain)
        {
            IDictionary <ApplicationAccessType, AccessControlList> acls = new Dictionary <ApplicationAccessType
                                                                                          , AccessControlList>(2);

            acls[ApplicationAccessType.ViewApp] = new AccessControlList(StringHelper.Cjoin(domain
                                                                                           .GetReaders()));
            acls[ApplicationAccessType.ModifyApp] = new AccessControlList(StringHelper.Cjoin(
                                                                              domain.GetWriters()));
            TimelineACLsManager.AccessControlListExt aclExt = new TimelineACLsManager.AccessControlListExt
                                                                  (domain.GetOwner(), acls);
            aclExts[domain.GetId()] = aclExt;
            return(aclExt);
        }
Exemplo n.º 3
0
        /// <exception cref="System.IO.IOException"/>
        public virtual void Put(TimelineDomain domain)
        {
            TimelineDomain domainToReplace  = domainsById[domain.GetId()];
            long           currentTimestamp = Runtime.CurrentTimeMillis();
            TimelineDomain domainToStore    = CreateTimelineDomain(domain.GetId(), domain.GetDescription
                                                                       (), domain.GetOwner(), domain.GetReaders(), domain.GetWriters(), (domainToReplace
                                                                                                                                         == null ? currentTimestamp : domainToReplace.GetCreatedTime()), currentTimestamp
                                                                   );

            domainsById[domainToStore.GetId()] = domainToStore;
            ICollection <TimelineDomain> domainsByOneOwner = domainsByOwner[domainToStore.GetOwner
                                                                                ()];

            if (domainsByOneOwner == null)
            {
                domainsByOneOwner = new HashSet <TimelineDomain>();
                domainsByOwner[domainToStore.GetOwner()] = domainsByOneOwner;
            }
            if (domainToReplace != null)
            {
                domainsByOneOwner.Remove(domainToReplace);
            }
            domainsByOneOwner.AddItem(domainToStore);
        }
Exemplo n.º 4
0
        /// <exception cref="System.IO.IOException"/>
        public virtual TimelineDomain GetDomain(string domainId)
        {
            TimelineDomain domain = domainsById[domainId];

            if (domain == null)
            {
                return(null);
            }
            else
            {
                return(CreateTimelineDomain(domain.GetId(), domain.GetDescription(), domain.GetOwner
                                                (), domain.GetReaders(), domain.GetWriters(), domain.GetCreatedTime(), domain.GetModifiedTime
                                                ()));
            }
        }
Exemplo n.º 5
0
        /// <summary>Add or update an domain.</summary>
        /// <remarks>
        /// Add or update an domain. If the domain already exists, only the owner
        /// and the admin can update it.
        /// </remarks>
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual void PutDomain(TimelineDomain domain, UserGroupInformation callerUGI
                                      )
        {
            TimelineDomain existingDomain = store.GetDomain(domain.GetId());

            if (existingDomain != null)
            {
                if (!timelineACLsManager.CheckAccess(callerUGI, existingDomain))
                {
                    throw new YarnException(callerUGI.GetShortUserName() + " is not allowed to override an existing domain "
                                            + existingDomain.GetId());
                }
                // Set it again in case ACLs are not enabled: The domain can be
                // modified by every body, but the owner is not changed.
                domain.SetOwner(existingDomain.GetOwner());
            }
            store.Put(domain);
            // If the domain exists already, it is likely to be in the cache.
            // We need to invalidate it.
            if (existingDomain != null)
            {
                timelineACLsManager.ReplaceIfExist(domain);
            }
        }
Exemplo n.º 6
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual bool CheckAccess(UserGroupInformation callerUGI, TimelineDomain domain
                                        )
        {
            if (Log.IsDebugEnabled())
            {
                Log.Debug("Verifying the access of " + (callerUGI == null ? null : callerUGI.GetShortUserName
                                                            ()) + " on the timeline domain " + domain);
            }
            if (!adminAclsManager.AreACLsEnabled())
            {
                return(true);
            }
            string owner = domain.GetOwner();

            if (owner == null || owner.Length == 0)
            {
                throw new YarnException("Owner information of the timeline domain " + domain.GetId
                                            () + " is corrupted.");
            }
            if (callerUGI != null && (adminAclsManager.IsAdmin(callerUGI) || callerUGI.GetShortUserName
                                          ().Equals(owner)))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 7
0
        /// <exception cref="System.Exception"/>
        public virtual void TestDSShell(bool haveDomain)
        {
            string[] args = new string[] { "--jar", AppmasterJar, "--num_containers", "2", "--shell_command"
                                           , Shell.Windows ? "dir" : "ls", "--master_memory", "512", "--master_vcores", "2"
                                           , "--container_memory", "128", "--container_vcores", "1" };
            if (haveDomain)
            {
                string[] domainArgs = new string[] { "--domain", "TEST_DOMAIN", "--view_acls", "reader_user reader_group"
                                                     , "--modify_acls", "writer_user writer_group", "--create" };
                IList <string> argsList = new AList <string>(Arrays.AsList(args));
                Sharpen.Collections.AddAll(argsList, Arrays.AsList(domainArgs));
                args = Sharpen.Collections.ToArray(argsList, new string[argsList.Count]);
            }
            Log.Info("Initializing DS Client");
            Client client      = new Client(new Configuration(yarnCluster.GetConfig()));
            bool   initSuccess = client.Init(args);

            NUnit.Framework.Assert.IsTrue(initSuccess);
            Log.Info("Running DS Client");
            AtomicBoolean result = new AtomicBoolean(false);

            Sharpen.Thread t = new _Thread_194(result, client);
            t.Start();
            YarnClient yarnClient = YarnClient.CreateYarnClient();

            yarnClient.Init(new Configuration(yarnCluster.GetConfig()));
            yarnClient.Start();
            string hostName     = NetUtils.GetHostname();
            bool   verified     = false;
            string errorMessage = string.Empty;

            while (!verified)
            {
                IList <ApplicationReport> apps = yarnClient.GetApplications();
                if (apps.Count == 0)
                {
                    Sharpen.Thread.Sleep(10);
                    continue;
                }
                ApplicationReport appReport = apps[0];
                if (appReport.GetHost().Equals("N/A"))
                {
                    Sharpen.Thread.Sleep(10);
                    continue;
                }
                errorMessage = "Expected host name to start with '" + hostName + "', was '" + appReport
                               .GetHost() + "'. Expected rpc port to be '-1', was '" + appReport.GetRpcPort() +
                               "'.";
                if (CheckHostname(appReport.GetHost()) && appReport.GetRpcPort() == -1)
                {
                    verified = true;
                }
                if (appReport.GetYarnApplicationState() == YarnApplicationState.Finished)
                {
                    break;
                }
            }
            NUnit.Framework.Assert.IsTrue(errorMessage, verified);
            t.Join();
            Log.Info("Client run completed. Result=" + result);
            NUnit.Framework.Assert.IsTrue(result.Get());
            TimelineDomain domain = null;

            if (haveDomain)
            {
                domain = yarnCluster.GetApplicationHistoryServer().GetTimelineStore().GetDomain("TEST_DOMAIN"
                                                                                                );
                NUnit.Framework.Assert.IsNotNull(domain);
                NUnit.Framework.Assert.AreEqual("reader_user reader_group", domain.GetReaders());
                NUnit.Framework.Assert.AreEqual("writer_user writer_group", domain.GetWriters());
            }
            TimelineEntities entitiesAttempts = yarnCluster.GetApplicationHistoryServer().GetTimelineStore
                                                    ().GetEntities(ApplicationMaster.DSEntity.DsAppAttempt.ToString(), null, null, null
                                                                   , null, null, null, null, null, null);

            NUnit.Framework.Assert.IsNotNull(entitiesAttempts);
            NUnit.Framework.Assert.AreEqual(1, entitiesAttempts.GetEntities().Count);
            NUnit.Framework.Assert.AreEqual(2, entitiesAttempts.GetEntities()[0].GetEvents().
                                            Count);
            NUnit.Framework.Assert.AreEqual(entitiesAttempts.GetEntities()[0].GetEntityType()
                                            .ToString(), ApplicationMaster.DSEntity.DsAppAttempt.ToString());
            if (haveDomain)
            {
                NUnit.Framework.Assert.AreEqual(domain.GetId(), entitiesAttempts.GetEntities()[0]
                                                .GetDomainId());
            }
            else
            {
                NUnit.Framework.Assert.AreEqual("DEFAULT", entitiesAttempts.GetEntities()[0].GetDomainId
                                                    ());
            }
            TimelineEntities entities = yarnCluster.GetApplicationHistoryServer().GetTimelineStore
                                            ().GetEntities(ApplicationMaster.DSEntity.DsContainer.ToString(), null, null, null
                                                           , null, null, null, null, null, null);

            NUnit.Framework.Assert.IsNotNull(entities);
            NUnit.Framework.Assert.AreEqual(2, entities.GetEntities().Count);
            NUnit.Framework.Assert.AreEqual(entities.GetEntities()[0].GetEntityType().ToString
                                                (), ApplicationMaster.DSEntity.DsContainer.ToString());
            if (haveDomain)
            {
                NUnit.Framework.Assert.AreEqual(domain.GetId(), entities.GetEntities()[0].GetDomainId
                                                    ());
            }
            else
            {
                NUnit.Framework.Assert.AreEqual("DEFAULT", entities.GetEntities()[0].GetDomainId(
                                                    ));
            }
        }