Write debug log that shows up in trace when meta data file is read/saved

Reading/saving meta data files is a rather expensive operation. E.g. if
a request leads to excessive reads of meta data files we want to see
that in the trace. Reading of meta data files e.g. happens on cache
misses (account cache, group cache etc).

Unfortunately VersionedMetaData has no reference to the project name
so we must pass this in from a lot of places.

Example logs:
[2018-08-10 15:27:29,333] [HTTP-75] DEBUG com.google.gerrit.server.git.meta.VersionedMetaData : Read file 'group.config' from ref 'refs/groups/ca/ca1fd42646e71d8081add52fbb0171a8504c97cd' of project 'All-Users' from revision '919687c42e13f76552fb186f36d43f447544e64b' [CONTEXT forced=true TRACE_ID="1533907649289-2d0c7a5d" ]
[2018-08-10 15:27:29,334] [HTTP-75] DEBUG com.google.gerrit.server.git.meta.VersionedMetaData : Read file 'members' from ref 'refs/groups/ca/ca1fd42646e71d8081add52fbb0171a8504c97cd' of project 'All-Users' from revision '919687c42e13f76552fb186f36d43f447544e64b' [CONTEXT forced=true TRACE_ID="1533907649289-2d0c7a5d" ]
[2018-08-10 15:27:29,336] [HTTP-75] DEBUG com.google.gerrit.server.git.meta.VersionedMetaData : Read file 'subgroups' from ref 'refs/groups/ca/ca1fd42646e71d8081add52fbb0171a8504c97cd' of project 'All-Users' from revision '919687c42e13f76552fb186f36d43f447544e64b' [CONTEXT forced=true TRACE_ID="1533907649289-2d0c7a5d" ]

Change-Id: Ibb438213b01b0a5cf67fd277d298a0359b65bb1d
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2018-08-10 15:28:29 +02:00
parent 944cd404ac
commit 6b4d94b60f
49 changed files with 346 additions and 193 deletions

View File

@@ -22,6 +22,7 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountConfig;
import com.google.gerrit.server.account.AccountProperties;
import com.google.gerrit.server.config.AllUsersName;
import com.google.gerrit.server.git.ValidationError;
import com.google.gerrit.server.mail.send.OutgoingEmailValidator;
import com.google.inject.Inject;
@@ -38,21 +39,30 @@ import org.eclipse.jgit.revwalk.RevWalk;
public class AccountValidator {
private final Provider<IdentifiedUser> self;
private final AllUsersName allUsersName;
private final OutgoingEmailValidator emailValidator;
@Inject
public AccountValidator(Provider<IdentifiedUser> self, OutgoingEmailValidator emailValidator) {
public AccountValidator(
Provider<IdentifiedUser> self,
AllUsersName allUsersName,
OutgoingEmailValidator emailValidator) {
this.self = self;
this.allUsersName = allUsersName;
this.emailValidator = emailValidator;
}
public List<String> validate(
Account.Id accountId, Repository repo, RevWalk rw, @Nullable ObjectId oldId, ObjectId newId)
Account.Id accountId,
Repository allUsersRepo,
RevWalk rw,
@Nullable ObjectId oldId,
ObjectId newId)
throws IOException {
Optional<Account> oldAccount = Optional.empty();
if (oldId != null && !ObjectId.zeroId().equals(oldId)) {
try {
oldAccount = loadAccount(accountId, repo, rw, oldId, null);
oldAccount = loadAccount(accountId, allUsersRepo, rw, oldId, null);
} catch (ConfigInvalidException e) {
// ignore, maybe the new commit is repairing it now
}
@@ -61,7 +71,7 @@ public class AccountValidator {
List<String> messages = new ArrayList<>();
Optional<Account> newAccount;
try {
newAccount = loadAccount(accountId, repo, rw, newId, messages);
newAccount = loadAccount(accountId, allUsersRepo, rw, newId, messages);
} catch (ConfigInvalidException e) {
return ImmutableList.of(
String.format(
@@ -94,14 +104,14 @@ public class AccountValidator {
private Optional<Account> loadAccount(
Account.Id accountId,
Repository repo,
Repository allUsersRepo,
RevWalk rw,
ObjectId commit,
@Nullable List<String> messages)
throws IOException, ConfigInvalidException {
rw.reset();
AccountConfig accountConfig = new AccountConfig(accountId, repo);
accountConfig.load(rw, commit);
AccountConfig accountConfig = new AccountConfig(accountId, allUsersName, allUsersRepo);
accountConfig.load(allUsersName, rw, commit);
if (messages != null) {
messages.addAll(
accountConfig

View File

@@ -152,7 +152,7 @@ public class MergeValidators {
final Project.NameKey newParent;
try {
ProjectConfig cfg = new ProjectConfig(destProject.getNameKey());
cfg.load(repo, commit);
cfg.load(destProject.getNameKey(), repo, commit);
newParent = cfg.getProject().getParent(allProjectsName);
final Project.NameKey oldParent = destProject.getProject().getParent(allProjectsName);
if (oldParent == null) {