Skip to content

Commit 0c12f5b

Browse files
committed
Merge pull request #14 from robertgrimm/master
Fixes to allow bulk put requests with only empty folder objects.
2 parents 90f1caa + 6ef532e commit 0c12f5b

File tree

1 file changed

+4
-17
lines changed

1 file changed

+4
-17
lines changed

src/ds3.c

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ struct _ds3_request{
3535
GHashTable* headers;
3636
GHashTable* query_params;
3737

38-
uint64_t expected_status_code;
39-
4038
//These next few elements are only for the bulk commands
4139
ds3_bulk_object_list* object_list;
4240
};
@@ -461,8 +459,7 @@ static ds3_error* _net_process_request(const ds3_client* client, const ds3_reque
461459
return error;
462460
}
463461

464-
fprintf(stderr, "Got status code of (%llu) expected (%llu)\n", response_data.status_code, request->expected_status_code);
465-
if(request->expected_status_code != response_data.status_code) {
462+
if(response_data.status_code < 200 || response_data.status_code >= 300) {
466463
ds3_error* error = _ds3_create_error(DS3_ERROR_BAD_STATUS_CODE, "Got an unexpected status code.");
467464
error->error = g_new0(ds3_error_response, 1);
468465
error->error->status_code = response_data.status_code;
@@ -567,7 +564,6 @@ static struct _ds3_request* _common_request_init(void){
567564

568565
ds3_request* ds3_init_get_service(void) {
569566
struct _ds3_request* request = _common_request_init();
570-
request->expected_status_code = 200;
571567
request->verb = HTTP_GET;
572568
request->path = g_new0(char, 2);
573569
request->path [0] = '/';
@@ -576,31 +572,27 @@ ds3_request* ds3_init_get_service(void) {
576572

577573
ds3_request* ds3_init_get_bucket(const char* bucket_name) {
578574
struct _ds3_request* request = _common_request_init();
579-
request->expected_status_code = 200;
580575
request->verb = HTTP_GET;
581576
request->path = g_strconcat("/", bucket_name, NULL);
582577
return (ds3_request*) request;
583578
}
584579

585580
ds3_request* ds3_init_get_object(const char* bucket_name, const char* object_name) {
586581
struct _ds3_request* request = _common_request_init();
587-
request->expected_status_code = 200;
588582
request->verb = HTTP_GET;
589583
request->path = g_strconcat("/", bucket_name, "/", object_name, NULL);
590584
return (ds3_request*) request;
591585
}
592586

593587
ds3_request* ds3_init_delete_object(const char* bucket_name, const char* object_name) {
594588
struct _ds3_request* request = _common_request_init();
595-
request->expected_status_code = 204;
596589
request->verb = HTTP_DELETE;
597590
request->path = g_strconcat("/", bucket_name, "/", object_name, NULL);
598591
return (ds3_request*) request;
599592
}
600593

601594
ds3_request* ds3_init_put_object(const char* bucket_name, const char* object_name, uint64_t length) {
602595
struct _ds3_request* request = _common_request_init();
603-
request->expected_status_code = 200;
604596
request->verb = HTTP_PUT;
605597
request->path = g_strconcat("/", bucket_name, "/", object_name, NULL);
606598
request->length = length;
@@ -609,23 +601,20 @@ ds3_request* ds3_init_put_object(const char* bucket_name, const char* object_nam
609601

610602
ds3_request* ds3_init_put_bucket(const char* bucket_name) {
611603
struct _ds3_request* request = _common_request_init();
612-
request->expected_status_code = 200;
613604
request->verb = HTTP_PUT;
614605
request->path = g_strconcat("/", bucket_name, NULL);
615606
return (ds3_request*) request;
616607
}
617608

618609
ds3_request* ds3_init_delete_bucket(const char* bucket_name) {
619610
struct _ds3_request* request = _common_request_init();
620-
request->expected_status_code = 204;
621611
request->verb = HTTP_DELETE;
622612
request->path = g_strconcat("/", bucket_name, NULL);
623613
return (ds3_request*) request;
624614
}
625615

626616
ds3_request* ds3_init_get_bulk(const char* bucket_name, ds3_bulk_object_list* object_list) {
627617
struct _ds3_request* request = _common_request_init();
628-
request->expected_status_code = 200;
629618
request->verb = HTTP_PUT;
630619
request->path = g_strconcat("/_rest_/bucket/", bucket_name, NULL);
631620
_set_query_param((ds3_request*) request, "operation", "start_bulk_get");
@@ -635,7 +624,6 @@ ds3_request* ds3_init_get_bulk(const char* bucket_name, ds3_bulk_object_list* ob
635624

636625
ds3_request* ds3_init_put_bulk(const char* bucket_name, ds3_bulk_object_list* object_list) {
637626
struct _ds3_request* request = _common_request_init();
638-
request->expected_status_code = 200;
639627
request->verb = HTTP_PUT;
640628
request->path = g_strconcat("/_rest_/bucket/", bucket_name, NULL);
641629
_set_query_param((ds3_request*) request, "operation", "start_bulk_put");
@@ -1291,11 +1279,10 @@ ds3_error* ds3_bulk(const ds3_client* client, const ds3_request* _request, ds3_b
12911279
// Start processing the data that was received back.
12921280
doc = xmlParseMemory((const char*) xml_blob->data, xml_blob->len);
12931281
if(doc == NULL) {
1294-
char* message = g_strconcat("Failed to parse response document. The actual response is: ", xml_blob->data, NULL);
1282+
// Bulk put with just empty folder objects will return a 204 and thus
1283+
// not have a body.
12951284
g_byte_array_free(xml_blob, TRUE);
1296-
ds3_error* error = _ds3_create_error(DS3_ERROR_INVALID_XML, message);
1297-
g_free(message);
1298-
return error;
1285+
return NULL;
12991286
}
13001287

13011288
error_response = _parse_master_object_list(doc, response);

0 commit comments

Comments
 (0)