@Override
 public synchronized void removeRMDTMasterKeyState(DelegationKey masterKey) throws Exception {
   Path nodeCreatePath =
       getNodePath(rmDTSecretManagerRoot, DELEGATION_KEY_PREFIX + masterKey.getKeyId());
   LOG.info("Removing RMDelegationKey_" + masterKey.getKeyId());
   deleteFileWithRetries(nodeCreatePath);
 }
 @Override
 public synchronized void storeRMDTMasterKeyState(DelegationKey masterKey) throws Exception {
   Path nodeCreatePath =
       getNodePath(rmDTSecretManagerRoot, DELEGATION_KEY_PREFIX + masterKey.getKeyId());
   ByteArrayOutputStream os = new ByteArrayOutputStream();
   try (DataOutputStream fsOut = new DataOutputStream(os)) {
     LOG.info("Storing RMDelegationKey_" + masterKey.getKeyId());
     masterKey.write(fsOut);
     writeFileWithRetries(nodeCreatePath, os.toByteArray(), true);
   }
 }
Пример #3
0
 private int loadRMDTSecretManagerKeys(RMState state) throws IOException {
   int numKeys = 0;
   LeveldbIterator iter = null;
   try {
     iter = new LeveldbIterator(db);
     iter.seek(bytes(RM_DT_MASTER_KEY_KEY_PREFIX));
     while (iter.hasNext()) {
       Entry<byte[], byte[]> entry = iter.next();
       String key = asString(entry.getKey());
       if (!key.startsWith(RM_DT_MASTER_KEY_KEY_PREFIX)) {
         break;
       }
       DelegationKey masterKey = loadDelegationKey(entry.getValue());
       state.rmSecretManagerState.masterKeyState.add(masterKey);
       ++numKeys;
       if (LOG.isDebugEnabled()) {
         LOG.debug(
             "Loaded RM delegation key from "
                 + key
                 + ": keyId="
                 + masterKey.getKeyId()
                 + ", expirationDate="
                 + masterKey.getExpiryDate());
       }
     }
   } catch (DBException e) {
     throw new IOException(e);
   } finally {
     if (iter != null) {
       iter.close();
     }
   }
   return numKeys;
 }
  private void loadRMDTSecretManagerState(RMState rmState) throws Exception {
    checkAndResumeUpdateOperation(rmDTSecretManagerRoot);
    FileStatus[] childNodes = listStatusWithRetries(rmDTSecretManagerRoot);

    for (FileStatus childNodeStatus : childNodes) {
      assert childNodeStatus.isFile();
      String childNodeName = childNodeStatus.getPath().getName();
      if (checkAndRemovePartialRecordWithRetries(childNodeStatus.getPath())) {
        continue;
      }
      if (childNodeName.startsWith(DELEGATION_TOKEN_SEQUENCE_NUMBER_PREFIX)) {
        rmState.rmSecretManagerState.dtSequenceNumber =
            Integer.parseInt(childNodeName.split("_")[1]);
        continue;
      }

      Path childNodePath = getNodePath(rmDTSecretManagerRoot, childNodeName);
      byte[] childData = readFileWithRetries(childNodePath, childNodeStatus.getLen());
      ByteArrayInputStream is = new ByteArrayInputStream(childData);
      try (DataInputStream fsIn = new DataInputStream(is)) {
        if (childNodeName.startsWith(DELEGATION_KEY_PREFIX)) {
          DelegationKey key = new DelegationKey();
          key.readFields(fsIn);
          rmState.rmSecretManagerState.masterKeyState.add(key);
          if (LOG.isDebugEnabled()) {
            LOG.debug(
                "Loaded delegation key: keyId="
                    + key.getKeyId()
                    + ", expirationDate="
                    + key.getExpiryDate());
          }
        } else if (childNodeName.startsWith(DELEGATION_TOKEN_PREFIX)) {
          RMDelegationTokenIdentifierData identifierData = new RMDelegationTokenIdentifierData();
          identifierData.readFields(fsIn);
          RMDelegationTokenIdentifier identifier = identifierData.getTokenIdentifier();
          long renewDate = identifierData.getRenewDate();

          rmState.rmSecretManagerState.delegationTokenState.put(identifier, renewDate);
          if (LOG.isDebugEnabled()) {
            LOG.debug(
                "Loaded RMDelegationTokenIdentifier: " + identifier + " renewDate=" + renewDate);
          }
        } else {
          LOG.warn("Unknown file for recovering RMDelegationTokenSecretManager");
        }
      }
    }
  }
Пример #5
0
 private String getRMDTMasterKeyNodeKey(DelegationKey masterKey) {
   return RM_DT_MASTER_KEY_KEY_PREFIX + masterKey.getKeyId();
 }