summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java161
1 files changed, 0 insertions, 161 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java
deleted file mode 100644
index ccaaa36a9e..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/RenameGroupOp.java
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (C) 2011 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.git;
-
-import com.google.gerrit.common.data.GroupReference;
-import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.project.ProjectCache;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.lib.PersonIdent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RenameGroupOp extends DefaultQueueOp {
- public interface Factory {
- RenameGroupOp create(
- @Assisted("author") PersonIdent author,
- @Assisted AccountGroup.UUID uuid,
- @Assisted("oldName") String oldName,
- @Assisted("newName") String newName);
- }
-
- private static final int MAX_TRIES = 10;
- private static final Logger log = LoggerFactory.getLogger(RenameGroupOp.class);
-
- private final ProjectCache projectCache;
- private final MetaDataUpdate.Server metaDataUpdateFactory;
-
- private final PersonIdent author;
- private final AccountGroup.UUID uuid;
- private final String oldName;
- private final String newName;
- private final List<Project.NameKey> retryOn;
-
- private boolean tryingAgain;
-
- @Inject
- public RenameGroupOp(
- WorkQueue workQueue,
- ProjectCache projectCache,
- MetaDataUpdate.Server metaDataUpdateFactory,
- @Assisted("author") PersonIdent author,
- @Assisted AccountGroup.UUID uuid,
- @Assisted("oldName") String oldName,
- @Assisted("newName") String newName) {
- super(workQueue);
- this.projectCache = projectCache;
- this.metaDataUpdateFactory = metaDataUpdateFactory;
-
- this.author = author;
- this.uuid = uuid;
- this.oldName = oldName;
- this.newName = newName;
- this.retryOn = new ArrayList<>();
- }
-
- @Override
- public void run() {
- Iterable<Project.NameKey> names = tryingAgain ? retryOn : projectCache.all();
- for (Project.NameKey projectName : names) {
- ProjectConfig config = projectCache.get(projectName).getConfig();
- GroupReference ref = config.getGroup(uuid);
- if (ref == null || newName.equals(ref.getName())) {
- continue;
- }
-
- try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
- rename(md);
- } catch (RepositoryNotFoundException noProject) {
- continue;
- } catch (ConfigInvalidException | IOException err) {
- log.error("Cannot rename group " + oldName + " in " + projectName, err);
- }
- }
-
- // If one or more projects did not update, wait 5 minutes and give it
- // another attempt. If it doesn't update after that, give up.
- if (!retryOn.isEmpty() && !tryingAgain) {
- tryingAgain = true;
- @SuppressWarnings("unused")
- Future<?> possiblyIgnoredError = start(5, TimeUnit.MINUTES);
- }
- }
-
- private void rename(MetaDataUpdate md) throws IOException, ConfigInvalidException {
- boolean success = false;
- for (int attempts = 0; !success && attempts < MAX_TRIES; attempts++) {
- ProjectConfig config = ProjectConfig.read(md);
-
- // The group isn't referenced, or its name has been fixed already.
- //
- GroupReference ref = config.getGroup(uuid);
- if (ref == null || newName.equals(ref.getName())) {
- projectCache.evict(config.getProject());
- return;
- }
-
- ref.setName(newName);
- md.getCommitBuilder().setAuthor(author);
- md.setMessage("Rename group " + oldName + " to " + newName + "\n");
- try {
- config.commit(md);
- projectCache.evict(config.getProject());
- success = true;
- } catch (IOException e) {
- log.error(
- "Could not commit rename of group "
- + oldName
- + " to "
- + newName
- + " in "
- + md.getProjectName().get(),
- e);
- try {
- Thread.sleep(25 /* milliseconds */);
- } catch (InterruptedException wakeUp) {
- continue;
- }
- }
- }
-
- if (!success) {
- if (tryingAgain) {
- log.warn(
- "Could not rename group "
- + oldName
- + " to "
- + newName
- + " in "
- + md.getProjectName().get());
- } else {
- retryOn.add(md.getProjectName());
- }
- }
- }
-
- @Override
- public String toString() {
- return "Rename Group " + oldName;
- }
-}