diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java deleted file mode 100644 index 3584961d40..0000000000 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java +++ /dev/null @@ -1,138 +0,0 @@ -// 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.server.index.group; - -import static com.google.common.collect.ImmutableList.toImmutableList; -import static com.google.gerrit.server.git.QueueProvider.QueueType.BATCH; - -import com.google.common.base.Stopwatch; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.gerrit.index.SiteIndexer; -import com.google.gerrit.reviewdb.client.AccountGroup; -import com.google.gerrit.reviewdb.server.ReviewDb; -import com.google.gerrit.server.account.GroupCache; -import com.google.gerrit.server.group.Groups; -import com.google.gerrit.server.group.InternalGroup; -import com.google.gerrit.server.index.IndexExecutor; -import com.google.gwtorm.server.OrmException; -import com.google.gwtorm.server.SchemaFactory; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import org.eclipse.jgit.lib.ProgressMonitor; -import org.eclipse.jgit.lib.TextProgressMonitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Singleton -public class AllGroupsIndexer extends SiteIndexer<AccountGroup.UUID, InternalGroup, GroupIndex> { - private static final Logger log = LoggerFactory.getLogger(AllGroupsIndexer.class); - - private final SchemaFactory<ReviewDb> schemaFactory; - private final ListeningExecutorService executor; - private final GroupCache groupCache; - private final Groups groups; - - @Inject - AllGroupsIndexer( - SchemaFactory<ReviewDb> schemaFactory, - @IndexExecutor(BATCH) ListeningExecutorService executor, - GroupCache groupCache, - Groups groups) { - this.schemaFactory = schemaFactory; - this.executor = executor; - this.groupCache = groupCache; - this.groups = groups; - } - - @Override - public SiteIndexer.Result indexAll(GroupIndex index) { - ProgressMonitor progress = new TextProgressMonitor(newPrintWriter(progressOut)); - progress.start(2); - Stopwatch sw = Stopwatch.createStarted(); - List<AccountGroup.UUID> uuids; - try { - uuids = collectGroups(progress); - } catch (OrmException e) { - log.error("Error collecting groups", e); - return new SiteIndexer.Result(sw, false, 0, 0); - } - return reindexGroups(index, uuids, progress); - } - - private SiteIndexer.Result reindexGroups( - GroupIndex index, List<AccountGroup.UUID> uuids, ProgressMonitor progress) { - progress.beginTask("Reindexing groups", uuids.size()); - List<ListenableFuture<?>> futures = new ArrayList<>(uuids.size()); - AtomicBoolean ok = new AtomicBoolean(true); - AtomicInteger done = new AtomicInteger(); - AtomicInteger failed = new AtomicInteger(); - Stopwatch sw = Stopwatch.createStarted(); - for (AccountGroup.UUID uuid : uuids) { - String desc = "group " + uuid; - ListenableFuture<?> future = - executor.submit( - () -> { - try { - Optional<InternalGroup> oldGroup = groupCache.get(uuid); - if (oldGroup.isPresent()) { - InternalGroup group = oldGroup.get(); - groupCache.evict(group.getGroupUUID(), group.getId(), group.getNameKey()); - } - Optional<InternalGroup> internalGroup = groupCache.get(uuid); - if (internalGroup.isPresent()) { - index.replace(internalGroup.get()); - } else { - index.delete(uuid); - } - verboseWriter.println("Reindexed " + desc); - done.incrementAndGet(); - } catch (Exception e) { - failed.incrementAndGet(); - throw e; - } - return null; - }); - addErrorListener(future, desc, progress, ok); - futures.add(future); - } - - try { - Futures.successfulAsList(futures).get(); - } catch (ExecutionException | InterruptedException e) { - log.error("Error waiting on group futures", e); - return new SiteIndexer.Result(sw, false, 0, 0); - } - - progress.endTask(); - return new SiteIndexer.Result(sw, ok.get(), done.get(), failed.get()); - } - - private List<AccountGroup.UUID> collectGroups(ProgressMonitor progress) throws OrmException { - progress.beginTask("Collecting groups", ProgressMonitor.UNKNOWN); - try (ReviewDb db = schemaFactory.open()) { - return groups.getAll(db).map(AccountGroup::getGroupUUID).collect(toImmutableList()); - } finally { - progress.endTask(); - } - } -} |