@@ -9,7 +9,7 @@ message GetObjectRequest {
9
9
// All APIs operate within a single store_id.
10
10
// It is up to clients to use single or multiple stores for their use-case.
11
11
// 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.
13
13
string store_id = 1 ;
14
14
15
15
// Key for which the value is to be fetched.
@@ -98,6 +98,78 @@ message PutObjectRequest {
98
98
message PutObjectResponse {
99
99
}
100
100
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
+
101
173
// When HttpStatusCode is not ok (200), the response `content` contains a serialized ErrorResponse
102
174
// with the relevant ErrorCode and message
103
175
message ErrorResponse {
0 commit comments