diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index 75ef9e6642..89b63ccae2 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt @@ -392,7 +392,11 @@ Garbage collection ran on a project * `com.google.gerrit.server.extensions.events.ChangeIndexedListener`: + -Update of the secondary index +Update of the change secondary index + +* `com.google.gerrit.server.extensions.events.AccountIndexedListener`: ++ +Update of the account secondary index * `com.google.gerrit.httpd.WebLoginListener`: + diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/AccountIndexedListener.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/AccountIndexedListener.java new file mode 100644 index 0000000000..25a2b260fb --- /dev/null +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/AccountIndexedListener.java @@ -0,0 +1,28 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.extensions.events; + +import com.google.gerrit.extensions.annotations.ExtensionPoint; + +/** Notified whenever an account is indexed */ +@ExtensionPoint +public interface AccountIndexedListener { + /** + * Invoked when an account is indexed + * + * @param id of the account + */ + void onAccountIndexed(int id); +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java index 7b110e3e5a..b3e15b5cb6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java @@ -31,6 +31,7 @@ import com.google.gerrit.extensions.config.DownloadCommand; import com.google.gerrit.extensions.config.DownloadScheme; import com.google.gerrit.extensions.config.ExternalIncludedIn; import com.google.gerrit.extensions.config.FactoryModule; +import com.google.gerrit.extensions.events.AccountIndexedListener; import com.google.gerrit.extensions.events.AgreementSignupListener; import com.google.gerrit.extensions.events.AssigneeChangedListener; import com.google.gerrit.extensions.events.ChangeAbandonedListener; @@ -324,6 +325,7 @@ public class GerritGlobalModule extends FactoryModule { DynamicSet.setOf(binder(), PostReceiveHook.class); DynamicSet.setOf(binder(), PreUploadHook.class); DynamicSet.setOf(binder(), PostUploadHook.class); + DynamicSet.setOf(binder(), AccountIndexedListener.class); DynamicSet.setOf(binder(), ChangeIndexedListener.class); DynamicSet.setOf(binder(), NewProjectCreatedListener.class); DynamicSet.setOf(binder(), ProjectDeletedListener.class); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java index 027d4c3775..58dbd34988 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/account/AccountIndexerImpl.java @@ -16,6 +16,8 @@ package com.google.gerrit.server.index.account; import com.google.common.collect.ImmutableSet; import com.google.gerrit.common.Nullable; +import com.google.gerrit.extensions.events.AccountIndexedListener; +import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountState; @@ -34,19 +36,28 @@ public class AccountIndexerImpl implements AccountIndexer { } private final AccountCache byIdCache; + private final DynamicSet indexedListener; private final AccountIndexCollection indexes; private final AccountIndex index; @AssistedInject - AccountIndexerImpl(AccountCache byIdCache, @Assisted AccountIndexCollection indexes) { + AccountIndexerImpl( + AccountCache byIdCache, + DynamicSet indexedListener, + @Assisted AccountIndexCollection indexes) { this.byIdCache = byIdCache; + this.indexedListener = indexedListener; this.indexes = indexes; this.index = null; } @AssistedInject - AccountIndexerImpl(AccountCache byIdCache, @Assisted AccountIndex index) { + AccountIndexerImpl( + AccountCache byIdCache, + DynamicSet indexedListener, + @Assisted AccountIndex index) { this.byIdCache = byIdCache; + this.indexedListener = indexedListener; this.indexes = null; this.index = index; } @@ -56,6 +67,13 @@ public class AccountIndexerImpl implements AccountIndexer { for (Index i : getWriteIndexes()) { i.replace(byIdCache.get(id)); } + fireAccountIndexedEvent(id.get()); + } + + private void fireAccountIndexedEvent(int id) { + for (AccountIndexedListener listener : indexedListener) { + listener.onAccountIndexed(id); + } } private Collection getWriteIndexes() {