Search in sources :

Example 6 with INode

use of org.apache.hadoop.hdfs.server.namenode.INode in project hadoop by apache.

the class Snapshot method read.

static Snapshot read(DataInput in, FSImageFormat.Loader loader) throws IOException {
    final int snapshotId = in.readInt();
    final INode root = loader.loadINodeWithLocalName(false, in, false);
    return new Snapshot(snapshotId, root.asDirectory(), null);
}
Also used : INode(org.apache.hadoop.hdfs.server.namenode.INode)

Example 7 with INode

use of org.apache.hadoop.hdfs.server.namenode.INode in project hadoop by apache.

the class SnapshotDiffInfo method generateReport.

/**
   * Interpret the ChildrenDiff and generate a list of {@link DiffReportEntry}.
   * @param dirDiff The ChildrenDiff.
   * @param parentPath The relative path of the parent.
   * @param fromEarlier True indicates {@code diff=later-earlier},
   *                    False indicates {@code diff=earlier-later}
   * @param renameMap A map containing information about rename operations.
   * @return A list of {@link DiffReportEntry} as the diff report.
   */
private List<DiffReportEntry> generateReport(ChildrenDiff dirDiff, byte[][] parentPath, boolean fromEarlier, Map<Long, RenameEntry> renameMap) {
    List<DiffReportEntry> list = new ArrayList<DiffReportEntry>();
    List<INode> created = dirDiff.getList(ListType.CREATED);
    List<INode> deleted = dirDiff.getList(ListType.DELETED);
    byte[][] fullPath = new byte[parentPath.length + 1][];
    System.arraycopy(parentPath, 0, fullPath, 0, parentPath.length);
    for (INode cnode : created) {
        RenameEntry entry = renameMap.get(cnode.getId());
        if (entry == null || !entry.isRename()) {
            fullPath[fullPath.length - 1] = cnode.getLocalNameBytes();
            list.add(new DiffReportEntry(fromEarlier ? DiffType.CREATE : DiffType.DELETE, fullPath));
        }
    }
    for (INode dnode : deleted) {
        RenameEntry entry = renameMap.get(dnode.getId());
        if (entry != null && entry.isRename()) {
            list.add(new DiffReportEntry(DiffType.RENAME, fromEarlier ? entry.getSourcePath() : entry.getTargetPath(), fromEarlier ? entry.getTargetPath() : entry.getSourcePath()));
        } else {
            fullPath[fullPath.length - 1] = dnode.getLocalNameBytes();
            list.add(new DiffReportEntry(fromEarlier ? DiffType.DELETE : DiffType.CREATE, fullPath));
        }
    }
    return list;
}
Also used : INode(org.apache.hadoop.hdfs.server.namenode.INode) ArrayList(java.util.ArrayList) DiffReportEntry(org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffReportEntry)

Example 8 with INode

use of org.apache.hadoop.hdfs.server.namenode.INode in project hadoop by apache.

the class SnapshotDiffInfo method addDirDiff.

/** Add a dir-diff pair */
void addDirDiff(INodeDirectory dir, byte[][] relativePath, ChildrenDiff diff) {
    dirDiffMap.put(dir, diff);
    diffMap.put(dir, relativePath);
    // detect rename
    for (INode created : diff.getList(ListType.CREATED)) {
        if (created.isReference()) {
            RenameEntry entry = getEntry(created.getId());
            if (entry.getTargetPath() == null) {
                entry.setTarget(created, relativePath);
            }
        }
    }
    for (INode deleted : diff.getList(ListType.DELETED)) {
        if (deleted instanceof INodeReference.WithName) {
            RenameEntry entry = getEntry(deleted.getId());
            entry.setSource(deleted, relativePath);
        }
    }
}
Also used : INode(org.apache.hadoop.hdfs.server.namenode.INode)

Example 9 with INode

use of org.apache.hadoop.hdfs.server.namenode.INode in project hadoop by apache.

the class SnapshotDiffInfo method generateReport.

/**
   * Generate a {@link SnapshotDiffReport} based on detailed diff information.
   * @return A {@link SnapshotDiffReport} describing the difference
   */
public SnapshotDiffReport generateReport() {
    List<DiffReportEntry> diffReportList = new ArrayList<DiffReportEntry>();
    for (Map.Entry<INode, byte[][]> drEntry : diffMap.entrySet()) {
        INode node = drEntry.getKey();
        byte[][] path = drEntry.getValue();
        diffReportList.add(new DiffReportEntry(DiffType.MODIFY, path, null));
        if (node.isDirectory()) {
            List<DiffReportEntry> subList = generateReport(dirDiffMap.get(node), path, isFromEarlier(), renameMap);
            diffReportList.addAll(subList);
        }
    }
    return new SnapshotDiffReport(snapshotRoot.getFullPathName(), Snapshot.getSnapshotName(from), Snapshot.getSnapshotName(to), diffReportList);
}
Also used : INode(org.apache.hadoop.hdfs.server.namenode.INode) SnapshotDiffReport(org.apache.hadoop.hdfs.protocol.SnapshotDiffReport) ArrayList(java.util.ArrayList) DiffReportEntry(org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffReportEntry) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) Map(java.util.Map) SortedMap(java.util.SortedMap)

Example 10 with INode

use of org.apache.hadoop.hdfs.server.namenode.INode in project hadoop by apache.

the class SnapshotFSImageFormat method loadCreatedList.

/**
   * Load the created list from fsimage.
   * @param parent The directory that the created list belongs to.
   * @param in The {@link DataInput} to read.
   * @return The created list.
   */
private static List<INode> loadCreatedList(INodeDirectory parent, DataInput in) throws IOException {
    // read the size of the created list
    int createdSize = in.readInt();
    List<INode> createdList = new ArrayList<INode>(createdSize);
    for (int i = 0; i < createdSize; i++) {
        byte[] createdNodeName = FSImageSerialization.readLocalName(in);
        INode created = loadCreated(createdNodeName, parent);
        createdList.add(created);
    }
    return createdList;
}
Also used : INode(org.apache.hadoop.hdfs.server.namenode.INode) ArrayList(java.util.ArrayList)

Aggregations

INode (org.apache.hadoop.hdfs.server.namenode.INode)40 Test (org.junit.Test)23 Path (org.apache.hadoop.fs.Path)22 INodeDirectory (org.apache.hadoop.hdfs.server.namenode.INodeDirectory)21 INodesInPath (org.apache.hadoop.hdfs.server.namenode.INodesInPath)15 INodeReference (org.apache.hadoop.hdfs.server.namenode.INodeReference)11 DirectoryDiff (org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature.DirectoryDiff)11 INodeFile (org.apache.hadoop.hdfs.server.namenode.INodeFile)8 QuotaCounts (org.apache.hadoop.hdfs.server.namenode.QuotaCounts)8 IOException (java.io.IOException)6 ArrayList (java.util.ArrayList)6 WithCount (org.apache.hadoop.hdfs.server.namenode.INodeReference.WithCount)5 ChildrenDiff (org.apache.hadoop.hdfs.server.namenode.snapshot.DirectoryWithSnapshotFeature.ChildrenDiff)5 FSDirectory (org.apache.hadoop.hdfs.server.namenode.FSDirectory)4 NSQuotaExceededException (org.apache.hadoop.hdfs.protocol.NSQuotaExceededException)3 BlockInfo (org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo)3 DiffReportEntry (org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffReportEntry)2 SnapshotAndINode (org.apache.hadoop.hdfs.server.namenode.INodeDirectory.SnapshotAndINode)2 ArrayDeque (java.util.ArrayDeque)1 Date (java.util.Date)1