
Eventually we may want to limit the total length of a NoteDb ref's history, to avoid having to scan and store an unbounded amount of commit data into ChangeNotes. To do that, we first need to record it. In most cases, this number will equal getChangeMessages().size(), but that's partly an artifact of the current APIs, which always accompany a change with a ChangeMessage. The underlying storage layer doesn't require it. Don't bump the ChangeNotesCache version number: old entries will just return an update count of 0. My current thinking is that populating this field is not worth flushing the persistent cache. If we change our minds, we can trivially bump the version number. Change-Id: I9fbcdfa0583a525e60b75672032f3179e5da3c79
248 lines
6.6 KiB
Protocol Buffer
248 lines
6.6 KiB
Protocol Buffer
// Copyright (C) 2018 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.
|
|
|
|
syntax = "proto3";
|
|
|
|
package gerrit.cache;
|
|
|
|
option java_package = "com.google.gerrit.server.cache.proto";
|
|
|
|
// Serialized form of com.google.gerrit.server.change.CHangeKindCacheImpl.Key.
|
|
// Next ID: 4
|
|
message ChangeKindKeyProto {
|
|
bytes prior = 1;
|
|
bytes next = 2;
|
|
string strategy_name = 3;
|
|
}
|
|
|
|
// Serialized form of
|
|
// com.google.gerrit.server.change.MergeabilityCacheImpl.EntryKey.
|
|
// Next ID: 5
|
|
message MergeabilityKeyProto {
|
|
bytes commit = 1;
|
|
bytes into = 2;
|
|
string submit_type = 3;
|
|
string merge_strategy = 4;
|
|
}
|
|
|
|
// Serialized form of com.google.gerrit.extensions.auth.oauth.OAuthToken.
|
|
// Next ID: 6
|
|
message OAuthTokenProto {
|
|
string token = 1;
|
|
string secret = 2;
|
|
string raw = 3;
|
|
int64 expires_at = 4;
|
|
string provider_id = 5;
|
|
}
|
|
|
|
|
|
// Serialized form of com.google.gerrit.server.notedb.ChangeNotesCache.Key.
|
|
// Next ID: 4
|
|
message ChangeNotesKeyProto {
|
|
string project = 1;
|
|
int32 change_id = 2;
|
|
bytes id = 3;
|
|
}
|
|
|
|
// Serialized from of com.google.gerrit.server.notedb.ChangeNotesState.
|
|
//
|
|
// Note on embedded protos: this is just for storing in a cache, so some formats
|
|
// were chosen ease of coding the initial implementation. In particular, where
|
|
// there already exists another serialization mechanism in Gerrit for
|
|
// serializing a particular field, we use that rather than defining a new proto
|
|
// type. This includes types that can be serialized to proto using
|
|
// ProtoConverters as well as NoteDb and indexed types that are serialized using
|
|
// JSON. We can always revisit this decision later; it just requires bumping the
|
|
// cache version.
|
|
//
|
|
// Note on nullability: there are a lot of nullable fields in ChangeNotesState
|
|
// and its dependencies. It's likely we could make some of them non-nullable,
|
|
// but each one of those would be a potentially significant amount of cleanup,
|
|
// and there's no guarantee we'd be able to eliminate all of them. (For a less
|
|
// complex class, it's likely the cleanup would be more feasible.)
|
|
//
|
|
// Instead, we just take the tedious yet simple approach of having a "has_foo"
|
|
// field for each nullable field "foo", indicating whether or not foo is null.
|
|
//
|
|
// Next ID: 20
|
|
message ChangeNotesStateProto {
|
|
// Effectively required, even though the corresponding ChangeNotesState field
|
|
// is optional, since the field is only absent when NoteDb is disabled, in
|
|
// which case attempting to use the ChangeNotesCache is programmer error.
|
|
bytes meta_id = 1;
|
|
|
|
int32 change_id = 2;
|
|
|
|
// Next ID: 24
|
|
message ChangeColumnsProto {
|
|
string change_key = 1;
|
|
|
|
int64 created_on = 2;
|
|
|
|
int64 last_updated_on = 3;
|
|
|
|
int32 owner = 4;
|
|
|
|
string branch = 5;
|
|
|
|
int32 current_patch_set_id = 6;
|
|
bool has_current_patch_set_id = 7;
|
|
|
|
string subject = 8;
|
|
|
|
string topic = 9;
|
|
bool has_topic = 10;
|
|
|
|
string original_subject = 11;
|
|
bool has_original_subject = 12;
|
|
|
|
string submission_id = 13;
|
|
bool has_submission_id = 14;
|
|
|
|
int32 assignee = 15;
|
|
bool has_assignee = 16;
|
|
|
|
string status = 17;
|
|
bool has_status = 18;
|
|
|
|
bool is_private = 19;
|
|
|
|
bool work_in_progress = 20;
|
|
|
|
bool review_started = 21;
|
|
|
|
int32 revert_of = 22;
|
|
bool has_revert_of = 23;
|
|
}
|
|
// Effectively required, even though the corresponding ChangeNotesState field
|
|
// is optional, since the field is only absent when NoteDb is disabled, in
|
|
// which case attempting to use the ChangeNotesCache is programmer error.
|
|
ChangeColumnsProto columns = 3;
|
|
|
|
repeated int32 past_assignee = 4;
|
|
|
|
repeated string hashtag = 5;
|
|
|
|
// Raw PatchSet proto as produced by PatchSetProtoConverter.
|
|
repeated bytes patch_set = 6;
|
|
|
|
// Raw PatchSetApproval proto as produced by PatchSetApprovalProtoConverter.
|
|
repeated bytes approval = 7;
|
|
|
|
// Next ID: 4
|
|
message ReviewerSetEntryProto {
|
|
string state = 1;
|
|
int32 account_id = 2;
|
|
int64 timestamp = 3;
|
|
}
|
|
repeated ReviewerSetEntryProto reviewer = 8;
|
|
|
|
// Next ID: 4
|
|
message ReviewerByEmailSetEntryProto {
|
|
string state = 1;
|
|
string address = 2;
|
|
int64 timestamp = 3;
|
|
}
|
|
repeated ReviewerByEmailSetEntryProto reviewer_by_email = 9;
|
|
|
|
repeated ReviewerSetEntryProto pending_reviewer = 10;
|
|
|
|
repeated ReviewerByEmailSetEntryProto pending_reviewer_by_email = 11;
|
|
|
|
repeated int32 past_reviewer = 12;
|
|
|
|
// Next ID: 5
|
|
message ReviewerStatusUpdateProto {
|
|
int64 date = 1;
|
|
int32 updated_by = 2;
|
|
int32 reviewer = 3;
|
|
string state = 4;
|
|
}
|
|
repeated ReviewerStatusUpdateProto reviewer_update = 13;
|
|
|
|
// JSON produced from
|
|
// com.google.gerrit.server.index.change.ChangeField.StoredSubmitRecord.
|
|
repeated string submit_record = 14;
|
|
|
|
// Raw ChangeMessage proto as produced by ChangeMessageProtoConverter.
|
|
repeated bytes change_message = 15;
|
|
|
|
// JSON produced from com.google.gerrit.reviewdb.client.Comment.
|
|
repeated string published_comment = 16;
|
|
|
|
reserved 17; // read_only_until
|
|
reserved 18; // has_read_only_until
|
|
|
|
// Number of updates to the change's meta ref.
|
|
int32 update_count = 19;
|
|
}
|
|
|
|
|
|
// Serialized form of com.google.gerrit.server.query.change.ConflictKey
|
|
message ConflictKeyProto {
|
|
bytes commit = 1;
|
|
bytes other_commit = 2;
|
|
string submit_type = 3;
|
|
bool content_merge = 4;
|
|
}
|
|
|
|
// Serialized form of com.google.gerrit.server.query.git.TagSetHolder.
|
|
// Next ID: 3
|
|
message TagSetHolderProto {
|
|
string project_name = 1;
|
|
|
|
// Next ID: 4
|
|
message TagSetProto {
|
|
string project_name = 1;
|
|
|
|
// Next ID: 3
|
|
message CachedRefProto {
|
|
bytes id = 1;
|
|
int32 flag = 2;
|
|
}
|
|
map<string, CachedRefProto> ref = 2;
|
|
|
|
// Next ID: 3
|
|
message TagProto {
|
|
bytes id = 1;
|
|
bytes flags = 2;
|
|
}
|
|
repeated TagProto tag = 3;
|
|
}
|
|
TagSetProto tags = 2;
|
|
}
|
|
|
|
// Serialized form of
|
|
// com.google.gerrit.server.account.externalids.AllExternalIds.
|
|
// Next ID: 2
|
|
message AllExternalIdsProto {
|
|
// Next ID: 6
|
|
message ExternalIdProto {
|
|
string key = 1;
|
|
int32 accountId = 2;
|
|
string email = 3;
|
|
string password = 4;
|
|
bytes blobId = 5;
|
|
}
|
|
repeated ExternalIdProto external_id = 1;
|
|
}
|
|
|
|
// Key for com.google.gerrit.server.git.PureRevertCache.
|
|
// Next ID: 4
|
|
message PureRevertKeyProto {
|
|
string project = 1;
|
|
bytes claimed_original = 2;
|
|
bytes claimed_revert = 3;
|
|
}
|