ChangeField: Include change ID into error logs when parsing reviewer fields
Without the change ID one doesn't know for which change the reviewer fields have unexpected values. Change-Id: I3003acc4cd0f54c13fce4be67d6e092c1dd67412 Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -290,6 +290,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
|
||||
if (source.get(ChangeField.REVIEWER.getName()) != null) {
|
||||
cd.setReviewers(
|
||||
ChangeField.parseReviewerFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(source.get(ChangeField.REVIEWER.getName()).getAsJsonArray())
|
||||
.transform(JsonElement::getAsString)));
|
||||
} else if (fields.contains(ChangeField.REVIEWER.getName())) {
|
||||
@@ -300,6 +301,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
|
||||
if (source.get(ChangeField.REVIEWER_BY_EMAIL.getName()) != null) {
|
||||
cd.setReviewersByEmail(
|
||||
ChangeField.parseReviewerByEmailFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(
|
||||
source.get(ChangeField.REVIEWER_BY_EMAIL.getName()).getAsJsonArray())
|
||||
.transform(JsonElement::getAsString)));
|
||||
@@ -311,6 +313,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
|
||||
if (source.get(ChangeField.PENDING_REVIEWER.getName()) != null) {
|
||||
cd.setPendingReviewers(
|
||||
ChangeField.parseReviewerFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(
|
||||
source.get(ChangeField.PENDING_REVIEWER.getName()).getAsJsonArray())
|
||||
.transform(JsonElement::getAsString)));
|
||||
@@ -322,6 +325,7 @@ class ElasticChangeIndex extends AbstractElasticIndex<Change.Id, ChangeData>
|
||||
if (source.get(ChangeField.PENDING_REVIEWER_BY_EMAIL.getName()) != null) {
|
||||
cd.setPendingReviewersByEmail(
|
||||
ChangeField.parseReviewerByEmailFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(
|
||||
source.get(ChangeField.PENDING_REVIEWER_BY_EMAIL.getName()).getAsJsonArray())
|
||||
.transform(JsonElement::getAsString)));
|
||||
|
||||
@@ -586,12 +586,14 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
private void decodeReviewers(ListMultimap<String, IndexableField> doc, ChangeData cd) {
|
||||
cd.setReviewers(
|
||||
ChangeField.parseReviewerFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(doc.get(REVIEWER_FIELD)).transform(IndexableField::stringValue)));
|
||||
}
|
||||
|
||||
private void decodeReviewersByEmail(ListMultimap<String, IndexableField> doc, ChangeData cd) {
|
||||
cd.setReviewersByEmail(
|
||||
ChangeField.parseReviewerByEmailFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(doc.get(REVIEWER_BY_EMAIL_FIELD))
|
||||
.transform(IndexableField::stringValue)));
|
||||
}
|
||||
@@ -599,6 +601,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
private void decodePendingReviewers(ListMultimap<String, IndexableField> doc, ChangeData cd) {
|
||||
cd.setPendingReviewers(
|
||||
ChangeField.parseReviewerFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(doc.get(PENDING_REVIEWER_FIELD))
|
||||
.transform(IndexableField::stringValue)));
|
||||
}
|
||||
@@ -607,6 +610,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
ListMultimap<String, IndexableField> doc, ChangeData cd) {
|
||||
cd.setPendingReviewersByEmail(
|
||||
ChangeField.parseReviewerByEmailFieldValues(
|
||||
cd.getId(),
|
||||
FluentIterable.from(doc.get(PENDING_REVIEWER_BY_EMAIL_FIELD))
|
||||
.transform(IndexableField::stringValue)));
|
||||
}
|
||||
|
||||
@@ -256,39 +256,44 @@ public class ChangeField {
|
||||
return state.toString() + ',' + adr;
|
||||
}
|
||||
|
||||
public static ReviewerSet parseReviewerFieldValues(Iterable<String> values) {
|
||||
public static ReviewerSet parseReviewerFieldValues(Change.Id changeId, Iterable<String> values) {
|
||||
ImmutableTable.Builder<ReviewerStateInternal, Account.Id, Timestamp> b =
|
||||
ImmutableTable.builder();
|
||||
for (String v : values) {
|
||||
|
||||
int i = v.indexOf(',');
|
||||
if (i < 0) {
|
||||
log.error("Invalid value for reviewer field: {}", v);
|
||||
log.error("Invalid value for reviewer field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
|
||||
int i2 = v.lastIndexOf(',');
|
||||
if (i2 == i) {
|
||||
log.error("Invalid value for reviewer field: {}", v);
|
||||
log.error("Invalid value for reviewer field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
|
||||
com.google.common.base.Optional<ReviewerStateInternal> reviewerState =
|
||||
Enums.getIfPresent(ReviewerStateInternal.class, v.substring(0, i));
|
||||
if (!reviewerState.isPresent()) {
|
||||
log.error("Failed to parse reviewer state from reviewer field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse reviewer state of reviewer field from change {}: {}",
|
||||
changeId.get(),
|
||||
v);
|
||||
continue;
|
||||
}
|
||||
|
||||
Optional<Account.Id> accountId = Account.Id.tryParse(v.substring(i + 1, i2));
|
||||
if (!accountId.isPresent()) {
|
||||
log.error("Failed to parse account ID from reviewer field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse account ID of reviewer field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
|
||||
Long l = Longs.tryParse(v.substring(i2 + 1, v.length()));
|
||||
if (l == null) {
|
||||
log.error("Failed to parse timestamp from reviewer field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse timestamp of reviewer field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
Timestamp timestamp = new Timestamp(l);
|
||||
@@ -298,37 +303,49 @@ public class ChangeField {
|
||||
return ReviewerSet.fromTable(b.build());
|
||||
}
|
||||
|
||||
public static ReviewerByEmailSet parseReviewerByEmailFieldValues(Iterable<String> values) {
|
||||
public static ReviewerByEmailSet parseReviewerByEmailFieldValues(
|
||||
Change.Id changeId, Iterable<String> values) {
|
||||
ImmutableTable.Builder<ReviewerStateInternal, Address, Timestamp> b = ImmutableTable.builder();
|
||||
for (String v : values) {
|
||||
int i = v.indexOf(',');
|
||||
if (i < 0) {
|
||||
log.error("Invalid value for reviewer by email field: {}", v);
|
||||
log.error(
|
||||
"Invalid value for reviewer by email field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
|
||||
int i2 = v.lastIndexOf(',');
|
||||
if (i2 == i) {
|
||||
log.error("Invalid value for reviewer by email field: {}", v);
|
||||
log.error(
|
||||
"Invalid value for reviewer by email field from change {}: {}", changeId.get(), v);
|
||||
continue;
|
||||
}
|
||||
|
||||
com.google.common.base.Optional<ReviewerStateInternal> reviewerState =
|
||||
Enums.getIfPresent(ReviewerStateInternal.class, v.substring(0, i));
|
||||
if (!reviewerState.isPresent()) {
|
||||
log.error("Failed to parse reviewer state from reviewer by email field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse reviewer state of reviewer by email field from change {}: {}",
|
||||
changeId.get(),
|
||||
v);
|
||||
continue;
|
||||
}
|
||||
|
||||
Address address = Address.tryParse(v.substring(i + 1, i2));
|
||||
if (address == null) {
|
||||
log.error("Failed to parse address from reviewer by email field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse address of reviewer by email field from change {}: {}",
|
||||
changeId.get(),
|
||||
v);
|
||||
continue;
|
||||
}
|
||||
|
||||
Long l = Longs.tryParse(v.substring(i2 + 1, v.length()));
|
||||
if (l == null) {
|
||||
log.error("Failed to parse timestamp from reviewer by email field: {}", v);
|
||||
log.error(
|
||||
"Failed to parse timestamp of reviewer by email field from change {}: {}",
|
||||
changeId.get(),
|
||||
v);
|
||||
continue;
|
||||
}
|
||||
Timestamp timestamp = new Timestamp(l);
|
||||
|
||||
Reference in New Issue
Block a user