コード例 #1
0
 /**
  * Rename a snapshot
  *
  * @param path The directory path where the snapshot was taken. Used for generating exception
  *     message.
  * @param oldName Old name of the snapshot
  * @param newName New name the snapshot will be renamed to
  * @throws SnapshotException Throw SnapshotException when either the snapshot with the old name
  *     does not exist or a snapshot with the new name already exists
  */
 public void renameSnapshot(String path, String oldName, String newName) throws SnapshotException {
   if (newName.equals(oldName)) {
     return;
   }
   final int indexOfOld = searchSnapshot(DFSUtil.string2Bytes(oldName));
   if (indexOfOld < 0) {
     throw new SnapshotException(
         "The snapshot " + oldName + " does not exist for directory " + path);
   } else {
     final byte[] newNameBytes = DFSUtil.string2Bytes(newName);
     int indexOfNew = searchSnapshot(newNameBytes);
     if (indexOfNew > 0) {
       throw new SnapshotException(
           "The snapshot " + newName + " already exists for directory " + path);
     }
     // remove the one with old name from snapshotsByNames
     Snapshot snapshot = snapshotsByNames.remove(indexOfOld);
     final INodeDirectory ssRoot = snapshot.getRoot();
     ssRoot.setLocalName(newNameBytes);
     indexOfNew = -indexOfNew - 1;
     if (indexOfNew <= indexOfOld) {
       snapshotsByNames.add(indexOfNew, snapshot);
     } else { // indexOfNew > indexOfOld
       snapshotsByNames.add(indexOfNew - 1, snapshot);
     }
   }
 }