HDFS-9294. DFSClient deadlock when close file and failed to renew lease. Contributed by Brahma Reddy Battula

This commit is contained in:
Tsz-Wo Nicholas Sze 2015-12-02 17:39:28 -08:00
parent 6af5255b02
commit afc76eb218
2 changed files with 20 additions and 11 deletions

View File

@ -701,13 +701,17 @@ protected synchronized void start() {
* Aborts this output stream and releases any system
* resources associated with this stream.
*/
synchronized void abort() throws IOException {
if (isClosed()) {
return;
void abort() throws IOException {
synchronized (this) {
if (isClosed()) {
return;
}
getStreamer().getLastException().set(
new IOException("Lease timeout of "
+ (dfsClient.getConf().getHdfsTimeout() / 1000)
+ " seconds expired."));
closeThreads(true);
}
getStreamer().getLastException().set(new IOException("Lease timeout of "
+ (dfsClient.getConf().getHdfsTimeout() / 1000) + " seconds expired."));
closeThreads(true);
dfsClient.endFileLease(fileId);
}
@ -740,11 +744,14 @@ protected void closeThreads(boolean force) throws IOException {
* resources associated with this stream.
*/
@Override
public synchronized void close() throws IOException {
try (TraceScope ignored =
dfsClient.newPathTraceScope("DFSOutputStream#close", src)) {
closeImpl();
public void close() throws IOException {
synchronized (this) {
try (TraceScope ignored = dfsClient.newPathTraceScope(
"DFSOutputStream#close", src)) {
closeImpl();
}
}
dfsClient.endFileLease(fileId);
}
protected synchronized void closeImpl() throws IOException {
@ -772,7 +779,6 @@ protected synchronized void closeImpl() throws IOException {
dfsClient.getTracer().newScope("completeFile")) {
completeFile(lastBlock);
}
dfsClient.endFileLease(fileId);
} catch (ClosedChannelException ignored) {
} finally {
setClosed();

View File

@ -1658,6 +1658,9 @@ Release 2.7.2 - UNRELEASED
HDFS-9426. Rollingupgrade finalization is not backward compatible
(Kihwal Lee via vinayakumarb)
HDFS-9294. DFSClient deadlock when close file and failed to renew lease.
(Brahma Reddy Battula via szetszwo)
Release 2.7.1 - 2015-07-06
INCOMPATIBLE CHANGES