Merge branch 'stable-2.15' into stable-2.16 * stable-2.15: Upgrade bazlets to latest stable-2.14 to build with 2.14.20 API Change-Id: Iebd91ffbccc3d4d763e711bdd1b7684e3e83a77b
diff --git a/WORKSPACE b/WORKSPACE index 3590b03..a344e21 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,7 +3,7 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "8386b3fbf80e375f0a10c8386c0a8dfe260c5c1b", + commit = "c827ba79413585ab9dfc1bbd0d7f609eedd6aa80", #local_path = "/home/<user>/projects/bazlets", )
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java index 15f830a..6a020c5 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
@@ -14,8 +14,8 @@ package com.ericsson.gerrit.plugins.eventslog; -import com.google.gerrit.common.EventListener; import com.google.gerrit.server.events.Event; +import com.google.gerrit.server.events.EventListener; import com.google.gerrit.server.events.ProjectEvent; import com.google.inject.Inject; import java.util.concurrent.ScheduledExecutorService;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java index b888425..3f905c7 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
@@ -15,10 +15,10 @@ package com.ericsson.gerrit.plugins.eventslog; import com.ericsson.gerrit.plugins.eventslog.sql.EventsLogCleaner; -import com.google.gerrit.common.EventListener; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.events.ProjectDeletedListener; import com.google.gerrit.extensions.registration.DynamicSet; +import com.google.gerrit.server.events.EventListener; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Scopes;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java index f05e33d..c04d6ac 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
@@ -14,6 +14,7 @@ package com.ericsson.gerrit.plugins.eventslog; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.Url; import com.google.gerrit.server.CurrentUser; import com.google.inject.Inject; @@ -27,12 +28,10 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class EventsRestApiServlet extends HttpServlet { - private static final Logger log = LoggerFactory.getLogger(EventsRestApiServlet.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); private static final long serialVersionUID = 1L; private final EventStore store; @@ -63,13 +62,13 @@ out.write(event + "\n"); } } catch (MalformedQueryException e) { - log.error("Bad Request", e); + log.atSevere().withCause(e).log("Bad Request"); rsp.sendError(HttpServletResponse.SC_BAD_REQUEST); } catch (ServiceUnavailableException e) { - log.error("Service Unavailable", e); + log.atSevere().withCause(e).log("Service Unavailable"); rsp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); } catch (EventsLogException e) { - log.error("Could not query from request parameters", e); + log.atSevere().withCause(e).log("Could not query from request parameters"); } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java index 9e538e6..b554ecd 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
@@ -29,6 +29,7 @@ import com.google.common.base.Supplier; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.events.ProjectEvent; import com.google.gerrit.server.events.SupplierSerializer; import com.google.gson.Gson; @@ -42,11 +43,9 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class SQLClient { - private static final Logger log = LoggerFactory.getLogger(SQLClient.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); private final Gson gson; private final SQLDialect databaseDialect; @@ -144,9 +143,11 @@ TABLE_NAME, DATE_ENTRY, new Timestamp(System.currentTimeMillis() - MILLISECONDS.convert(maxAge, DAYS)))); - log.info("Events older than {} days were removed from database {}", maxAge, ds.getPoolName()); + log.atInfo().log( + "Events older than %d days were removed from database %s", maxAge, ds.getPoolName()); } catch (SQLException e) { - log.warn("Cannot remove old event entries from database {}", ds.getPoolName(), e); + log.atWarning().withCause(e).log( + "Cannot remove old event entries from database %s", ds.getPoolName()); } } @@ -159,7 +160,7 @@ try { execute(format("DELETE FROM %s WHERE project = '%s'", TABLE_NAME, project)); } catch (SQLException e) { - log.warn("Cannot remove project {} events from database", project, e); + log.atWarning().withCause(e).log("Cannot remove project %s events from database", project); } }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java index 8a06904..6289c2d 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java +++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
@@ -22,17 +22,16 @@ import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig; import com.ericsson.gerrit.plugins.eventslog.EventsLogException; import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException; -import com.google.gerrit.common.TimeUtil; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.events.ProjectEvent; import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.permissions.ProjectPermission; +import com.google.gerrit.server.util.time.TimeUtil; import com.google.inject.Inject; -import com.google.inject.Provider; import com.google.inject.Singleton; import java.io.IOException; import java.net.ConnectException; @@ -46,15 +45,12 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class SQLStore implements EventStore, LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(SQLStore.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); private static final String H2_DB_SUFFIX = ".h2.db"; - private final Provider<CurrentUser> userProvider; private final EventsLogCleaner eventsLogCleaner; private SQLClient eventsDb; private SQLClient localEventsDb; @@ -71,7 +67,6 @@ @Inject SQLStore( - Provider<CurrentUser> userProvider, EventsLogConfig cfg, @EventsDb SQLClient eventsDb, @LocalEventsDb SQLClient localEventsDb, @@ -83,7 +78,6 @@ this.waitTime = cfg.getWaitTime(); this.connectTime = cfg.getConnectTime(); this.copyLocal = cfg.getCopyLocal(); - this.userProvider = userProvider; this.eventsDb = eventsDb; this.localEventsDb = localEventsDb; this.eventsLogCleaner = eventsLogCleaner; @@ -121,14 +115,14 @@ String projectName = entry.getKey(); try { permissionBackend - .user(userProvider) + .currentUser() .project(new Project.NameKey(projectName)) .check(ProjectPermission.ACCESS); entries.addAll(entry.getValue()); } catch (AuthException e) { // Ignore } catch (PermissionBackendException e) { - log.warn("Cannot check project access permission", e); + log.atWarning().withCause(e).log("Cannot check project access permission"); } } return entries.stream().sorted().map(SQLEntry::getEvent).collect(toList()); @@ -152,14 +146,14 @@ try { getEventsDb().storeEvent(event); } catch (SQLException e) { - log.warn("Cannot store ChangeEvent for: {}", projectName.get(), e); + log.atWarning().withCause(e).log("Cannot store ChangeEvent for: %s}", projectName.get()); if (e.getCause() instanceof ConnectException || e.getMessage().contains("terminating connection")) { done = false; try { retryIfAllowed(failedConnections); } catch (InterruptedException e1) { - log.warn("Cannot store ChangeEvent for {}: Interrupted", projectName.get()); + log.atWarning().log("Cannot store ChangeEvent for %s: Interrupted", projectName.get()); Thread.currentThread().interrupt(); return; } @@ -171,10 +165,10 @@ private void retryIfAllowed(int failedConnections) throws InterruptedException { if (failedConnections < maxTries - 1) { - log.info("Retrying store event"); + log.atInfo().log("Retrying store event"); Thread.sleep(waitTime); } else { - log.error("Failed to store event {} times", maxTries); + log.atSevere().log("Failed to store event %d times", maxTries); setOnline(false); } } @@ -183,10 +177,9 @@ try { getEventsDb().createDBIfNotCreated(); } catch (SQLException e) { - log.warn( + log.atWarning().withCause(e).log( "Cannot start the database. Events will be stored locally" - + " until database connection can be established", - e); + + " until database connection can be established"); setOnline(false); } if (online) { @@ -223,14 +216,14 @@ try { List<SQLEntry> entries = localEventsDb.getAll(); if (entries.isEmpty()) { - log.debug("No events to restore from local"); + log.atFine().log("No events to restore from local"); return; } for (SQLEntry entry : entries) { restoreEvent(entry); } } catch (SQLException e) { - log.warn("Could not query all events from local", e); + log.atWarning().withCause(e).log("Could not query all events from local"); } copyFile(copyLocal); localEventsDb.removeOldEvents(0); @@ -240,7 +233,7 @@ try { eventsDb.storeEvent(entry.getName(), entry.getTimestamp(), entry.getEvent()); } catch (SQLException e) { - log.warn("Could not restore events from local", e); + log.atWarning().withCause(e).log("Could not restore events from local"); } } @@ -251,7 +244,7 @@ public void run() { if (checkConnection()) { setOnline(true); - log.info("Connected to database"); + log.atInfo().log("Connected to database"); } } @@ -261,12 +254,12 @@ } private boolean checkConnection() { - log.debug("Checking database connection..."); + log.atFine().log("Checking database connection..."); try { eventsDb.queryOne(); return true; } catch (SQLException e) { - log.error("Problem checking database connection", e); + log.atSevere().withCause(e).log("Problem checking database connection"); return false; } } @@ -277,7 +270,8 @@ try { exists = localEventsDb.dbExists(); } catch (SQLException e) { - log.warn("Could not check existence of local database, assume that it doesn't exist", e); + log.atWarning().withCause(e).log( + "Could not check existence of local database, assume that it doesn't exist"); } return exists; } @@ -293,7 +287,7 @@ try { Files.copy(file, copyFile); } catch (IOException e) { - log.warn("Could not copy local database file with timestamp", e); + log.atWarning().withCause(e).log("Could not copy local database file with timestamp"); } } }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java index 96ce35d..68b9801 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -28,14 +28,13 @@ import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException; import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.events.ProjectEvent; import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.permissions.ProjectPermission; import com.google.gson.Gson; -import com.google.inject.Provider; import com.zaxxer.hikari.HikariConfig; import java.net.ConnectException; import java.sql.Connection; @@ -57,12 +56,10 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @RunWith(MockitoJUnitRunner.class) public class SQLStoreTest { - private static final Logger log = LoggerFactory.getLogger(SQLStoreTest.class); + private static final FluentLogger log = FluentLogger.forEnclosingClass(); private static final String TEST_URL = "jdbc:h2:mem:" + TABLE_NAME; private static final String TEST_LOCAL_URL = "jdbc:h2:mem:test"; private static final String TEST_OPTIONS = "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false"; @@ -70,7 +67,6 @@ private static final String MSG = "message"; private static final String GENERIC_QUERY = "SELECT * FROM " + TABLE_NAME; - @Mock private Provider<CurrentUser> userProviderMock; @Mock private EventsLogConfig cfgMock; @Mock private PermissionBackend permissionBackendMock; @Mock private PermissionBackend.ForProject forProjectMock; @@ -110,7 +106,7 @@ @Test public void storeThenQueryVisible() throws Exception { - when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock); + when(permissionBackendMock.currentUser()).thenReturn(withUserMock); when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock); doNothing().when(forProjectMock).check(ProjectPermission.ACCESS); setUpClient(); @@ -122,7 +118,7 @@ @Test public void storeThenQueryNotVisible() throws Exception { - when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock); + when(permissionBackendMock.currentUser()).thenReturn(withUserMock); when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock); doThrow(new PermissionBackendException("")) .when(forProjectMock) @@ -142,7 +138,7 @@ @Test public void notReturnEventWithNoVisibilityInfo() throws Exception { - when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock); + when(permissionBackendMock.currentUser()).thenReturn(withUserMock); when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock); doThrow(new PermissionBackendException("")) .when(forProjectMock) @@ -163,13 +159,7 @@ doThrow(exceptions).doNothing().when(eventsDb).queryOne(); store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -185,15 +175,10 @@ setUpClientMock(); doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent); doThrow(exceptions).doNothing().when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -206,15 +191,10 @@ when(cfgMock.getMaxTries()).thenReturn(3); setUpClientMock(); doThrow(new SQLException(MSG)).when(eventsDb).storeEvent(mockEvent); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -229,15 +209,10 @@ setUpClientMock(); doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent); doThrow(exceptions).doNothing().when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -249,15 +224,10 @@ setUpClientMock(); doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated(); doThrow(new SQLException()).when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -268,7 +238,8 @@ public void restoreEventsFromLocalDb() throws Exception { MockEvent mockEvent = new MockEvent(); MockEvent mockEvent2 = new MockEvent("proj"); - when(permissionBackendMock.user(userProviderMock)).thenReturn(withUserMock); + + when(permissionBackendMock.currentUser()).thenReturn(withUserMock); when(withUserMock.project(any(Project.NameKey.class))).thenReturn(forProjectMock); doNothing().when(forProjectMock).check(ProjectPermission.ACCESS); @@ -278,13 +249,7 @@ localEventsDb = new SQLClient(config); store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); localEventsDb.createDBIfNotCreated(); localEventsDb.storeEvent(mockEvent); @@ -295,6 +260,9 @@ Gson gson = new Gson(); String json = gson.toJson(mockEvent); String json2 = gson.toJson(mockEvent2); + + assertThat(events).containsExactly(json, json2); + assertThat(events).containsExactly(json, json2).inOrder(); } @@ -303,15 +271,10 @@ setUpClientMock(); doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated(); doThrow(new SQLException()).when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); verify(localEventsDb).createDBIfNotCreated(); @@ -322,15 +285,10 @@ setUpClientMock(); doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated(); doThrow(new SQLException()).when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -343,15 +301,10 @@ when(cfgMock.getMaxTries()).thenReturn(0); doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated(); doThrow(new SQLException()).when(eventsDb).queryOne(); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); store.storeEvent(mockEvent); @@ -359,17 +312,13 @@ } private void setUpClient() { + eventsDb = new SQLClient(config); localEventsDb = new SQLClient(config); store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); + store.start(); } @@ -391,15 +340,10 @@ localEventsDb = mock(SQLClient.class); when(localEventsDb.dbExists()).thenReturn(true); when(localEventsDb.getAll()).thenReturn(ImmutableList.of(mock(SQLEntry.class))); + store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0, TimeUnit.MILLISECONDS); @@ -433,13 +377,7 @@ store = new SQLStore( - userProviderMock, - cfgMock, - eventsDb, - localEventsDb, - poolMock, - permissionBackendMock, - logCleanerMock); + cfgMock, eventsDb, localEventsDb, poolMock, permissionBackendMock, logCleanerMock); store.start(); verify(eventsDb).queryOne(); @@ -474,7 +412,7 @@ @Override public ScheduledFuture<?> scheduleWithFixedDelay( Runnable command, long initialDelay, long delay, TimeUnit unit) { - log.info(command.toString()); + log.atInfo().log(command.toString()); command.run(); return null; }