HDFS-15192. Leaking stream when access encrypted files hit exception via webhdfs.
This commit is contained in:
parent
dda00d3ff5
commit
a2ce53d8ff
|
@ -38,6 +38,7 @@ import org.apache.hadoop.fs.Options;
|
||||||
import org.apache.hadoop.fs.permission.FsPermission;
|
import org.apache.hadoop.fs.permission.FsPermission;
|
||||||
import org.apache.hadoop.hdfs.DFSClient;
|
import org.apache.hadoop.hdfs.DFSClient;
|
||||||
import org.apache.hadoop.hdfs.DFSConfigKeys;
|
import org.apache.hadoop.hdfs.DFSConfigKeys;
|
||||||
|
import org.apache.hadoop.hdfs.DFSOutputStream;
|
||||||
import org.apache.hadoop.hdfs.client.HdfsDataOutputStream;
|
import org.apache.hadoop.hdfs.client.HdfsDataOutputStream;
|
||||||
import org.apache.hadoop.hdfs.nfs.conf.NfsConfigKeys;
|
import org.apache.hadoop.hdfs.nfs.conf.NfsConfigKeys;
|
||||||
import org.apache.hadoop.hdfs.nfs.conf.NfsConfiguration;
|
import org.apache.hadoop.hdfs.nfs.conf.NfsConfiguration;
|
||||||
|
@ -988,10 +989,14 @@ public class RpcProgramNfs3 extends RpcProgram implements Nfs3Interface {
|
||||||
EnumSet.of(CreateFlag.CREATE, CreateFlag.OVERWRITE) :
|
EnumSet.of(CreateFlag.CREATE, CreateFlag.OVERWRITE) :
|
||||||
EnumSet.of(CreateFlag.CREATE);
|
EnumSet.of(CreateFlag.CREATE);
|
||||||
|
|
||||||
fos = dfsClient.createWrappedOutputStream(
|
final DFSOutputStream dfsos = dfsClient.create(fileIdPath, permission, flag,
|
||||||
dfsClient.create(fileIdPath, permission, flag, false, replication,
|
false, replication, blockSize, null, bufferSize, null);
|
||||||
blockSize, null, bufferSize, null),
|
try {
|
||||||
null);
|
fos = dfsClient.createWrappedOutputStream(dfsos, null);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
dfsos.close();
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
|
||||||
if ((createMode == Nfs3Constant.CREATE_UNCHECKED)
|
if ((createMode == Nfs3Constant.CREATE_UNCHECKED)
|
||||||
|| (createMode == Nfs3Constant.CREATE_GUARDED)) {
|
|| (createMode == Nfs3Constant.CREATE_GUARDED)) {
|
||||||
|
|
|
@ -29,6 +29,7 @@ import io.netty.handler.codec.http.HttpMethod;
|
||||||
import io.netty.handler.codec.http.HttpRequest;
|
import io.netty.handler.codec.http.HttpRequest;
|
||||||
import io.netty.handler.codec.http.QueryStringDecoder;
|
import io.netty.handler.codec.http.QueryStringDecoder;
|
||||||
import io.netty.handler.stream.ChunkedStream;
|
import io.netty.handler.stream.ChunkedStream;
|
||||||
|
import org.apache.hadoop.hdfs.DFSOutputStream;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
@ -215,9 +216,16 @@ public class WebHdfsHandler extends SimpleChannelInboundHandler<HttpRequest> {
|
||||||
}
|
}
|
||||||
|
|
||||||
final DFSClient dfsClient = newDfsClient(nnId, confForCreate);
|
final DFSClient dfsClient = newDfsClient(nnId, confForCreate);
|
||||||
OutputStream out = dfsClient.createWrappedOutputStream(dfsClient.create(
|
final DFSOutputStream dfsos = dfsClient.create(
|
||||||
path, permission, flags, createParent, replication, blockSize, null,
|
path, permission, flags, createParent, replication, blockSize, null,
|
||||||
bufferSize, null), null);
|
bufferSize, null);
|
||||||
|
OutputStream out;
|
||||||
|
try {
|
||||||
|
out = dfsClient.createWrappedOutputStream(dfsos, null);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
dfsos.close();
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
|
||||||
resp = new DefaultHttpResponse(HTTP_1_1, CREATED);
|
resp = new DefaultHttpResponse(HTTP_1_1, CREATED);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue