public virtual void TestManyDfsClientsWhereSomeNotOpen() { // First DFSClient has no files open so doesn't renew leases. DFSClient mockClient1 = CreateMockClient(); Org.Mockito.Mockito.DoReturn(false).When(mockClient1).RenewLease(); NUnit.Framework.Assert.AreSame(renewer, LeaseRenewer.GetInstance(FakeAuthority, FakeUgiA , mockClient1)); // Set up a file so that we start renewing our lease. DFSOutputStream mockStream1 = Org.Mockito.Mockito.Mock <DFSOutputStream>(); long fileId = 456L; renewer.Put(fileId, mockStream1, mockClient1); // Second DFSClient does renew lease DFSClient mockClient2 = CreateMockClient(); Org.Mockito.Mockito.DoReturn(true).When(mockClient2).RenewLease(); NUnit.Framework.Assert.AreSame(renewer, LeaseRenewer.GetInstance(FakeAuthority, FakeUgiA , mockClient2)); // Set up a file so that we start renewing our lease. DFSOutputStream mockStream2 = Org.Mockito.Mockito.Mock <DFSOutputStream>(); renewer.Put(fileId, mockStream2, mockClient2); // Wait for lease to get renewed GenericTestUtils.WaitFor(new _Supplier_156(mockClient1, mockClient2), 100, 10000); // should not throw! renewer.CloseFile(fileId, mockClient1); renewer.CloseFile(fileId, mockClient2); }
/// <summary>Get a renewer.</summary> private LeaseRenewer Get(string authority, UserGroupInformation ugi) { lock (this) { LeaseRenewer.Factory.Key k = new LeaseRenewer.Factory.Key(authority, ugi); LeaseRenewer r = renewers[k]; if (r == null) { r = new LeaseRenewer(k); renewers[k] = r; } return(r); } }
/// <summary>Remove the given renewer.</summary> private void Remove(LeaseRenewer r) { lock (this) { LeaseRenewer stored = renewers[r.factorykey]; //Since a renewer may expire, the stored renewer can be different. if (r == stored) { if (!r.ClientsRunning()) { Sharpen.Collections.Remove(renewers, r.factorykey); } } } }
public virtual void TestInstanceSharing() { // Two lease renewers with the same UGI should return // the same instance LeaseRenewer lr = LeaseRenewer.GetInstance(FakeAuthority, FakeUgiA, MockDfsclient ); LeaseRenewer lr2 = LeaseRenewer.GetInstance(FakeAuthority, FakeUgiA, MockDfsclient ); NUnit.Framework.Assert.AreSame(lr, lr2); // But a different UGI should return a different instance LeaseRenewer lr3 = LeaseRenewer.GetInstance(FakeAuthority, FakeUgiB, MockDfsclient ); NUnit.Framework.Assert.AreNotSame(lr, lr3); // A different authority with same UGI should also be a different // instance. LeaseRenewer lr4 = LeaseRenewer.GetInstance("someOtherAuthority", FakeUgiB, MockDfsclient ); NUnit.Framework.Assert.AreNotSame(lr, lr4); NUnit.Framework.Assert.AreNotSame(lr3, lr4); }
public _Runnable_296(LeaseRenewer _enclosing, int id) { this._enclosing = _enclosing; this.id = id; }
public virtual void SetupMocksAndRenewer() { MockDfsclient = CreateMockClient(); renewer = LeaseRenewer.GetInstance(FakeAuthority, FakeUgiA, MockDfsclient); renewer.SetGraceSleepPeriod(FastGracePeriod); }
public virtual void TestLeaseAbort() { MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).NumDataNodes(2).Build(); try { cluster.WaitActive(); NamenodeProtocols preSpyNN = cluster.GetNameNodeRpc(); NamenodeProtocols spyNN = Org.Mockito.Mockito.Spy(preSpyNN); DFSClient dfs = new DFSClient(null, spyNN, conf, null); byte[] buf = new byte[1024]; FSDataOutputStream c_out = CreateFsOut(dfs, dirString + "c"); c_out.Write(buf, 0, 1024); c_out.Close(); DFSInputStream c_in = dfs.Open(dirString + "c"); FSDataOutputStream d_out = CreateFsOut(dfs, dirString + "d"); // stub the renew method. Org.Mockito.Mockito.DoThrow(new RemoteException(typeof(SecretManager.InvalidToken ).FullName, "Your token is worthless")).When(spyNN).RenewLease(Matchers.AnyString ()); // We don't need to wait the lease renewer thread to act. // call renewLease() manually. // make it look like the soft limit has been exceeded. LeaseRenewer originalRenewer = dfs.GetLeaseRenewer(); dfs.lastLeaseRenewal = Time.MonotonicNow() - HdfsConstants.LeaseSoftlimitPeriod - 1000; try { dfs.RenewLease(); } catch (IOException) { } // Things should continue to work it passes hard limit without // renewing. try { d_out.Write(buf, 0, 1024); Log.Info("Write worked beyond the soft limit as expected."); } catch (IOException) { NUnit.Framework.Assert.Fail("Write failed."); } // make it look like the hard limit has been exceeded. dfs.lastLeaseRenewal = Time.MonotonicNow() - HdfsConstants.LeaseHardlimitPeriod - 1000; dfs.RenewLease(); // this should not work. try { d_out.Write(buf, 0, 1024); d_out.Close(); NUnit.Framework.Assert.Fail("Write did not fail even after the fatal lease renewal failure" ); } catch (IOException e) { Log.Info("Write failed as expected. ", e); } // If aborted, the renewer should be empty. (no reference to clients) Sharpen.Thread.Sleep(1000); NUnit.Framework.Assert.IsTrue(originalRenewer.IsEmpty()); // unstub Org.Mockito.Mockito.DoNothing().When(spyNN).RenewLease(Matchers.AnyString()); // existing input streams should work try { int num = c_in.Read(buf, 0, 1); if (num != 1) { NUnit.Framework.Assert.Fail("Failed to read 1 byte"); } c_in.Close(); } catch (IOException e) { Log.Error("Read failed with ", e); NUnit.Framework.Assert.Fail("Read after lease renewal failure failed"); } // new file writes should work. try { c_out = CreateFsOut(dfs, dirString + "c"); c_out.Write(buf, 0, 1024); c_out.Close(); } catch (IOException e) { Log.Error("Write failed with ", e); NUnit.Framework.Assert.Fail("Write failed"); } } finally { cluster.Shutdown(); } }