HDFS-7986. Allow files / directories to be deleted from the NameNode UI. Contributed by Ravi Prakash.

This commit is contained in:
Haohui Mai 2015-09-15 16:48:15 -07:00
parent b297a9c95c
commit 08c2c402cf
4 changed files with 63 additions and 4 deletions

View File

@ -575,6 +575,9 @@ Release 2.8.0 - UNRELEASED
HDFS-9082. Change the log level in WebHdfsFileSystem.initialize() from INFO HDFS-9082. Change the log level in WebHdfsFileSystem.initialize() from INFO
to DEBUG. (Santhosh Nayak via cnauroth) to DEBUG. (Santhosh Nayak via cnauroth)
HDFS-7986. Allow files / directories to be deleted from the NameNode UI.
(Ravi Prakash via wheat9)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than

View File

@ -117,6 +117,28 @@
</div> </div>
</div> </div>
<div class="modal" id="delete-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title" id="delete-modal-title">Delete</h4>
</div>
<div class="modal-body">
<div class="panel-body">
<div id="delete-prompt"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" id="delete-button"
data-complete-text="Deleting...">Delete</button>
</div>
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-11"> <div class="col-xs-11">
<form onsubmit="return false;"> <form onsubmit="return false;">
@ -159,11 +181,12 @@
<th>Replication</th> <th>Replication</th>
<th>Block Size</th> <th>Block Size</th>
<th>Name</th> <th>Name</th>
<th>Delete</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{#FileStatus} {#FileStatus}
<tr> <tr inode-path="{pathSuffix}" class="explorer-entry">
<td>{type|helper_to_directory}{permission|helper_to_permission}{aclBit|helper_to_acl_bit}</td> <td>{type|helper_to_directory}{permission|helper_to_permission}{aclBit|helper_to_acl_bit}</td>
<td>{owner}</td> <td>{owner}</td>
<td>{group}</td> <td>{group}</td>
@ -171,7 +194,8 @@
<td>{#helper_date_tostring value="{modificationTime}"/}</td> <td>{#helper_date_tostring value="{modificationTime}"/}</td>
<td>{replication}</td> <td>{replication}</td>
<td>{blockSize|fmt_bytes}</td> <td>{blockSize|fmt_bytes}</td>
<td><a style="cursor:pointer" inode-type="{type}" class="explorer-browse-links" inode-path="{pathSuffix}">{pathSuffix}</a></td> <td><a inode-type="{type}" class="explorer-browse-links">{pathSuffix}</a></td>
<td><span class="glyphicon glyphicon-trash"></span></td>
</tr> </tr>
{/FileStatus} {/FileStatus}
</tbody> </tbody>

View File

@ -78,6 +78,29 @@
return data.RemoteException !== undefined ? data.RemoteException.message : ""; return data.RemoteException !== undefined ? data.RemoteException.message : "";
} }
function delete_path(inode_name, absolute_file_path) {
$('#delete-modal-title').text("Delete - " + inode_name);
$('#delete-prompt').text("Are you sure you want to delete " + inode_name
+ " ?");
$('#delete-button').click(function() {
// DELETE /webhdfs/v1/<path>?op=DELETE&recursive=<true|false>
var url = '/webhdfs/v1' + encode_path(absolute_file_path) +
'?op=DELETE' + '&recursive=true';
$.ajax(url,
{ type: 'DELETE'
}).done(function(data) {
browse_directory(current_directory);
}).error(network_error_handler(url)
).complete(function() {
$('#delete-modal').modal('hide');
$('#delete-button').button('reset');
});
})
$('#delete-modal').modal();
}
function encode_path(abs_path) { function encode_path(abs_path) {
abs_path = encodeURIComponent(abs_path); abs_path = encodeURIComponent(abs_path);
var re = /%2F/g; var re = /%2F/g;
@ -166,7 +189,7 @@
$('.explorer-browse-links').click(function() { $('.explorer-browse-links').click(function() {
var type = $(this).attr('inode-type'); var type = $(this).attr('inode-type');
var path = $(this).attr('inode-path'); var path = $(this).closest('tr').attr('inode-path');
var abs_path = append_path(current_directory, path); var abs_path = append_path(current_directory, path);
if (type == 'DIRECTORY') { if (type == 'DIRECTORY') {
browse_directory(abs_path); browse_directory(abs_path);
@ -174,6 +197,12 @@
view_file_details(path, abs_path); view_file_details(path, abs_path);
} }
}); });
$('.explorer-entry .glyphicon-trash').click(function() {
var inode_name = $(this).closest('tr').attr('inode-path');
var absolute_file_path = append_path(current_directory, inode_name);
delete_path(inode_name, absolute_file_path);
})
}); });
}).error(network_error_handler(url)); }).error(network_error_handler(url));
} }

View File

@ -264,3 +264,6 @@ header.bs-docs-nav, header.bs-docs-nav .navbar-brand {
.dfshealth-node-legend li:before { .dfshealth-node-legend li:before {
padding-right: 5pt; padding-right: 5pt;
} }
.explorer-entry .explorer-browse-links { cursor: pointer; }
.explorer-entry .glyphicon-trash { cursor: pointer; }