/// <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"
                                   );
         }
     }
 }