Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HADOOP-16499. S3A retry policy to be exponential #1246

Merged

Conversation

steveloughran
Copy link
Contributor

-exponential retry policy used
-retry interval = 1s
-retry attempts = 8
-docs updated

tested s3 ireland

Change-Id: I48b17af34a50b7291f2c360ee74dbce7540556b4

-exponential retry policy used
-retry interval = 1s
-retry attempts = 8
-docs updated

Change-Id: I48b17af34a50b7291f2c360ee74dbce7540556b4
@steveloughran steveloughran added enhancement fs/s3 changes related to hadoop-aws; submitter must declare test endpoint labels Aug 7, 2019
…d were generating failures

Change-Id: Id3692c29584d08749e1a78f4c95c3298a61672b7
@steveloughran
Copy link
Contributor Author

test run has shown some tuning is needed on those which simulate failures

Change-Id: Idb034b81c12246bcb69de050ac91643c6ac34327
@steveloughran
Copy link
Contributor Author

latest run against ireland with s3guard and versioning

Change-Id: I2c62aceb344a7bb531860651babce9ff85486df5
@steveloughran
Copy link
Contributor Author

For reviewers: the reason I move off the fs.s3a.attempts.maximum value is that is what is used in the AWS SDK for its retries, and I didnt want changes in our wrapper retry logic to change that in case we made it less resilient to failures

@steveloughran
Copy link
Contributor Author

two other tests timed out on a test run

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 600.566 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.ITestS3ADelayedFNF
[ERROR] testNotFoundFirstRead(org.apache.hadoop.fs.s3a.ITestS3ADelayedFNF)  Time elapsed: 600.019 s  <<< ERROR!
java.lang.Exception: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:385)
	at java.io.FilterInputStream.read(FilterInputStream.java:83)
	at org.apache.hadoop.fs.s3a.ITestS3ADelayedFNF$1.call(ITestS3ADelayedFNF.java:67)
	at org.apache.hadoop.fs.s3a.ITestS3ADelayedFNF$1.call(ITestS3ADelayedFNF.java:64)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3ADelayedFNF.testNotFoundFirstRead(ITestS3ADelayedFNF.java:63)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:74)

[ERROR] Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 623.759 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.ITestS3AInconsistency
[ERROR] testOpenDeleteRead(org.apache.hadoop.fs.s3a.ITestS3AInconsistency)  Time elapsed: 600.012 s  <<< ERROR!
java.lang.Exception: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:385)
	at java.io.FilterInputStream.read(FilterInputStream.java:83)
	at org.apache.hadoop.fs.s3a.ITestS3AInconsistency.lambda$null$0(ITestS3AInconsistency.java:128)
	at org.apache.hadoop.fs.s3a.ITestS3AInconsistency$$Lambda$54/771027109.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3AInconsistency.lambda$testOpenDeleteRead$1(ITestS3AInconsistency.java:128)
	at org.apache.hadoop.fs.s3a.ITestS3AInconsistency$$Lambda$53/2077283032.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils$VoidCaller.call(LambdaTestUtils.java:985)
	at org.apache.hadoop.test.LambdaTestUtils$VoidCaller.call(LambdaTestUtils.java:976)
	at org.apache.hadoop.test.LambdaTestUtils.eventually(LambdaTestUtils.java:252)
	at org.apache.hadoop.test.LambdaTestUtils.eventually(LambdaTestUtils.java:304)
	at org.apache.hadoop.test.LambdaTestUtils.eventually(LambdaTestUtils.java:350)
	at org.apache.hadoop.fs.s3a.ITestS3AInconsistency.testOpenDeleteRead(ITestS3AInconsistency.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:74)

