EventsLogCleaner: Don't use lambda to create tasks When a task is created with a lambda expression, only the run() method of the Runnable interface is overridden. There is no way to override the toString method. This results in entries in the show-queue output like: com.ericsson.gerrit.plugins.eventslog.sql.EventsLogCleaner$$Lambda$313/774278169@576ed135 which is not readable. There are two types of task being created in this class, and from such an output format we can't tell which one is in the queue. Instead of using lambda expressions, define separate explicit classes for each task, overriding the toString method. Change-Id: I237a7711931ae23de6968e55214e9619437148c6
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java index b092829..efff521 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleaner.java
@@ -15,6 +15,7 @@ package com.ericsson.gerrit.plugins.eventslog.sql; import com.ericsson.gerrit.plugins.eventslog.EventCleanerPool; +import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.events.ProjectDeletedListener; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -31,12 +32,17 @@ private static final long INTERVAL = TimeUnit.DAYS.toSeconds(1); private final SQLClient eventsDb; + private final String pluginName; private ScheduledExecutorService pool; @Inject - EventsLogCleaner(@EventsDb SQLClient eventsDb, @EventCleanerPool ScheduledExecutorService pool) { + EventsLogCleaner( + @EventsDb SQLClient eventsDb, + @EventCleanerPool ScheduledExecutorService pool, + @PluginName String pluginName) { this.eventsDb = eventsDb; + this.pluginName = pluginName; this.pool = pool; } @@ -46,12 +52,12 @@ } public void removeProjectEventsAsync(String projectName) { - pool.submit(() -> eventsDb.removeProjectEvents(projectName)); + pool.submit(new RemoveProjectEventsTask(pluginName, projectName)); } public void scheduleCleaningWith(int maxAge) { pool.scheduleAtFixedRate( - () -> eventsDb.removeOldEvents(maxAge), getInitialDelay(), INTERVAL, TimeUnit.SECONDS); + new RemoveOldEventsTask(pluginName, maxAge), getInitialDelay(), INTERVAL, TimeUnit.SECONDS); } private long getInitialDelay() { @@ -62,4 +68,44 @@ } return Duration.between(now, next).getSeconds(); } + + private class RemoveProjectEventsTask implements Runnable { + private final String projectName; + private final String taskName; + + RemoveProjectEventsTask(String prefix, String projectName) { + this.projectName = projectName; + this.taskName = String.format("[%s] Remove events for project %s", prefix, projectName); + } + + @Override + public void run() { + eventsDb.removeProjectEvents(projectName); + } + + @Override + public String toString() { + return taskName; + } + } + + private class RemoveOldEventsTask implements Runnable { + private final int maxAge; + private final String taskName; + + RemoveOldEventsTask(String prefix, int maxAge) { + this.maxAge = maxAge; + this.taskName = String.format("[%s] Remove old events", prefix); + } + + @Override + public void run() { + eventsDb.removeOldEvents(maxAge); + } + + @Override + public String toString() { + return taskName; + } + } }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java index 09c21dc..11fa891 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsLogCleanerTest.java
@@ -32,6 +32,7 @@ @RunWith(MockitoJUnitRunner.class) public class EventsLogCleanerTest { private static final String PROJECT = "testProject"; + private static final String PLUGIN_NAME = "events-log"; @Mock private EventsLogConfig cfgMock; @Mock private EventsLogCleaner logCleanerMock; @@ -44,7 +45,7 @@ @Before public void setUp() throws Exception { when(event.getProjectName()).thenReturn(PROJECT); - eventsLogCleaner = new EventsLogCleaner(eventsDb, executor); + eventsLogCleaner = new EventsLogCleaner(eventsDb, executor, PLUGIN_NAME); } @Test