/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public virtual ReleaseSharedCacheResourceResponse Release(ReleaseSharedCacheResourceRequest
                                                                  request)
        {
            ReleaseSharedCacheResourceResponse response = recordFactory.NewRecordInstance <ReleaseSharedCacheResourceResponse
                                                                                           >();
            UserGroupInformation callerUGI;

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

            if (removed)
            {
                this.metrics.IncCacheRelease();
            }
            return(response);
        }
Exemple #2
0
        public virtual void TestRelease_MissingEntry()
        {
            long releases = ClientSCMMetrics.GetInstance().GetCacheReleases();
            ReleaseSharedCacheResourceRequest request = recordFactory.NewRecordInstance <ReleaseSharedCacheResourceRequest
                                                                                         >();

            request.SetResourceKey("key2");
            request.SetAppId(CreateAppId(2, 2L));
            clientSCMProxy.Release(request);
            NUnit.Framework.Assert.IsNotNull(store.GetResourceReferences("key2"));
            NUnit.Framework.Assert.AreEqual(0, store.GetResourceReferences("key2").Count);
            NUnit.Framework.Assert.AreEqual("Client SCM metrics were updated when a release did not happen."
                                            , 0, ClientSCMMetrics.GetInstance().GetCacheReleases() - releases);
        }
		/// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
		/// <exception cref="System.IO.IOException"/>
		public virtual ReleaseSharedCacheResourceResponse Release(ReleaseSharedCacheResourceRequest
			 request)
		{
			YarnServiceProtos.ReleaseSharedCacheResourceRequestProto requestProto = ((ReleaseSharedCacheResourceRequestPBImpl
				)request).GetProto();
			try
			{
				return new ReleaseSharedCacheResourceResponsePBImpl(proxy.Release(null, requestProto
					));
			}
			catch (ServiceException e)
			{
				RPCUtil.UnwrapAndThrowException(e);
				return null;
			}
		}
Exemple #4
0
        public virtual void TestRelease_ExistingEntry_NonExistantAppId()
        {
            // Pre-populate the SCM with one cache entry
            store.AddResource("key1", "foo.jar");
            store.AddResourceReference("key1", new SharedCacheResourceReference(CreateAppId(1
                                                                                            , 1L), "user"));
            NUnit.Framework.Assert.AreEqual(1, store.GetResourceReferences("key1").Count);
            long releases = ClientSCMMetrics.GetInstance().GetCacheReleases();
            ReleaseSharedCacheResourceRequest request = recordFactory.NewRecordInstance <ReleaseSharedCacheResourceRequest
                                                                                         >();

            request.SetResourceKey("key1");
            request.SetAppId(CreateAppId(2, 2L));
            clientSCMProxy.Release(request);
            NUnit.Framework.Assert.AreEqual(1, store.GetResourceReferences("key1").Count);
            NUnit.Framework.Assert.AreEqual("Client SCM metrics were updated when a release did not happen"
                                            , 0, ClientSCMMetrics.GetInstance().GetCacheReleases() - releases);
        }
Exemple #5
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        public override void Release(ApplicationId applicationId, string resourceKey)
        {
            ReleaseSharedCacheResourceRequest request = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord
                                                        <ReleaseSharedCacheResourceRequest>();

            request.SetAppId(applicationId);
            request.SetResourceKey(resourceKey);
            try
            {
                // We do not care about the response because it is empty.
                this.scmClient.Release(request);
            }
            catch (Exception e)
            {
                // Just catching IOException isn't enough.
                // RPC call can throw ConnectionException.
                throw new YarnException(e);
            }
        }
Exemple #6
0
        public virtual void TestRelease_ExistingEntry_WithAppId()
        {
            // 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 releases = ClientSCMMetrics.GetInstance().GetCacheReleases();
            ReleaseSharedCacheResourceRequest request = recordFactory.NewRecordInstance <ReleaseSharedCacheResourceRequest
                                                                                         >();

            request.SetResourceKey("key1");
            request.SetAppId(CreateAppId(1, 1L));
            clientSCMProxy.Release(request);
            NUnit.Framework.Assert.AreEqual(0, store.GetResourceReferences("key1").Count);
            NUnit.Framework.Assert.AreEqual("Client SCM metrics aren't updated.", 1, ClientSCMMetrics
                                            .GetInstance().GetCacheReleases() - releases);
        }