@hadoop-yetus
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 45 Docker mode activated.
_ Prechecks _
+1 dupname 1 No case conflicting files found.
+1 @author 0 The patch does not contain any @author tags.
-1 test4tests 0 The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.
_ trunk Compile Tests _
0 mvndep 78 Maven dependency ordering for branch
+1 mvninstall 1151 trunk passed
+1 compile 1120 trunk passed
+1 checkstyle 142 trunk passed
+1 mvnsite 116 trunk passed
+1 shadedclient 953 branch has no errors when building and testing our client artifacts.
+1 javadoc 91 trunk passed
0 spotbugs 64 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 195 trunk passed
_ Patch Compile Tests _
0 mvndep 27 Maven dependency ordering for patch
+1 mvninstall 85 the patch passed
+1 compile 1102 the patch passed
+1 javac 1102 the patch passed
+1 checkstyle 136 the patch passed
+1 mvnsite 111 the patch passed
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 2 The patch has no ill-formed XML file.
+1 shadedclient 668 patch has no errors when building and testing our client artifacts.
+1 javadoc 94 the patch passed
+1 findbugs 206 the patch passed
_ Other Tests _
+1 unit 556 hadoop-common in the patch passed.
-1 unit 3071 hadoop-aws in the patch failed.
+1 asflicense 42 The patch does not generate ASF License warnings.
9996
Reason Tests
Failed junit tests hadoop.fs.s3a.commit.staging.TestStagingCommitter
Subsystem Report/Notes
Docker Client=19.03.1 Server=19.03.1 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/1/artifact/out/Dockerfile
GITHUB PR #1246
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient xml findbugs checkstyle
uname Linux 97cfa4d0c2db 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality personality/hadoop.sh
git revision trunk / 70f4674
Default Java 1.8.0_212
unit https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/1/artifact/out/patch-unit-hadoop-tools_hadoop-aws.txt
Test Results https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/1/testReport/
Max. process+thread count 1417 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/1/console
versions git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Comment
0 reexec 50 Docker mode activated.
_ Prechecks _
+1 dupname 0 No case conflicting files found.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 2 new or modified test files.
_ trunk Compile Tests _
0 mvndep 77 Maven dependency ordering for branch
+1 mvninstall 1044 trunk passed
+1 compile 1049 trunk passed
+1 checkstyle 135 trunk passed
+1 mvnsite 119 trunk passed
+1 shadedclient 932 branch has no errors when building and testing our client artifacts.
+1 javadoc 83 trunk passed
0 spotbugs 63 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 179 trunk passed
_ Patch Compile Tests _
0 mvndep 25 Maven dependency ordering for patch
+1 mvninstall 83 the patch passed
+1 compile 1091 the patch passed
+1 javac 1091 the patch passed
+1 checkstyle 138 the patch passed
+1 mvnsite 111 the patch passed
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 2 The patch has no ill-formed XML file.
+1 shadedclient 634 patch has no errors when building and testing our client artifacts.
+1 javadoc 87 the patch passed
+1 findbugs 197 the patch passed
_ Other Tests _
+1 unit 529 hadoop-common in the patch passed.
+1 unit 73 hadoop-aws in the patch passed.
+1 asflicense 44 The patch does not generate ASF License warnings.
6685
Subsystem Report/Notes
Docker Client=19.03.1 Server=19.03.1 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/2/artifact/out/Dockerfile
GITHUB PR #1246
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient xml findbugs checkstyle
uname Linux 61abd3b89561 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality personality/hadoop.sh
git revision trunk / 827dbb1
Default Java 1.8.0_212
Test Results https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/2/testReport/
Max. process+thread count 1429 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/2/console
versions git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

Tuning some tests to cope with shorter timeouts by setting the timeouts to ranges which they are happy with.

For ITestS3AInconsistency that means we want S3Guard to time out eventually. All the various values are no all configured in one place so their requirements are visible.

Change-Id: I8fffc95d79a74f371b2ff78271e58530857b73cd
@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Comment
0 reexec 70 Docker mode activated.
_ Prechecks _
+1 dupname 0 No case conflicting files found.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 2 new or modified test files.
_ trunk Compile Tests _
0 mvndep 78 Maven dependency ordering for branch
+1 mvninstall 1160 trunk passed
+1 compile 1082 trunk passed
+1 checkstyle 154 trunk passed
+1 mvnsite 126 trunk passed
+1 shadedclient 1086 branch has no errors when building and testing our client artifacts.
+1 javadoc 96 trunk passed
0 spotbugs 65 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 188 trunk passed
_ Patch Compile Tests _
0 mvndep 24 Maven dependency ordering for patch
+1 mvninstall 81 the patch passed
+1 compile 1076 the patch passed
+1 javac 1076 the patch passed
+1 checkstyle 160 the patch passed
+1 mvnsite 124 the patch passed
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 3 The patch has no ill-formed XML file.
+1 shadedclient 751 patch has no errors when building and testing our client artifacts.
+1 javadoc 102 the patch passed
+1 findbugs 226 the patch passed
_ Other Tests _
+1 unit 590 hadoop-common in the patch passed.
+1 unit 102 hadoop-aws in the patch passed.
+1 asflicense 54 The patch does not generate ASF License warnings.
7342
Subsystem Report/Notes
Docker Client=18.09.7 Server=18.09.7 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/3/artifact/out/Dockerfile
GITHUB PR #1246
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient xml findbugs checkstyle
uname Linux 7072121f954d 4.15.0-52-generic #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality personality/hadoop.sh
git revision trunk / 827dbb1
Default Java 1.8.0_212
Test Results https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/3/testReport/
Max. process+thread count 1346 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/3/console
versions git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

