/// <summary>This method is intended to be used only while reading edit logs.</summary> /// <param name="identifier"> /// DelegationTokenIdentifier read from the edit logs or /// fsimage /// </param> /// <param name="expiryTime">token expiry time</param> /// <exception cref="System.IO.IOException"/> public override void AddPersistedDelegationToken(DelegationTokenIdentifier identifier , long expiryTime) { lock (this) { if (running) { // a safety check throw new IOException("Can't add persisted delegation token to a running SecretManager." ); } int keyId = identifier.GetMasterKeyId(); DelegationKey dKey = allKeys[keyId]; if (dKey == null) { Log.Warn("No KEY found for persisted identifier " + identifier.ToString()); return; } byte[] password = CreatePassword(identifier.GetBytes(), dKey.GetKey()); if (identifier.GetSequenceNumber() > this.delegationTokenSequenceNumber) { this.delegationTokenSequenceNumber = identifier.GetSequenceNumber(); } if (currentTokens[identifier] == null) { currentTokens[identifier] = new AbstractDelegationTokenSecretManager.DelegationTokenInformation (expiryTime, password, GetTrackingIdIfEnabled(identifier)); } else { throw new IOException("Same delegation token being added twice; invalid entry in fsimage or editlogs" ); } } }