Skip to content

Commit 06a1a81

Browse files
authored
Merge pull request #4 from G8XSU/keys-summary-m
Add ListKeysSummary Api Signature/protos
2 parents 7362e90 + 0d70beb commit 06a1a81

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

app/src/main/proto/vss.proto

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ message GetObjectRequest {
99
// All APIs operate within a single store_id.
1010
// It is up to clients to use single or multiple stores for their use-case.
1111
// This can be used for client-isolation/ rate-limiting / throttling on the server-side.
12-
// Authorization and billing can also be performed at the storeId level.
12+
// Authorization and billing can also be performed at the store_id level.
1313
string store_id = 1;
1414

1515
// Key for which the value is to be fetched.
@@ -98,6 +98,78 @@ message PutObjectRequest {
9898
message PutObjectResponse {
9999
}
100100

101+
message ListKeyVersionsRequest {
102+
103+
// store_id is a keyspace identifier.
104+
// Ref: https://en.wikipedia.org/wiki/Keyspace_(distributed_data_store)
105+
// All APIs operate within a single store_id.
106+
// It is up to clients to use single or multiple stores for their use-case.
107+
// This can be used for client-isolation/ rate-limiting / throttling on the server-side.
108+
// Authorization and billing can also be performed at the store_id level.
109+
string store_id = 1;
110+
111+
// A key_prefix is a string of characters at the beginning of the key. Prefixes can be used as
112+
// a way to organize key-values in a similar way to directories.
113+
//
114+
// If key_prefix is specified, the response results will be limited to those keys that begin with
115+
// the specified prefix.
116+
//
117+
// If no key_prefix is specified or it is empty (""), all the keys are eligible to be returned in
118+
// the response.
119+
optional string key_prefix = 2;
120+
121+
// page_size is used by clients to specify the maximum number of results that can be returned by
122+
// the server.
123+
// The server may further constrain the maximum number of results returned in a single page.
124+
// If the page_size is 0 or not set, the server will decide the number of results to be returned.
125+
optional int32 page_size = 3;
126+
127+
// page_token is a pagination token.
128+
//
129+
// To query for the first page of ListKeyVersions, page_token must not be specified.
130+
//
131+
// For subsequent pages, use the value that was returned as `next_page_token` in the previous
132+
// page's ListKeyVersionsResponse.
133+
optional string page_token = 4;
134+
}
135+
136+
message ListKeyVersionsResponse {
137+
138+
// Fetched keys and versions.
139+
// Even though this API reuses KeyValue struct, the value sub-field will not be set by the server.
140+
repeated KeyValue key_versions = 1;
141+
142+
// next_page_token is a pagination token, used to retrieve the next page of results.
143+
// Use this value to query for next_page of paginated ListKeyVersions operation, by specifying
144+
// this value as the `page_token` in the next request.
145+
//
146+
// If next_page_token is empty (""), then the "last page" of results has been processed and
147+
// there is no more data to be retrieved.
148+
//
149+
// If next_page_token is not empty, it does not necessarily mean that there is more data in the
150+
// result set. The only way to know when you have reached the end of the result set is when
151+
// next_page_token is empty.
152+
//
153+
// Caution: Clients must not assume a specific number of key_versions to be present in a page for
154+
// paginated response.
155+
optional string next_page_token = 2;
156+
157+
// global_version is a sequence-number/version of the whole store.
158+
//
159+
// global_version is only returned in response for the first page of the ListKeyVersionsResponse
160+
// and is guaranteed to be read before reading any key-versions.
161+
//
162+
// In case of refreshing the complete key-version view on the client-side, correct usage for
163+
// the returned global_version is as following:
164+
// 1. Read global_version from the first page of paginated response and save it as local variable.
165+
// 2. Update all the key_versions on client-side from all the pages of paginated response.
166+
// 3. Update global_version on client_side from the local variable saved in step-1.
167+
// This ensures that on client-side, all current key_versions were stored at global_version or later.
168+
// This guarantee is helpful for ensuring the versioning correctness if using the global_version
169+
// in PutObject API and can help avoid the race conditions related to it.
170+
optional int64 global_version = 3;
171+
}
172+
101173
// When HttpStatusCode is not ok (200), the response `content` contains a serialized ErrorResponse
102174
// with the relevant ErrorCode and message
103175
message ErrorResponse {

0 commit comments

Comments
 (0)