@steveloughran
Copy link
Contributor Author

Turns out there are even more tests which have expectations that connectivity/read exceptions retry for a time less than the test timeout, i.e. the default of 20s. Shrink the retry time to a couple of seconds and the tests are faster

[INFO] Tests run: 45, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 126.465 s - in org.apache.hadoop.fs.s3a.select.ITestS3Select[INFO] Tests run: 135, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 387.994 s - in org.apache.hadoop.fs.s3a.ITestS3ARemoteFileChanged[ERROR] Tests run: 28, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 1,208.394 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.ITestS3AConfiguration[ERROR] testProxyConnection(org.apache.hadoop.fs.s3a.ITestS3AConfiguration)  Time elapsed: 600.012 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.retry(Invoker.java:310)
	at org.apache.hadoop.fs.s3a.Invoker.retry(Invoker.java:285)
	at org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:468)
	at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:363)
	at org.apache.hadoop.fs.s3a.S3ATestUtils.createTestFileSystem(S3ATestUtils.java:176)
	at org.apache.hadoop.fs.s3a.S3ATestUtils.createTestFileSystem(S3ATestUtils.java:138)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.lambda$expectFSCreateFailure$0(ITestS3AConfiguration.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration$$Lambda$8/1830464825.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.expectFSCreateFailure(ITestS3AConfiguration.java:147)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.testProxyConnection(ITestS3AConfiguration.java:132)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] testAutomaticProxyPortSelection(org.apache.hadoop.fs.s3a.ITestS3AConfiguration)  Time elapsed: 599.994 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.retry(Invoker.java:310)
	at org.apache.hadoop.fs.s3a.Invoker.retry(Invoker.java:285)
	at org.apache.hadoop.fs.s3a.S3AFileSystem.verifyBucketExists(S3AFileSystem.java:468)
	at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:363)
	at org.apache.hadoop.fs.s3a.S3ATestUtils.createTestFileSystem(S3ATestUtils.java:176)
	at org.apache.hadoop.fs.s3a.S3ATestUtils.createTestFileSystem(S3ATestUtils.java:138)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.lambda$expectFSCreateFailure$0(ITestS3AConfiguration.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration$$Lambda$8/1830464825.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.expectFSCreateFailure(ITestS3AConfiguration.java:147)
	at org.apache.hadoop.fs.s3a.ITestS3AConfiguration.testAutomaticProxyPortSelection(ITestS3AConfiguration.java:177)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] Tests run: 22, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 2,492.747 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations[ERROR] testOutOfBandDeletes[auth=true](org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations)  Time elapsed: 599.995 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:464)
	at java.io.DataInputStream.read(DataInputStream.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.lambda$expectExceptionWhenReading$7(ITestS3GuardOutOfBandOperations.java:925)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations$$Lambda$53/1880629242.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.expectExceptionWhenReading(ITestS3GuardOutOfBandOperations.java:923)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.outOfBandDeletes(ITestS3GuardOutOfBandOperations.java:609)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.testOutOfBandDeletes(ITestS3GuardOutOfBandOperations.java:275)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] testListingDelete[auth=true](org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations)  Time elapsed: 599.993 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:464)
	at java.io.DataInputStream.read(DataInputStream.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.lambda$expectExceptionWhenReading$7(ITestS3GuardOutOfBandOperations.java:925)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations$$Lambda$53/1880629242.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.expectExceptionWhenReading(ITestS3GuardOutOfBandOperations.java:923)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.deleteFileInListing(ITestS3GuardOutOfBandOperations.java:907)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.testListingDelete(ITestS3GuardOutOfBandOperations.java:290)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] testOutOfBandDeletes[auth=false](org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations)  Time elapsed: 599.994 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:464)
	at java.io.DataInputStream.read(DataInputStream.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.lambda$expectExceptionWhenReading$7(ITestS3GuardOutOfBandOperations.java:925)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations$$Lambda$53/1880629242.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.expectExceptionWhenReading(ITestS3GuardOutOfBandOperations.java:923)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.outOfBandDeletes(ITestS3GuardOutOfBandOperations.java:609)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.testOutOfBandDeletes(ITestS3GuardOutOfBandOperations.java:275)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)
