You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/05/02 09:23:50 UTC

[maven-wagon] branch master updated: [WAGON-591] Transfer event is not restarted when request is redirected

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-wagon.git


The following commit(s) were added to refs/heads/master by this push:
     new 0e12ecb  [WAGON-591] Transfer event is not restarted when request is redirected
0e12ecb is described below

commit 0e12ecbcf0a08dd24965cd8c5876fc775d89f686
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Fri May 1 18:38:37 2020 +0200

    [WAGON-591] Transfer event is not restarted when request is redirected
    
    The newly introduced WagonRedirectStrategy controls all redirect events
    and dispatches now the approapriate (re-)start event to reset all counters.
    For this WagonHttpEntity is now package public and several getters have
    been added to invoke event listeners with approapriate bits.
---
 .../wagon/shared/http/AbstractHttpClientWagon.java | 21 +++++++++++--
 .../wagon/shared/http/WagonRedirectStrategy.java   | 35 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
index 1851d9b..fc809a7 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
@@ -118,7 +118,7 @@ import static org.apache.maven.wagon.shared.http.HttpMessageUtils.formatTransfer
 public abstract class AbstractHttpClientWagon
     extends StreamWagon
 {
-    private final class WagonHttpEntity
+    final class WagonHttpEntity
         extends AbstractHttpEntity
     {
         private final Resource resource;
@@ -153,9 +153,14 @@ public abstract class AbstractHttpClientWagon
             this.wagon = wagon;
         }
 
-        public long getContentLength()
+        public Resource getResource()
         {
-            return length;
+            return resource;
+        }
+
+        public Wagon getWagon()
+        {
+            return wagon;
         }
 
         public InputStream getContent()
@@ -168,6 +173,16 @@ public abstract class AbstractHttpClientWagon
             return stream;
         }
 
+        public File getSource()
+        {
+            return source;
+        }
+
+        public long getContentLength()
+        {
+            return length;
+        }
+
         public boolean isRepeatable()
         {
             return repeatable;
diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
index 5488f80..6694a38 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
@@ -21,6 +21,7 @@ package org.apache.maven.wagon.shared.http;
 
 import java.net.URI;
 
+import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
@@ -33,6 +34,10 @@ import org.apache.http.client.methods.RequestBuilder;
 import org.apache.http.impl.client.DefaultRedirectStrategy;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.util.Args;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.WagonHttpEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A custom redirect strategy for Apache Maven Wagon HttpClient.
@@ -43,6 +48,8 @@ import org.apache.http.util.Args;
 public class WagonRedirectStrategy extends DefaultRedirectStrategy
 {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger( WagonRedirectStrategy.class );
+
     private static final int SC_PERMANENT_REDIRECT = 308;
 
     public WagonRedirectStrategy()
@@ -85,6 +92,34 @@ public class WagonRedirectStrategy extends DefaultRedirectStrategy
             final HttpContext context ) throws ProtocolException
     {
         final URI uri = getLocationURI( request, response, context );
+        if ( request instanceof HttpEntityEnclosingRequest )
+        {
+            HttpEntityEnclosingRequest encRequest = (HttpEntityEnclosingRequest) request;
+            if ( encRequest.getEntity() instanceof AbstractHttpClientWagon.WagonHttpEntity )
+            {
+                AbstractHttpClientWagon.WagonHttpEntity whe = (WagonHttpEntity) encRequest.getEntity();
+                if ( whe.getWagon() instanceof AbstractHttpClientWagon )
+                {
+                    // Re-execute AbstractWagon#firePutStarted(Resource, File)
+                    AbstractHttpClientWagon httpWagon = (AbstractHttpClientWagon) whe.getWagon();
+                    TransferEvent transferEvent =
+                            new TransferEvent( httpWagon, whe.getResource(),
+                                               TransferEvent.TRANSFER_STARTED, TransferEvent.REQUEST_PUT );
+                    transferEvent.setTimestamp( System.currentTimeMillis() );
+                    transferEvent.setLocalFile( whe.getSource() );
+                    httpWagon.getTransferEventSupport().fireDebug(
+                            String.format( "Following redirect from '%s' to '%s'",
+                                          request.getRequestLine().getUri(), uri.toASCIIString() ) );
+                    httpWagon.getTransferEventSupport().fireTransferStarted( transferEvent );
+                }
+                else
+                {
+                    LOGGER.warn( "Cannot properly handle redirect transfer event, wagon has unexpected class: {}",
+                                whe.getWagon().getClass() );
+                }
+            }
+        }
+
         return RequestBuilder.copy( request ).setUri( uri ).build();
     }