From 682171fc817fbb56e5d916af76d9a7dbd0b2309d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Ar=C3=A8s?= Date: Mon, 24 Apr 2017 13:44:43 +0200 Subject: [PATCH] Create account-indexed extension point Add a new extension point so that plugins can be notified when an account has been indexed. Change-Id: I5cba1be9df06b70d870540722d099c3d8397c351 --- Documentation/dev-plugins.txt | 6 +++- .../events/AccountIndexedListener.java | 29 +++++++++++++++++++ .../server/config/GerritGlobalModule.java | 2 ++ .../index/account/AccountIndexerImpl.java | 14 +++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/AccountIndexedListener.java diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index f009e9271c..1eb8d48fc1 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt @@ -416,7 +416,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 [[stream-events]] == Sending Events to the Events Stream 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..3263e709e1 --- /dev/null +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/AccountIndexedListener.java @@ -0,0 +1,29 @@ +// 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 9db4d3d721..704682a232 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 @@ -29,6 +29,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.ChangeAbandonedListener; import com.google.gerrit.extensions.events.ChangeIndexedListener; @@ -319,6 +320,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 d3bfeb8281..7cdf2696e7 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,21 +36,26 @@ 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, + DynamicSet indexedListener, @Assisted AccountIndexCollection indexes) { this.byIdCache = byIdCache; + this.indexedListener = indexedListener; this.indexes = indexes; this.index = null; } @AssistedInject AccountIndexerImpl(AccountCache byIdCache, + DynamicSet indexedListener, @Assisted AccountIndex index) { this.byIdCache = byIdCache; + this.indexedListener = indexedListener; this.indexes = null; this.index = index; } @@ -58,6 +65,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() {