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() {