Skip to content

Commit 05872d2

Browse files
committed
Support passing start-after parameter to list_objects
1 parent 2c57254 commit 05872d2

3 files changed

Lines changed: 12 additions & 9 deletions

File tree

ecosystem/oss.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ class OssClientImpl : public Client {
398398
int walk_list_results(const SimpleDOM::Node& node, ListObjectsCallback cb);
399399
int do_list_objects_v2(std::string_view bucket, std::string_view prefix,
400400
ListObjectsCallback cb, bool delimiters, int maxKeys,
401-
std::string* marker);
401+
std::string* marker, std::string_view start_after = {});
402402
int do_list_objects_v1(std::string_view bucket, std::string_view prefix,
403403
ListObjectsCallback cb, bool delimiters, int maxKeys,
404404
std::string* marker);
@@ -527,17 +527,17 @@ int OssClient::walk_list_results(const SimpleDOM::Node& list_bucket_result,
527527
return 0;
528528
}
529529

530-
int OssClient::do_list_objects_v2(std::string_view bucket,
531-
std::string_view prefix,
532-
ListObjectsCallback cb, bool delimiters,
533-
int maxKeys, std::string* marker) {
530+
int OssClient::do_list_objects_v2(std::string_view bucket, std::string_view prefix,
531+
ListObjectsCallback cb, bool delimiters, int maxKeys,
532+
std::string* marker, std::string_view start_after) {
534533
if (maxKeys > 1000 || maxKeys <= 0) maxKeys = m_oss_options.max_list_ret_cnt;
535534
estring_view _mark;
536535
if (marker) _mark = *marker;
537536

538537
estring escaped_prefix = photon::net::http::url_escape(prefix);
539538
estring escaped_delimiter = photon::net::http::url_escape("/");
540539
estring escaped_marker = photon::net::http::url_escape(_mark);
540+
estring escaped_start_after = photon::net::http::url_escape(start_after);
541541
estring max_key_str = std::to_string(maxKeys);
542542
// must appear in dictionary order!
543543
DEFINE_APPENDABLE_ORDERED_STRING_KV(
@@ -552,7 +552,8 @@ int OssClient::do_list_objects_v2(std::string_view bucket,
552552
query_params.insert({OSS_PARAM_KEY_DELIMITER, escaped_delimiter});
553553
if (!_mark.empty())
554554
query_params.insert({OSS_PARAM_KEY_CONTINUATION_TOKEN, escaped_marker});
555-
555+
if (!start_after.empty())
556+
query_params.insert({OSS_PARAM_KEY_START_AFTER, escaped_start_after});
556557
OssUrl oss_url(m_endpoint, bucket, {}, m_is_http);
557558
DEFINE_ONSTACK_OP(m_client, Verb::GET, oss_url.append_params(query_params));
558559
int r = sign_and_call(op, Verb::GET, oss_url, query_params);
@@ -790,7 +791,7 @@ int OssClient::list_objects(std::string_view prefix, ListObjectsCallback cb,
790791
do {
791792
if (params.ver == 2) {
792793
r = do_list_objects_v2(m_bucket, prefix, cb, params.slash_delimiter,
793-
max_keys, &marker);
794+
max_keys, &marker, params.start_after);
794795
} else {
795796
r = do_list_objects_v1(m_bucket, prefix, cb, params.slash_delimiter,
796797
max_keys, &marker);
@@ -1190,7 +1191,7 @@ int OssClient::batch_get_objects(std::vector<GetObjectParameters>& params) {
11901191
remaining -= cur;
11911192
if (remaining == 0) break;
11921193
}
1193-
1194+
11941195
r = frame.read_data(stream, &iovs[0], iovs.size());
11951196
} else {
11961197
r = frame.read_data(stream, param.iov, param.iovcnt);

ecosystem/oss.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ struct ListObjectsParameters {
9393
uint8_t ver = 2;
9494
bool slash_delimiter = false;
9595
uint16_t max_keys = 0;
96+
std::string_view start_after = "";
9697
};
9798

9899
struct ListObjectsCBParameters {
@@ -166,7 +167,7 @@ class Client : public Object {
166167
// return value is the object count which data is successfully downloaded.
167168
// It's possible only some objects get to be downloaded successfully.
168169
// return -1 if some other errors happen.
169-
// The batch_get_objects interface works only when whitelisting enabled
170+
// The batch_get_objects interface works only when whitelisting enabled
170171
// at OSS server side.
171172
virtual int batch_get_objects(std::vector<GetObjectParameters>& params) = 0;
172173

ecosystem/oss_constants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static const char OSS_PARAM_KEY_MAX_KEYS[] = "max-keys";
3333
static const char OSS_PARAM_KEY_DELIMITER[] = "delimiter";
3434
static const char OSS_PARAM_KEY_PREFIX[] = "prefix";
3535
static const char OSS_PARAM_KEY_MARKER[] = "marker";
36+
static const char OSS_PARAM_KEY_START_AFTER[] = "start-after";
3637
static const char OSS_PARAM_KEY_DELETE[] = "delete";
3738
static const char OSS_PARAM_KEY_UPLOADS[] = "uploads";
3839
static const char OSS_PARAM_KEY_PART_NUMBER[] = "partNumber";

0 commit comments

Comments
 (0)