[ERROR] testListingDelete[auth=false](org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations)  Time elapsed: 599.994 s  <<< ERROR!org.junit.runners.model.TestTimedOutException: test timed out after 600000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at org.apache.hadoop.fs.s3a.Invoker.retryUntranslated(Invoker.java:433)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:342)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:220)
	at org.apache.hadoop.fs.s3a.Invoker.maybeRetry(Invoker.java:264)
	at org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:351)
	at org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:464)
	at java.io.DataInputStream.read(DataInputStream.java:149)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.lambda$expectExceptionWhenReading$7(ITestS3GuardOutOfBandOperations.java:925)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations$$Lambda$53/1880629242.call(Unknown Source)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:498)
	at org.apache.hadoop.test.LambdaTestUtils.intercept(LambdaTestUtils.java:384)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.expectExceptionWhenReading(ITestS3GuardOutOfBandOperations.java:923)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.deleteFileInListing(ITestS3GuardOutOfBandOperations.java:907)
	at org.apache.hadoop.fs.s3a.ITestS3GuardOutOfBandOperations.testListingDelete(ITestS3GuardOutOfBandOperations.java:290)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)

it turns out that with a long retry interval, various tests which were expecting failures, be it in network setup or OOB tests were using the default retry times -extend them and tests  take longer, sometimes so much that they time out.

This patch cranks back the retry intervals on more tests to fail much faster than before, which is actually an improvement.

Considered but not done: changing the defaults in the AbstractS3ATestBase; It seems better to use the real defaults and identify those tests which expect to retry a lot

Change-Id: I1e9bac752907a6ced8a0bc7c37c95006dd8d6e98
@steveloughran
Copy link
Contributor Author

final test run: all good. test failure in [ERROR] {{test_300_MetastorePrune}} which is HADOOP-16481 with pr #1209

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Comment
0 reexec 44 Docker mode activated.
_ Prechecks _
+1 dupname 1 No case conflicting files found.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 7 new or modified test files.
_ trunk Compile Tests _
0 mvndep 35 Maven dependency ordering for branch
+1 mvninstall 1103 trunk passed
+1 compile 1090 trunk passed
+1 checkstyle 149 trunk passed
+1 mvnsite 132 trunk passed
+1 shadedclient 1044 branch has no errors when building and testing our client artifacts.
+1 javadoc 109 trunk passed
0 spotbugs 68 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 193 trunk passed
_ Patch Compile Tests _
0 mvndep 25 Maven dependency ordering for patch
+1 mvninstall 80 the patch passed
+1 compile 1031 the patch passed
+1 javac 1031 the patch passed
-0 checkstyle 148 root: The patch generated 2 new + 27 unchanged - 0 fixed = 29 total (was 27)
+1 mvnsite 120 the patch passed
+1 whitespace 1 The patch has no whitespace issues.
+1 xml 1 The patch has no ill-formed XML file.
+1 shadedclient 700 patch has no errors when building and testing our client artifacts.
+1 javadoc 108 the patch passed
+1 findbugs 202 the patch passed
_ Other Tests _
+1 unit 552 hadoop-common in the patch passed.
+1 unit 81 hadoop-aws in the patch passed.
+1 asflicense 53 The patch does not generate ASF License warnings.
7030
Subsystem Report/Notes
Docker Client=19.03.1 Server=19.03.1 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/4/artifact/out/Dockerfile
GITHUB PR #1246
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient xml findbugs checkstyle
uname Linux e530c51b681e 4.4.0-157-generic #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality personality/hadoop.sh
git revision trunk / 3cc0ace
Default Java 1.8.0_212
checkstyle https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/4/artifact/out/diff-checkstyle-root.txt
Test Results https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/4/testReport/
Max. process+thread count 1426 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/4/console
versions git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

@hadoop-yetus
Copy link

🎊 +1 overall

