|
@@ -17,9 +17,12 @@
|
|
*/
|
|
*/
|
|
package org.apache.hadoop.hdfs.tools.offlineImageViewer;
|
|
package org.apache.hadoop.hdfs.tools.offlineImageViewer;
|
|
|
|
|
|
|
|
+import org.apache.hadoop.conf.Configuration;
|
|
import org.apache.hadoop.fs.Path;
|
|
import org.apache.hadoop.fs.Path;
|
|
import org.apache.hadoop.fs.permission.PermissionStatus;
|
|
import org.apache.hadoop.fs.permission.PermissionStatus;
|
|
|
|
+import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicy;
|
|
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
|
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
|
|
|
+import org.apache.hadoop.hdfs.server.namenode.ErasureCodingPolicyManager;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INode;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INode;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INodeDirectory;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INodeDirectory;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INodeFile;
|
|
import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INodeFile;
|
|
@@ -46,6 +49,8 @@ import java.text.SimpleDateFormat;
|
|
public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
|
|
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
|
|
private boolean printStoragePolicy;
|
|
private boolean printStoragePolicy;
|
|
|
|
+ private boolean printECPolicy;
|
|
|
|
+ private ErasureCodingPolicyManager ecManager;
|
|
|
|
|
|
static class OutputEntryBuilder {
|
|
static class OutputEntryBuilder {
|
|
private final SimpleDateFormat dateFormatter =
|
|
private final SimpleDateFormat dateFormatter =
|
|
@@ -62,6 +67,7 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
private long nsQuota = 0;
|
|
private long nsQuota = 0;
|
|
private long dsQuota = 0;
|
|
private long dsQuota = 0;
|
|
private int storagePolicy = 0;
|
|
private int storagePolicy = 0;
|
|
|
|
+ private String ecPolicy = "-";
|
|
|
|
|
|
private String dirPermission = "-";
|
|
private String dirPermission = "-";
|
|
private PermissionStatus permissionStatus;
|
|
private PermissionStatus permissionStatus;
|
|
@@ -83,6 +89,13 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
aclPermission = "+";
|
|
aclPermission = "+";
|
|
}
|
|
}
|
|
storagePolicy = file.getStoragePolicyID();
|
|
storagePolicy = file.getStoragePolicyID();
|
|
|
|
+ if (writer.printECPolicy && file.hasErasureCodingPolicyID()) {
|
|
|
|
+ ErasureCodingPolicy policy = writer.ecManager.
|
|
|
|
+ getByID((byte) file.getErasureCodingPolicyID());
|
|
|
|
+ if (policy != null) {
|
|
|
|
+ ecPolicy = policy.getName();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
break;
|
|
break;
|
|
case DIRECTORY:
|
|
case DIRECTORY:
|
|
INodeDirectory dir = inode.getDirectory();
|
|
INodeDirectory dir = inode.getDirectory();
|
|
@@ -95,6 +108,12 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
aclPermission = "+";
|
|
aclPermission = "+";
|
|
}
|
|
}
|
|
storagePolicy = writer.getStoragePolicy(dir.getXAttrs());
|
|
storagePolicy = writer.getStoragePolicy(dir.getXAttrs());
|
|
|
|
+ if (writer.printECPolicy) {
|
|
|
|
+ String name= writer.getErasureCodingPolicyName(dir.getXAttrs());
|
|
|
|
+ if (name != null) {
|
|
|
|
+ ecPolicy = name;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
break;
|
|
break;
|
|
case SYMLINK:
|
|
case SYMLINK:
|
|
INodeSymlink s = inode.getSymlink();
|
|
INodeSymlink s = inode.getSymlink();
|
|
@@ -134,6 +153,9 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
if (writer.printStoragePolicy) {
|
|
if (writer.printStoragePolicy) {
|
|
writer.append(buffer, storagePolicy);
|
|
writer.append(buffer, storagePolicy);
|
|
}
|
|
}
|
|
|
|
+ if (writer.printECPolicy) {
|
|
|
|
+ writer.append(buffer, ecPolicy);
|
|
|
|
+ }
|
|
return buffer.substring(1);
|
|
return buffer.substring(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -146,14 +168,21 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
PBImageDelimitedTextWriter(PrintStream out, String delimiter,
|
|
PBImageDelimitedTextWriter(PrintStream out, String delimiter,
|
|
String tempPath, boolean printStoragePolicy)
|
|
String tempPath, boolean printStoragePolicy)
|
|
throws IOException {
|
|
throws IOException {
|
|
- this(out, delimiter, tempPath, printStoragePolicy, 1, "-");
|
|
|
|
|
|
+ this(out, delimiter, tempPath, printStoragePolicy, false, 1, "-", null);
|
|
}
|
|
}
|
|
|
|
|
|
PBImageDelimitedTextWriter(PrintStream out, String delimiter,
|
|
PBImageDelimitedTextWriter(PrintStream out, String delimiter,
|
|
- String tempPath, boolean printStoragePolicy, int threads,
|
|
|
|
- String parallelOut) throws IOException {
|
|
|
|
|
|
+ String tempPath, boolean printStoragePolicy,
|
|
|
|
+ boolean printECPolicy, int threads,
|
|
|
|
+ String parallelOut, Configuration conf)
|
|
|
|
+ throws IOException {
|
|
super(out, delimiter, tempPath, threads, parallelOut);
|
|
super(out, delimiter, tempPath, threads, parallelOut);
|
|
this.printStoragePolicy = printStoragePolicy;
|
|
this.printStoragePolicy = printStoragePolicy;
|
|
|
|
+ if (printECPolicy && conf != null) {
|
|
|
|
+ this.printECPolicy = true;
|
|
|
|
+ ecManager = ErasureCodingPolicyManager.getInstance();
|
|
|
|
+ ecManager.init(conf);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -187,6 +216,9 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
|
|
if (printStoragePolicy) {
|
|
if (printStoragePolicy) {
|
|
append(buffer, "StoragePolicyId");
|
|
append(buffer, "StoragePolicyId");
|
|
}
|
|
}
|
|
|
|
+ if (printECPolicy) {
|
|
|
|
+ append(buffer, "ErasureCodingPolicy");
|
|
|
|
+ }
|
|
return buffer.toString();
|
|
return buffer.toString();
|
|
}
|
|
}
|
|
|
|
|