HADOOP-13491. Fix several warnings from findbugs. Contributed by Genmao Yu.

This commit is contained in:
Mingfei 2016-08-18 16:06:57 +08:00
parent a5d5342228
commit 4d84c814fc
4 changed files with 37 additions and 8 deletions

View File

@ -20,6 +20,7 @@ package org.apache.hadoop.fs.aliyun.oss;
import static org.apache.hadoop.fs.aliyun.oss.Constants.*; import static org.apache.hadoop.fs.aliyun.oss.Constants.*;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.common.auth.CredentialsProvider; import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.auth.DefaultCredentials; import com.aliyun.oss.common.auth.DefaultCredentials;
@ -782,7 +783,7 @@ public class AliyunOSSFileSystem extends FileSystem {
ossClient.completeMultipartUpload(completeMultipartUploadRequest); ossClient.completeMultipartUpload(completeMultipartUploadRequest);
LOG.debug(completeMultipartUploadResult.getETag()); LOG.debug(completeMultipartUploadResult.getETag());
return true; return true;
} catch (Exception e) { } catch (OSSException | ClientException e) {
AbortMultipartUploadRequest abortMultipartUploadRequest = AbortMultipartUploadRequest abortMultipartUploadRequest =
new AbortMultipartUploadRequest(bucketName, dstKey, uploadId); new AbortMultipartUploadRequest(bucketName, dstKey, uploadId);
ossClient.abortMultipartUpload(abortMultipartUploadRequest); ossClient.abortMultipartUpload(abortMultipartUploadRequest);

View File

@ -227,12 +227,12 @@ public class AliyunOSSInputStream extends FSInputStream {
} }
@Override @Override
public void seek(long pos) throws IOException { public synchronized void seek(long pos) throws IOException {
checkNotClosed(); checkNotClosed();
if (position == pos) { if (position == pos) {
return; return;
} else if (pos > position && pos < position + partRemaining) { } else if (pos > position && pos < position + partRemaining) {
wrappedStream.skip(pos - position); AliyunOSSUtils.skipFully(wrappedStream, pos - position);
position = pos; position = pos;
} else { } else {
reopen(pos); reopen(pos);
@ -240,7 +240,7 @@ public class AliyunOSSInputStream extends FSInputStream {
} }
@Override @Override
public long getPos() throws IOException { public synchronized long getPos() throws IOException {
checkNotClosed(); checkNotClosed();
return position; return position;
} }

View File

@ -29,6 +29,8 @@ import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSException;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
@ -113,7 +115,9 @@ public class AliyunOSSOutputStream extends OutputStream {
multipartUploadObject(); multipartUploadObject();
} }
} finally { } finally {
tmpFile.delete(); if (!tmpFile.delete()) {
LOG.warn("Can not delete file: " + tmpFile);
}
} }
} }
@ -174,7 +178,7 @@ public class AliyunOSSOutputStream extends OutputStream {
FileInputStream fis = new FileInputStream(object); FileInputStream fis = new FileInputStream(object);
try { try {
long skipBytes = partSize * i; long skipBytes = partSize * i;
fis.skip(skipBytes); AliyunOSSUtils.skipFully(fis, skipBytes);
long size = (partSize < dataLen - skipBytes) ? long size = (partSize < dataLen - skipBytes) ?
partSize : dataLen - skipBytes; partSize : dataLen - skipBytes;
UploadPartRequest uploadPartRequest = new UploadPartRequest(); UploadPartRequest uploadPartRequest = new UploadPartRequest();
@ -198,7 +202,7 @@ public class AliyunOSSOutputStream extends OutputStream {
CompleteMultipartUploadResult completeMultipartUploadResult = CompleteMultipartUploadResult completeMultipartUploadResult =
ossClient.completeMultipartUpload(completeMultipartUploadRequest); ossClient.completeMultipartUpload(completeMultipartUploadRequest);
LOG.debug(completeMultipartUploadResult.getETag()); LOG.debug(completeMultipartUploadResult.getETag());
} catch (Exception e) { } catch (OSSException | ClientException e) {
AbortMultipartUploadRequest abortMultipartUploadRequest = AbortMultipartUploadRequest abortMultipartUploadRequest =
new AbortMultipartUploadRequest(bucketName, key, uploadId); new AbortMultipartUploadRequest(bucketName, key, uploadId);
ossClient.abortMultipartUpload(abortMultipartUploadRequest); ossClient.abortMultipartUpload(abortMultipartUploadRequest);

View File

@ -19,6 +19,7 @@
package org.apache.hadoop.fs.aliyun.oss; package org.apache.hadoop.fs.aliyun.oss;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URI; import java.net.URI;
import java.net.URLDecoder; import java.net.URLDecoder;
@ -116,7 +117,7 @@ final public class AliyunOSSUtils {
/** /**
* Extract the user information details from a URI. * Extract the user information details from a URI.
* @param name URI of the filesystem * @param name URI of the filesystem.
* @return a login tuple, possibly empty. * @return a login tuple, possibly empty.
*/ */
public static UserInfo extractLoginDetails(URI name) { public static UserInfo extractLoginDetails(URI name) {
@ -148,4 +149,27 @@ final public class AliyunOSSUtils {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
/**
* Skips the requested number of bytes or fail if there are not enough left.
* This allows for the possibility that {@link InputStream#skip(long)} may not
* skip as many bytes as requested (most likely because of reaching EOF).
* @param is the input stream to skip.
* @param n the number of bytes to skip.
* @throws IOException thrown when skipped less number of bytes.
*/
public static void skipFully(InputStream is, long n) throws IOException {
long total = 0;
long cur = 0;
do {
cur = is.skip(n - total);
total += cur;
} while((total < n) && (cur > 0));
if (total < n) {
throw new IOException("Failed to skip " + n + " bytes, possibly due " +
"to EOF.");
}
}
} }