From a466287dc1fd8ba61f8da3be8f454da716f30380 Mon Sep 17 00:00:00 2001 From: Pash Kaushik Date: Wed, 6 May 2020 15:32:01 -0700 Subject: [PATCH 1/3] Improve thread safety --- src/main/java/hudson/plugins/s3/S3ArtifactsAction.java | 7 ++++--- src/main/java/hudson/plugins/s3/S3BucketPublisher.java | 5 +++-- src/main/java/hudson/plugins/s3/S3CopyArtifact.java | 3 ++- src/main/java/hudson/plugins/s3/S3Profile.java | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java b/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java index 1f4608af..78634bc5 100644 --- a/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java +++ b/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.servlet.ServletException; @@ -25,9 +26,9 @@ public class S3ArtifactsAction implements RunAction2 { private final Run build; // Compatibility for old versions private final String profile; - private final List artifacts; + private final CopyOnWriteArrayList artifacts; - public S3ArtifactsAction(Run run, S3Profile profile, List artifacts) { + public S3ArtifactsAction(Run run, S3Profile profile, CopyOnWriteArrayList artifacts) { this.build = run; this.profile = profile.getName(); this.artifacts = artifacts; @@ -62,7 +63,7 @@ public String getProfile() { } @Exported - public List getArtifacts() { + public CopyOnWriteArrayList getArtifacts() { return artifacts; } diff --git a/src/main/java/hudson/plugins/s3/S3BucketPublisher.java b/src/main/java/hudson/plugins/s3/S3BucketPublisher.java index 55e05f81..29dc070f 100644 --- a/src/main/java/hudson/plugins/s3/S3BucketPublisher.java +++ b/src/main/java/hudson/plugins/s3/S3BucketPublisher.java @@ -48,6 +48,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; @@ -244,7 +245,7 @@ public void perform(@Nonnull Run run, @Nonnull FilePath ws, @Nonnull Launc try { final Map envVars = run.getEnvironment(listener); final Map record = Maps.newHashMap(); - final List artifacts = Lists.newArrayList(); + final CopyOnWriteArrayList artifacts = new CopyOnWriteArrayList(); for (Entry entry : entries) { if (entry.noUploadOnFailure && Result.FAILURE.equals(run.getResult())) { @@ -320,7 +321,7 @@ public void perform(@Nonnull Run run, @Nonnull FilePath ws, @Nonnull Launc } } - private void addS3ArtifactsAction(Run run, S3Profile profile, List artifacts) { + private void addS3ArtifactsAction(Run run, S3Profile profile, CopyOnWriteArrayList artifacts) { S3ArtifactsAction existingAction = run.getAction(S3ArtifactsAction.class); if (existingAction != null) { existingAction.getArtifacts().addAll(artifacts); diff --git a/src/main/java/hudson/plugins/s3/S3CopyArtifact.java b/src/main/java/hudson/plugins/s3/S3CopyArtifact.java index 1ab7d8bd..499263b3 100644 --- a/src/main/java/hudson/plugins/s3/S3CopyArtifact.java +++ b/src/main/java/hudson/plugins/s3/S3CopyArtifact.java @@ -70,6 +70,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; @@ -267,7 +268,7 @@ private boolean perform(Run src, Run dst, String includeFilter, String excl } targetDir.mkdirs(); - final List records = profile.downloadAll(src, action.getArtifacts(), includeFilter, excludeFilter, targetDir, isFlatten()); + final List records = profile.downloadAll(src, new CopyOnWriteArrayList<>(action.getArtifacts()), includeFilter, excludeFilter, targetDir, isFlatten()); final Map fingerprints = Maps.newHashMap(); for(FingerprintRecord record : records) { diff --git a/src/main/java/hudson/plugins/s3/S3Profile.java b/src/main/java/hudson/plugins/s3/S3Profile.java index 9a3d1fa7..042da692 100644 --- a/src/main/java/hudson/plugins/s3/S3Profile.java +++ b/src/main/java/hudson/plugins/s3/S3Profile.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; import hudson.ProxyConfiguration; @@ -231,7 +232,7 @@ public List list(Run build, String bucket) { * Download all artifacts from a given build */ public List downloadAll(Run build, - final List artifacts, + final CopyOnWriteArrayList artifacts, final String includeFilter, final String excludeFilter, final FilePath targetDir, From d57459a28cc436ccc888716425170101a7b64ffb Mon Sep 17 00:00:00 2001 From: Pash Kaushik Date: Wed, 6 May 2020 15:51:07 -0700 Subject: [PATCH 2/3] Minimize scope --- src/main/java/hudson/plugins/s3/S3ArtifactsAction.java | 7 +++---- src/main/java/hudson/plugins/s3/S3BucketPublisher.java | 4 ++-- src/main/java/hudson/plugins/s3/S3CopyArtifact.java | 3 +-- src/main/java/hudson/plugins/s3/S3Profile.java | 3 +-- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java b/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java index 78634bc5..1f4608af 100644 --- a/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java +++ b/src/main/java/hudson/plugins/s3/S3ArtifactsAction.java @@ -5,7 +5,6 @@ import java.util.Date; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; import javax.servlet.ServletException; @@ -26,9 +25,9 @@ public class S3ArtifactsAction implements RunAction2 { private final Run build; // Compatibility for old versions private final String profile; - private final CopyOnWriteArrayList artifacts; + private final List artifacts; - public S3ArtifactsAction(Run run, S3Profile profile, CopyOnWriteArrayList artifacts) { + public S3ArtifactsAction(Run run, S3Profile profile, List artifacts) { this.build = run; this.profile = profile.getName(); this.artifacts = artifacts; @@ -63,7 +62,7 @@ public String getProfile() { } @Exported - public CopyOnWriteArrayList getArtifacts() { + public List getArtifacts() { return artifacts; } diff --git a/src/main/java/hudson/plugins/s3/S3BucketPublisher.java b/src/main/java/hudson/plugins/s3/S3BucketPublisher.java index 29dc070f..8816a455 100644 --- a/src/main/java/hudson/plugins/s3/S3BucketPublisher.java +++ b/src/main/java/hudson/plugins/s3/S3BucketPublisher.java @@ -245,7 +245,7 @@ public void perform(@Nonnull Run run, @Nonnull FilePath ws, @Nonnull Launc try { final Map envVars = run.getEnvironment(listener); final Map record = Maps.newHashMap(); - final CopyOnWriteArrayList artifacts = new CopyOnWriteArrayList(); + final List artifacts = new CopyOnWriteArrayList(); for (Entry entry : entries) { if (entry.noUploadOnFailure && Result.FAILURE.equals(run.getResult())) { @@ -321,7 +321,7 @@ public void perform(@Nonnull Run run, @Nonnull FilePath ws, @Nonnull Launc } } - private void addS3ArtifactsAction(Run run, S3Profile profile, CopyOnWriteArrayList artifacts) { + private void addS3ArtifactsAction(Run run, S3Profile profile, List artifacts) { S3ArtifactsAction existingAction = run.getAction(S3ArtifactsAction.class); if (existingAction != null) { existingAction.getArtifacts().addAll(artifacts); diff --git a/src/main/java/hudson/plugins/s3/S3CopyArtifact.java b/src/main/java/hudson/plugins/s3/S3CopyArtifact.java index 499263b3..1ab7d8bd 100644 --- a/src/main/java/hudson/plugins/s3/S3CopyArtifact.java +++ b/src/main/java/hudson/plugins/s3/S3CopyArtifact.java @@ -70,7 +70,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; @@ -268,7 +267,7 @@ private boolean perform(Run src, Run dst, String includeFilter, String excl } targetDir.mkdirs(); - final List records = profile.downloadAll(src, new CopyOnWriteArrayList<>(action.getArtifacts()), includeFilter, excludeFilter, targetDir, isFlatten()); + final List records = profile.downloadAll(src, action.getArtifacts(), includeFilter, excludeFilter, targetDir, isFlatten()); final Map fingerprints = Maps.newHashMap(); for(FingerprintRecord record : records) { diff --git a/src/main/java/hudson/plugins/s3/S3Profile.java b/src/main/java/hudson/plugins/s3/S3Profile.java index 042da692..9a3d1fa7 100644 --- a/src/main/java/hudson/plugins/s3/S3Profile.java +++ b/src/main/java/hudson/plugins/s3/S3Profile.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; import hudson.ProxyConfiguration; @@ -232,7 +231,7 @@ public List list(Run build, String bucket) { * Download all artifacts from a given build */ public List downloadAll(Run build, - final CopyOnWriteArrayList artifacts, + final List artifacts, final String includeFilter, final String excludeFilter, final FilePath targetDir, From 5790fed949423307d156b58d0cec354e9b79c322 Mon Sep 17 00:00:00 2001 From: Pash Kaushik Date: Wed, 6 May 2020 15:58:57 -0700 Subject: [PATCH 3/3] Trigger notification