@@ -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,79 @@ message PutObjectRequest {
9898message 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 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, store 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 stored in step-1.
167+ // This ensures that on client-side, we can guarantee that all current key_versions are at least
168+ // from the corresponding global_version. This guarantee is helpful for ensuring the versioning
169+ // correctness if using the global_version in PutObject API and can help avoid the race conditions
170+ // related to it.
171+ optional int64 global_version = 3 ;
172+ }
173+
101174// When HttpStatusCode is not ok (200), the response `content` contains a serialized ErrorResponse
102175// with the relevant ErrorCode and message
103176message ErrorResponse {
0 commit comments