You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by st...@apache.org on 2020/10/23 09:51:44 UTC
[hadoop] branch trunk updated: HADOOP-17308. WASB
PageBlobOutputStream.flush succeeds even when flush to storage fails
(#2392)
This is an automated email from the ASF dual-hosted git repository.
stevel pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 7bdf165 HADOOP-17308. WASB PageBlobOutputStream.flush succeeds even when flush to storage fails (#2392)
7bdf165 is described below
commit 7bdf165f6261172c866ea25bad8f08e61f1e6f9b
Author: Anoop Sam John <an...@gmail.com>
AuthorDate: Fri Oct 23 15:21:19 2020 +0530
HADOOP-17308. WASB PageBlobOutputStream.flush succeeds even when flush to storage fails (#2392)
Contributed by Anoop Sam John.
---
.../hadoop/fs/azure/PageBlobOutputStream.java | 1 +
.../hadoop/fs/azure/ITestPageBlobOutputStream.java | 83 ++++++++++++++++++++++
2 files changed, 84 insertions(+)
diff --git a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/PageBlobOutputStream.java b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/PageBlobOutputStream.java
index 33f8a8f..1e409cd 100644
--- a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/PageBlobOutputStream.java
+++ b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/PageBlobOutputStream.java
@@ -580,6 +580,7 @@ final class PageBlobOutputStream extends OutputStream implements Syncable, Strea
// Restore the interrupted status
Thread.currentThread().interrupt();
}
+ checkStreamState();
LOG.debug("Leaving PageBlobOutputStream#hsync(). Total hsync duration = "
+ (System.currentTimeMillis() - start) + " msec.");
}
diff --git a/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestPageBlobOutputStream.java b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestPageBlobOutputStream.java
new file mode 100644
index 0000000..416143d
--- /dev/null
+++ b/hadoop-tools/hadoop-azure/src/test/java/org/apache/hadoop/fs/azure/ITestPageBlobOutputStream.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.fs.azure;
+
+import java.io.IOException;
+import java.util.EnumSet;
+
+import org.junit.Test;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.test.LambdaTestUtils;
+
+public class ITestPageBlobOutputStream extends AbstractWasbTestBase {
+
+ private static final Path TEST_FILE_PATH = new Path(
+ "TestPageBlobOutputStream.txt");
+
+ @Override
+ protected AzureBlobStorageTestAccount createTestAccount() throws Exception {
+ Configuration conf = new Configuration();
+ // Configure the page blob directories key so every file created is a page
+ // blob.
+ conf.set(AzureNativeFileSystemStore.KEY_PAGE_BLOB_DIRECTORIES, "/");
+ return AzureBlobStorageTestAccount.create("testpagebloboutputstream",
+ EnumSet.of(AzureBlobStorageTestAccount.CreateOptions.CreateContainer),
+ conf, true);
+ }
+
+ @Test
+ public void testHflush() throws Exception {
+ Path path = fs.makeQualified(TEST_FILE_PATH);
+ FSDataOutputStream os = fs.create(path);
+ os.write(1);
+ os.hflush();
+ // Delete the blob so that Azure call will fail.
+ fs.delete(path, false);
+ os.write(2);
+ LambdaTestUtils.intercept(IOException.class,
+ "The specified blob does not exist", () -> {
+ os.hflush();
+ });
+ LambdaTestUtils.intercept(IOException.class,
+ "The specified blob does not exist", () -> {
+ os.close();
+ });
+ }
+
+ @Test
+ public void testHsync() throws Exception {
+ Path path = fs.makeQualified(TEST_FILE_PATH);
+ FSDataOutputStream os = fs.create(path);
+ os.write(1);
+ os.hsync();
+ // Delete the blob so that Azure call will fail.
+ fs.delete(path, false);
+ os.write(2);
+ LambdaTestUtils.intercept(IOException.class,
+ "The specified blob does not exist", () -> {
+ os.hsync();
+ });
+ LambdaTestUtils.intercept(IOException.class,
+ "The specified blob does not exist", () -> {
+ os.close();
+ });
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org