Ejemplo n.º 1
0
        public virtual void TestUse_ExistingEntry_DupId()
        {
            // Pre-populate the SCM with one cache entry
            store.AddResource("key1", "foo.jar");
            UserGroupInformation testUGI = UserGroupInformation.GetCurrentUser();

            store.AddResourceReference("key1", new SharedCacheResourceReference(CreateAppId(1
                                                                                            , 1L), testUGI.GetShortUserName()));
            NUnit.Framework.Assert.AreEqual(1, store.GetResourceReferences("key1").Count);
            long hits = ClientSCMMetrics.GetInstance().GetCacheHits();
            // Add a new duplicate appId
            UseSharedCacheResourceRequest request = recordFactory.NewRecordInstance <UseSharedCacheResourceRequest
                                                                                     >();

            request.SetResourceKey("key1");
            request.SetAppId(CreateAppId(1, 1L));
            // Expecting default depth of 3 under the shared cache root dir
            string expectedPath = testDir.GetAbsolutePath() + "/k/e/y/key1/foo.jar";

            NUnit.Framework.Assert.AreEqual(expectedPath, clientSCMProxy.Use(request).GetPath
                                                ());
            NUnit.Framework.Assert.AreEqual(1, store.GetResourceReferences("key1").Count);
            NUnit.Framework.Assert.AreEqual("Client SCM metrics aren't updated.", 1, ClientSCMMetrics
                                            .GetInstance().GetCacheHits() - hits);
        }
Ejemplo n.º 2
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual UseSharedCacheResourceResponse Use(UseSharedCacheResourceRequest request
                                                          )
        {
            UseSharedCacheResourceResponse response = recordFactory.NewRecordInstance <UseSharedCacheResourceResponse
                                                                                       >();
            UserGroupInformation callerUGI;

            try
            {
                callerUGI = UserGroupInformation.GetCurrentUser();
            }
            catch (IOException ie)
            {
                Log.Info("Error getting UGI ", ie);
                throw RPCUtil.GetRemoteException(ie);
            }
            string fileName = this.store.AddResourceReference(request.GetResourceKey(), new SharedCacheResourceReference
                                                                  (request.GetAppId(), callerUGI.GetShortUserName()));

            if (fileName != null)
            {
                response.SetPath(GetCacheEntryFilePath(request.GetResourceKey(), fileName));
                this.metrics.IncCacheHitCount();
            }
            else
            {
                this.metrics.IncCacheMissCount();
            }
            return(response);
        }
Ejemplo n.º 3
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        public override Path Use(ApplicationId applicationId, string resourceKey)
        {
            Path resourcePath = null;
            UseSharedCacheResourceRequest request = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord
                                                    <UseSharedCacheResourceRequest>();

            request.SetAppId(applicationId);
            request.SetResourceKey(resourceKey);
            try
            {
                UseSharedCacheResourceResponse response = this.scmClient.Use(request);
                if (response != null && response.GetPath() != null)
                {
                    resourcePath = new Path(response.GetPath());
                }
            }
            catch (Exception e)
            {
                // Just catching IOException isn't enough.
                // RPC call can throw ConnectionException.
                // We don't handle different exceptions separately at this point.
                throw new YarnException(e);
            }
            return(resourcePath);
        }
Ejemplo n.º 4
0
        public virtual void TestUse_MissingEntry()
        {
            long misses = ClientSCMMetrics.GetInstance().GetCacheMisses();
            UseSharedCacheResourceRequest request = recordFactory.NewRecordInstance <UseSharedCacheResourceRequest
                                                                                     >();

            request.SetResourceKey("key1");
            request.SetAppId(CreateAppId(1, 1L));
            NUnit.Framework.Assert.IsNull(clientSCMProxy.Use(request).GetPath());
            NUnit.Framework.Assert.AreEqual("Client SCM metrics aren't updated.", 1, ClientSCMMetrics
                                            .GetInstance().GetCacheMisses() - misses);
        }
		/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
		/// <exception cref="System.IO.IOException"/>
		public virtual UseSharedCacheResourceResponse Use(UseSharedCacheResourceRequest request
			)
		{
			YarnServiceProtos.UseSharedCacheResourceRequestProto requestProto = ((UseSharedCacheResourceRequestPBImpl
				)request).GetProto();
			try
			{
				return new UseSharedCacheResourceResponsePBImpl(proxy.Use(null, requestProto));
			}
			catch (ServiceException e)
			{
				RPCUtil.UnwrapAndThrowException(e);
				return null;
			}
		}