mirror of
https://github.com/apache/maven-mvnd.git
synced 2025-09-12 05:59:33 +00:00
Minor improvements to the LockingEventSpy code
This commit is contained in:
@@ -48,7 +48,9 @@ public class LockingEventSpy extends AbstractEventSpy {
|
|||||||
private Lock getLock(ExecutionEvent event) {
|
private Lock getLock(ExecutionEvent event) {
|
||||||
SessionData data = event.getSession().getRepositorySession().getData();
|
SessionData data = event.getSession().getRepositorySession().getData();
|
||||||
Map<MavenProject, Lock> locks = (Map) data.get(LOCKS_KEY);
|
Map<MavenProject, Lock> locks = (Map) data.get(LOCKS_KEY);
|
||||||
|
// initialize the value if not already done (in case of a concurrent access) to the method
|
||||||
if (locks == null) {
|
if (locks == null) {
|
||||||
|
// the call to data.set(k, null, v) is effectively a call to data.putIfAbsent(k, v)
|
||||||
data.set(LOCKS_KEY, null, new ConcurrentHashMap<>());
|
data.set(LOCKS_KEY, null, new ConcurrentHashMap<>());
|
||||||
locks = (Map) data.get(LOCKS_KEY);
|
locks = (Map) data.get(LOCKS_KEY);
|
||||||
}
|
}
|
||||||
@@ -58,15 +60,15 @@ public class LockingEventSpy extends AbstractEventSpy {
|
|||||||
@Override
|
@Override
|
||||||
public void onEvent(Object event) throws Exception {
|
public void onEvent(Object event) throws Exception {
|
||||||
if (event instanceof ExecutionEvent) {
|
if (event instanceof ExecutionEvent) {
|
||||||
ExecutionEvent ee = (ExecutionEvent) event;
|
ExecutionEvent executionEvent = (ExecutionEvent) event;
|
||||||
switch (ee.getType()) {
|
switch (executionEvent.getType()) {
|
||||||
case ProjectStarted:
|
case ProjectStarted:
|
||||||
case ForkedProjectStarted: {
|
case ForkedProjectStarted: {
|
||||||
Lock lock = getLock(ee);
|
Lock lock = getLock(executionEvent);
|
||||||
if (!lock.tryLock()) {
|
if (!lock.tryLock()) {
|
||||||
logger.warn("Suspending concurrent execution of project " + ee.getProject());
|
logger.warn("Suspending concurrent execution of project '{}'", executionEvent.getProject());
|
||||||
getLock(ee).lockInterruptibly();
|
lock.lockInterruptibly();
|
||||||
logger.warn("Resuming execution of project " + ee.getProject());
|
logger.warn("Resuming execution of project '{}'", executionEvent.getProject());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -74,7 +76,7 @@ public class LockingEventSpy extends AbstractEventSpy {
|
|||||||
case ProjectFailed:
|
case ProjectFailed:
|
||||||
case ForkedProjectSucceeded:
|
case ForkedProjectSucceeded:
|
||||||
case ForkedProjectFailed:
|
case ForkedProjectFailed:
|
||||||
getLock(ee).unlock();
|
getLock(executionEvent).unlock();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user