diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java index 21da0b8771..dc180ccafd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java @@ -42,6 +42,7 @@ import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListKey; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; @@ -240,6 +241,8 @@ public class Files implements ChildCollection { try { return copy(res.files(), res.patchSetId(), resource, userId); + } catch (PatchListObjectTooLargeException e) { + log.warn("Cannot copy patch review flags: " + e.getMessage()); } catch (IOException | PatchListNotAvailableException e) { log.warn("Cannot copy patch review flags", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java index afd78dcb5f..2614eafcdd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java @@ -56,6 +56,7 @@ import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListEntry; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gwtorm.server.OrmException; @@ -425,6 +426,8 @@ public class EventFactory { p.insertions = patch.getInsertions(); patchSetAttribute.files.add(p); } + } catch (PatchListObjectTooLargeException e) { + log.warn("Cannot get patch list: " + e.getMessage()); } catch (PatchListNotAvailableException e) { log.warn("Cannot get patch list", e); } @@ -498,6 +501,8 @@ public class EventFactory { p.kind = changeKindCache.getChangeKind(db, change, patchSet); } catch (IOException | OrmException e) { log.error("Cannot load patch set data for " + patchSet.getId(), e); + } catch (PatchListObjectTooLargeException e) { + log.warn(String.format("Cannot get size information for %s: %s", pId, e.getMessage())); } catch (PatchListNotAvailableException e) { log.error(String.format("Cannot get size information for %s.", pId), e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java index f9fc60a1da..1415f3b328 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java @@ -25,6 +25,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -70,6 +71,8 @@ public class ChangeAbandoned { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeMerged.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeMerged.java index feaa54a12c..3bba164f5d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeMerged.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeMerged.java @@ -25,6 +25,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -64,6 +65,8 @@ public class ChangeMerged { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeRestored.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeRestored.java index 03a6f1f03b..043762364e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeRestored.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ChangeRestored.java @@ -25,6 +25,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -63,6 +64,8 @@ public class ChangeRestored { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/CommentAdded.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/CommentAdded.java index e76a032a74..1676c2caaf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/CommentAdded.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/CommentAdded.java @@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -74,6 +75,8 @@ public class CommentAdded { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java index e4f85720c8..d785f38e1d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java @@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -67,6 +68,8 @@ public class ReviewerAdded { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java index 033efe29ea..991456362d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java @@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -78,6 +79,8 @@ public class ReviewerDeleted { util.logEventListenerError(this, listener, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/RevisionCreated.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/RevisionCreated.java index 8a781d0856..475e4b56b3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/RevisionCreated.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/RevisionCreated.java @@ -25,6 +25,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -64,6 +65,8 @@ public class RevisionCreated { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/VoteDeleted.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/VoteDeleted.java index 71a603c7a2..5f20293b6d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/VoteDeleted.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/VoteDeleted.java @@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.GpgException; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.io.IOException; @@ -78,6 +79,8 @@ public class VoteDeleted { util.logEventListenerError(this, l, e); } } + } catch (PatchListObjectTooLargeException e) { + log.warn("Couldn't fire event: " + e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException e) { log.error("Couldn't fire event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ChangeEmail.java index 53e7d22412..a7826cb017 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ChangeEmail.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/ChangeEmail.java @@ -37,6 +37,7 @@ import com.google.gerrit.server.notedb.ReviewerStateInternal; import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListEntry; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException; import com.google.gerrit.server.permissions.ChangePermission; import com.google.gerrit.server.permissions.GlobalPermission; @@ -539,6 +540,9 @@ public abstract class ChangeEmail extends NotificationEmail { // Currently these always have a null oldId in the PatchList. return "[Octopus merge; cannot be formatted as a diff.]\n"; } + } catch (PatchListObjectTooLargeException e) { + log.warn("Cannot format patch " + e.getMessage()); + return ""; } catch (PatchListNotAvailableException e) { log.error("Cannot format patch", e); return ""; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java index 5b7d3b79b2..e8f252219e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java @@ -35,6 +35,7 @@ import com.google.gerrit.server.mail.receive.Protocol; import com.google.gerrit.server.patch.PatchFile; import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchListObjectTooLargeException; import com.google.gerrit.server.util.LabelVote; import com.google.gwtorm.client.KeyUtil; import com.google.gwtorm.server.OrmException; @@ -232,6 +233,8 @@ public class CommentSender extends ReplyToChangeSender { if (repo != null) { try { patchList = getPatchList(); + } catch (PatchListObjectTooLargeException e) { + log.warn("Failed to get patch list: " + e.getMessage()); } catch (PatchListNotAvailableException e) { log.error("Failed to get patch list", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListCacheImpl.java index 77774004d3..8900a150f9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListCacheImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListCacheImpl.java @@ -103,7 +103,7 @@ public class PatchListCacheImpl implements PatchListCache { try { PatchList pl = fileCache.get(key, fileLoaderFactory.create(key, project)); if (pl instanceof LargeObjectTombstone) { - throw new PatchListNotAvailableException( + throw new PatchListObjectTooLargeException( "Error computing " + key + ". Previous attempt failed with LargeObjectException"); } if (key.getAlgorithm() == PatchListKey.Algorithm.OPTIMIZED_DIFF) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListObjectTooLargeException.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListObjectTooLargeException.java new file mode 100644 index 0000000000..c393c29f79 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListObjectTooLargeException.java @@ -0,0 +1,26 @@ +// 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.patch; + +/** + * Exception thrown when the PatchList could not be computed because previous attempts failed with + * {@code LargeObjectException}. This is not thrown on the first computation. + */ +public class PatchListObjectTooLargeException extends PatchListNotAvailableException { + + public PatchListObjectTooLargeException(String message) { + super(message); + } +}