Skip to content

Commit 67dc092

Browse files
HADOOP-17385. ITestS3ADeleteCost.testDirMarkersFileCreation failure (#2473). Contributed by Steve Loughran
The addition of deprecated S3A configuration options in HADOOP-17318 triggered a reload of default (xml resource) configurations, which breaks tests which fail if there's a per-bucket setting inconsistent with test setup. Creating an S3AFS instance before creating the Configuration() instance for test runs gets that reload out the way before test setup takes place. Along with the fix, extra changes in the failing test suite to fail fast when marker policy isn't as expected, and to log FS state better. Rather than create and discard an instance, add a new static method to S3AFS and invoke it in test setup. This forces the load Change-Id: Id52b1c46912c6fedd2ae270e2b1eb2222a360329
1 parent cf43a7e commit 67dc092

File tree

5 files changed

+26
-0
lines changed

5 files changed

+26
-0
lines changed

hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/S3AFileSystem.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4954,6 +4954,15 @@ public MarkerToolOperations createMarkerToolOperations() {
49544954
return new MarkerToolOperationsImpl(operationCallbacks);
49554955
}
49564956

4957+
/**
4958+
* This is purely for testing, as it force initializes all static
4959+
* initializers. See HADOOP-17385 for details.
4960+
*/
4961+
@InterfaceAudience.Private
4962+
public static void initializeClass() {
4963+
LOG.debug("Initialize S3A class");
4964+
}
4965+
49574966
/**
49584967
* The implementation of context accessors.
49594968
*/

hadoop-tools/hadoop-aws/src/test/java/org/apache/hadoop/fs/contract/s3a/S3AContract.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.hadoop.conf.Configuration;
2222
import org.apache.hadoop.fs.Path;
2323
import org.apache.hadoop.fs.contract.AbstractBondedFSContract;
24+
import org.apache.hadoop.fs.s3a.S3AFileSystem;
2425
import org.apache.hadoop.fs.s3a.S3ATestUtils;
2526

2627
/**
@@ -53,6 +54,9 @@ public S3AContract(Configuration conf) {
5354
*/
5455
public S3AContract(Configuration conf, boolean addContractResource) {
5556
super(conf);
57+
// Force deprecated key load through the
58+
// static initializers. See: HADOOP-17385
59+
S3AFileSystem.initializeClass();
5660
//insert the base features
5761
if (addContractResource) {
5862
addConfResource(CONTRACT_XML);

hadoop-tools/hadoop-aws/src/test/java/org/apache/hadoop/fs/s3a/AbstractS3ATestBase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ public void setup() throws Exception {
6060
// filesystems which add default configuration resources to do it before
6161
// our tests start adding/removing options. See HADOOP-16626.
6262
FileSystem.getLocal(new Configuration());
63+
// Force deprecated key load through the
64+
// static initializers. See: HADOOP-17385
65+
S3AFileSystem.initializeClass();
6366
super.setup();
6467
}
6568

hadoop-tools/hadoop-aws/src/test/java/org/apache/hadoop/fs/s3a/performance/AbstractS3ACostTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.hadoop.fs.s3a.S3AFileSystem;
3636
import org.apache.hadoop.fs.s3a.Statistic;
3737
import org.apache.hadoop.fs.s3a.Tristate;
38+
import org.apache.hadoop.fs.s3a.impl.DirectoryPolicy;
3839
import org.apache.hadoop.fs.s3a.impl.StatusProbeEnum;
3940

4041
import static org.apache.hadoop.fs.s3a.Constants.*;
@@ -141,6 +142,14 @@ public void setup() throws Exception {
141142

142143
isDeleting = !isKeeping;
143144

145+
// check that the FS has the expected state
146+
DirectoryPolicy markerPolicy = fs.getDirectoryMarkerPolicy();
147+
Assertions.assertThat(markerPolicy.getMarkerPolicy())
148+
.describedAs("Marker policy for filesystem %s", fs)
149+
.isEqualTo(isKeepingMarkers()
150+
? DirectoryPolicy.MarkerPolicy.Keep
151+
: DirectoryPolicy.MarkerPolicy.Delete);
152+
144153
// insert new metrics so as to keep the list sorted
145154
costValidator = OperationCostValidator.builder(getFileSystem())
146155
.withMetrics(

hadoop-tools/hadoop-aws/src/test/java/org/apache/hadoop/fs/s3a/performance/ITestS3ADeleteCost.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ public void testDirMarkersFileCreation() throws Throwable {
267267

268268
verifyMetrics(() -> {
269269
file(new Path(srcDir, "source.txt"));
270+
LOG.info("Metrics: {}\n{}", getMetricSummary(), getFileSystem());
270271
return "after touch(fs, srcFilePath) " + getMetricSummary();
271272
},
272273
with(DIRECTORIES_CREATED, 0),

0 commit comments

Comments
 (0)