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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7d17bc3a [MRESOLVER-352] - Duplicate METADATA_DOWNLOADING event is 
being sent (#280)
7d17bc3a is described below

commit 7d17bc3a8eff2cafe9fd486c407fa737e37d9ae0
Author: Alexey Venderov <[email protected]>
AuthorDate: Fri Apr 21 16:51:40 2023 +0200

    [MRESOLVER-352] - Duplicate METADATA_DOWNLOADING event is being sent (#280)
    
    Ensure that METADATA_DOWNLOADING event is sent only once in case the lock 
"upgrade" happens.
    
    --
    
    https://issues.apache.org/jira/browse/MRESOLVER-352
---
 .../internal/impl/DefaultMetadataResolver.java     |  9 +++------
 .../internal/impl/DefaultMetadataResolverTest.java | 22 ++++++++++++++++++++++
 .../internal/impl/RecordingRepositoryListener.java | 14 +++++++++++---
 3 files changed, 36 insertions(+), 9 deletions(-)

diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
index 48cca3be..a077d7ac 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
@@ -318,12 +318,6 @@ public class DefaultMetadataResolver implements 
MetadataResolver, Service {
                                         .getPathForRemoteMetadata(
                                                 metadata, 
request.getRepository(), request.getRequestContext()));
 
-                        metadataDownloading(
-                                session,
-                                trace,
-                                result.getRequest().getMetadata(),
-                                result.getRequest().getRepository());
-
                         ResolveTask task = new ResolveTask(
                                 session, trace, result, installFile, checks, 
policy.getChecksumPolicy());
                         tasks.add(task);
@@ -351,6 +345,9 @@ public class DefaultMetadataResolver implements 
MetadataResolver, Service {
                         RunnableErrorForwarder errorForwarder = new 
RunnableErrorForwarder();
 
                         for (ResolveTask task : tasks) {
+                            metadataDownloading(
+                                    task.session, task.trace, 
task.request.getMetadata(), task.request.getRepository());
+
                             executor.execute(errorForwarder.wrap(task));
                         }
 
diff --git 
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultMetadataResolverTest.java
 
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultMetadataResolverTest.java
index 48cabd73..6703e37e 100644
--- 
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultMetadataResolverTest.java
+++ 
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultMetadataResolverTest.java
@@ -28,6 +28,8 @@ import java.util.List;
 import java.util.Set;
 
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryEvent.EventType;
 import 
org.eclipse.aether.internal.impl.filter.DefaultRemoteRepositoryFilterManager;
 import org.eclipse.aether.internal.impl.filter.Filters;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
@@ -71,6 +73,8 @@ public class DefaultMetadataResolverTest {
 
     private DefaultRemoteRepositoryFilterManager remoteRepositoryFilterManager;
 
+    private RecordingRepositoryListener listener;
+
     @Before
     public void setup() throws Exception {
         remoteRepositoryFilterSources = new HashMap<>();
@@ -95,6 +99,9 @@ public class DefaultMetadataResolverTest {
         metadata = new DefaultMetadata("gid", "aid", "ver", 
"maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT);
         connector = new RecordingRepositoryConnector();
         connectorProvider.setConnector(connector);
+
+        listener = new RecordingRepositoryListener();
+        session.setRepositoryListener(listener);
     }
 
     @After
@@ -150,6 +157,21 @@ public class DefaultMetadataResolverTest {
                 ((TestLocalRepositoryManager) 
session.getLocalRepositoryManager()).getMetadataRegistration();
         assertTrue(metadataRegistration.contains(metadata));
         assertEquals(1, metadataRegistration.size());
+
+        List<RepositoryEvent> events =
+                listener.getEvents(EventType.METADATA_DOWNLOADING, 
EventType.METADATA_DOWNLOADED);
+        assertEquals(2, events.size());
+        assertSame(events.get(0).getTrace(), events.get(1).getTrace());
+
+        RepositoryEvent event = events.get(0);
+        assertEquals(EventType.METADATA_DOWNLOADING, event.getType());
+        assertEquals(metadata, event.getMetadata());
+
+        event = events.get(1);
+        assertEquals(EventType.METADATA_DOWNLOADED, event.getType());
+        assertEquals(metadata, event.getMetadata());
+        assertNull(event.getException());
+        assertNotNull(event.getFile());
     }
 
     @Test
diff --git 
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryListener.java
 
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryListener.java
index cd459e02..21b47508 100644
--- 
a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryListener.java
+++ 
b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryListener.java
@@ -19,8 +19,12 @@
 package org.eclipse.aether.internal.impl;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.eclipse.aether.RepositoryEvent;
 import org.eclipse.aether.RepositoryListener;
@@ -32,10 +36,14 @@ import static java.util.Objects.requireNonNull;
  */
 class RecordingRepositoryListener implements RepositoryListener {
 
-    private List<RepositoryEvent> events = Collections.synchronizedList(new 
ArrayList<RepositoryEvent>());
+    private final List<RepositoryEvent> events = 
Collections.synchronizedList(new ArrayList<>());
 
-    public List<RepositoryEvent> getEvents() {
-        return events;
+    public List<RepositoryEvent> getEvents(RepositoryEvent.EventType... types) 
{
+        if (types == null || types.length == 0) {
+            return events;
+        }
+        Set<RepositoryEvent.EventType> requiredTypes = 
EnumSet.copyOf(Arrays.asList(types));
+        return events.stream().filter(e -> 
requiredTypes.contains(e.getType())).collect(Collectors.toList());
     }
 
     public void clear() {

Reply via email to