Vote Subsystem Runtime Comment
0 reexec 71 Docker mode activated.
_ Prechecks _
+1 dupname 0 No case conflicting files found.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 7 new or modified test files.
_ trunk Compile Tests _
0 mvndep 26 Maven dependency ordering for branch
+1 mvninstall 1238 trunk passed
+1 compile 1220 trunk passed
+1 checkstyle 140 trunk passed
+1 mvnsite 129 trunk passed
+1 shadedclient 1060 branch has no errors when building and testing our client artifacts.
+1 javadoc 95 trunk passed
0 spotbugs 62 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 199 trunk passed
_ Patch Compile Tests _
0 mvndep 25 Maven dependency ordering for patch
+1 mvninstall 87 the patch passed
+1 compile 1209 the patch passed
+1 javac 1209 the patch passed
-0 checkstyle 164 root: The patch generated 2 new + 27 unchanged - 0 fixed = 29 total (was 27)
+1 mvnsite 118 the patch passed
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 1 The patch has no ill-formed XML file.
+1 shadedclient 701 patch has no errors when building and testing our client artifacts.
+1 javadoc 93 the patch passed
+1 findbugs 222 the patch passed
_ Other Tests _
+1 unit 571 hadoop-common in the patch passed.
+1 unit 80 hadoop-aws in the patch passed.
+1 asflicense 41 The patch does not generate ASF License warnings.
7471
Subsystem Report/Notes
Docker Client=19.03.1 Server=19.03.1 base: https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/5/artifact/out/Dockerfile
GITHUB PR #1246
Optional Tests dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient xml findbugs checkstyle
uname Linux 9a6daceb2b03 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Build tool maven
Personality personality/hadoop.sh
git revision trunk / 00b5a27
Default Java 1.8.0_212
checkstyle https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/5/artifact/out/diff-checkstyle-root.txt
Test Results https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/5/testReport/
Max. process+thread count 1388 (vs. ulimit of 5500)
modules C: hadoop-common-project/hadoop-common hadoop-tools/hadoop-aws U: .
Console output https://builds.apache.org/job/hadoop-multibranch/job/PR-1246/5/console
versions git=2.7.4 maven=3.3.9 findbugs=3.1.0-RC1
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

@steveloughran
Copy link
Contributor Author

one question for reviewers, what are the good initial values?

with 500ms and 7 attempts, that's 64s of delay, with 32s being the final pause.
with 1s and 6 attempts we'd go to the same values, with a larger gap in the initial operation.

I don't want to massively expand the time to fail beyond 1m as this timeout also handles things like time to give up on network errors and we don't want to block for vast amounts of time there.

@bgaborg
Copy link

bgaborg commented Aug 9, 2019

Change seems good to me +1 on it.
About the values: I think this is as good as it gets. If we get any feedback from our customers (so other components) that something is slow, we may want to finetune these values. But right now the

with 500ms and 7 attempts, that's 64s of delay, with 32s being the final pause.

looks reasonable. I'm running the test now, I'll be back with the results soon.

@steveloughran
Copy link
Contributor Author

thx. i will wait for your test run before committing

@bgaborg
Copy link

bgaborg commented Aug 9, 2019

Running tests against ireland, I got the following error:

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 300.137 s <<< FAILURE! - in org.apache.hadoop.fs.s3a.s3guard.ITestS3GuardConcurrentOps
[ERROR] testConcurrentTableCreations(org.apache.hadoop.fs.s3a.s3guard.ITestS3GuardConcurrentOps)  Time elapsed: 300.012 s  <<< ERROR!
org.junit.runners.model.TestTimedOutException: test timed out after 300000 milliseconds
	at java.lang.Thread.sleep(Native Method)
	at com.amazonaws.waiters.FixedDelayStrategy.delayBeforeNextRetry(FixedDelayStrategy.java:45)
	at com.amazonaws.waiters.WaiterExecution.safeCustomDelay(WaiterExecution.java:118)
	at com.amazonaws.waiters.WaiterExecution.pollResource(WaiterExecution.java:82)
	at com.amazonaws.waiters.WaiterImpl.run(WaiterImpl.java:88)
	at com.amazonaws.services.dynamodbv2.document.Table.waitForDelete(Table.java:502)
	at org.apache.hadoop.fs.s3a.s3guard.ITestS3GuardConcurrentOps.deleteTable(ITestS3GuardConcurrentOps.java:87)
	at org.apache.hadoop.fs.s3a.s3guard.ITestS3GuardConcurrentOps.testConcurrentTableCreations(ITestS3GuardConcurrentOps.java:178)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.lang.Thread.run(Thread.java:748)

Otherwise nothing else. This failure is intermittent and I will not show on re-run.

@bgaborg
Copy link

bgaborg commented Aug 9, 2019

seems good to me, +1; will commit soon.
(test failure is a separate issue)

Copy link

@bgaborg bgaborg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1; committing.

@bgaborg bgaborg merged commit e25a5c2 into apache:trunk Aug 9, 2019
amahussein pushed a commit to amahussein/hadoop that referenced this pull request Oct 29, 2019
@steveloughran steveloughran deleted the s3/HADOOP-16499-exponential-retry branch October 15, 2021 19:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug fs/s3 changes related to hadoop-aws; submitter must declare test endpoint
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants