From 2fb527162eab75f09662f25639836fff34005b24 Mon Sep 17 00:00:00 2001 From: galsalomon66 Date: Mon, 18 Oct 2021 01:42:01 +0300 Subject: [PATCH] fix comments; merge with presto-changes Signed-off-by: galsalomon66 --- src/rgw/rgw_rest_s3.cc | 25 ++++++++++++++----------- src/rgw/rgw_rest_s3.h | 9 ++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 8e7d13919f995..4c7d8eeeb89a5 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -6269,14 +6269,14 @@ int aws_response_handler::create_message(u_int32_t header_len) push_encode_int(total_byte_len, 0); push_encode_int(header_len, 4); - crc32->reset(); - *crc32 = std::for_each(sql_result.data(), sql_result.data() + 8, *crc32); //crc for starting 8 bytes - preload_crc = (*crc32)(); + crc32.reset(); + crc32 = std::for_each(sql_result.data(), sql_result.data() + 8, crc32); //crc for starting 8 bytes + preload_crc = crc32(); push_encode_int(preload_crc, 8); - crc32->reset(); - *crc32 = std::for_each(sql_result.begin(), sql_result.end(), *crc32); //crc for payload + checksum - message_crc = (*crc32)(); + crc32.reset(); + crc32 = std::for_each(sql_result.begin(), sql_result.end(), crc32); //crc for payload + checksum + message_crc = crc32(); u_int32_t x = htonl(message_crc); sql_result.append(reinterpret_cast(&x), sizeof(x)); @@ -6286,7 +6286,7 @@ int aws_response_handler::create_message(u_int32_t header_len) void aws_response_handler::init_response() { //12 positions for header-crc - sql_result = "012345678901"; + sql_result.resize(header_crc_size,'\0'); } void aws_response_handler::init_success_response() @@ -6299,7 +6299,7 @@ void aws_response_handler::init_success_response() void aws_response_handler::send_continuation_response() { - sql_result = "012345678901"; + sql_result.resize(header_crc_size,'\0'); m_buff_header.clear(); header_size = create_header_continuation(); sql_result.append(m_buff_header.c_str(), header_size); @@ -6310,7 +6310,7 @@ void aws_response_handler::send_continuation_response() void aws_response_handler::init_progress_response() { - sql_result = "012345678901"; + sql_result.resize(header_crc_size,'\0'); m_buff_header.clear(); header_size = create_header_progress(); sql_result.append(m_buff_header.c_str(), header_size); @@ -6318,7 +6318,7 @@ void aws_response_handler::init_progress_response() void aws_response_handler::init_stats_response() { - sql_result = "012345678901"; + sql_result.resize(header_crc_size,'\0'); m_buff_header.clear(); header_size = create_header_stats(); sql_result.append(m_buff_header.c_str(), header_size); @@ -6326,7 +6326,7 @@ void aws_response_handler::init_stats_response() void aws_response_handler::init_end_response() { - sql_result = "012345678901"; + sql_result.resize(header_crc_size,'\0'); m_buff_header.clear(); header_size = create_header_end(); sql_result.append(m_buff_header.c_str(), header_size); @@ -6567,6 +6567,9 @@ int RGWSelectObj_ObjStore_S3::handle_aws_cli_parameters(std::string& sql_query) extract_by_tag("RecordDelimiter", m_row_delimiter); if (m_row_delimiter.size()==0) { m_row_delimiter='\n'; + }else if(m_row_delimiter.compare(" ") == 0) + {//presto change + m_row_delimiter='\n'; } extract_by_tag("QuoteEscapeCharacter", m_escape_char); diff --git a/src/rgw/rgw_rest_s3.h b/src/rgw/rgw_rest_s3.h index 389c599edcaf8..c54121722b8bd 100644 --- a/src/rgw/rgw_rest_s3.h +++ b/src/rgw/rgw_rest_s3.h @@ -922,7 +922,8 @@ private: std::string sql_result; struct req_state *s;//TODO will be replace by callback uint32_t header_size; - std::unique_ptr crc32; + // the parameters are according to CRC-32 algorithm and its aligned with AWS-cli checksum + boost::crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true> crc32; RGWOp *m_rgwop; std::string m_buff_header; uint64_t total_bytes_returned; @@ -955,6 +956,7 @@ private: const char *END_PAYLOAD_LINE= "\n"; const char *header_name_str[5] = {":event-type", ":content-type", ":message-type",":error-code",":error-message"}; const char *header_value_str[10] = {"Records", "application/octet-stream", "event", "Cont", "Progress", "End", "text/xml", "Stats", "s3select-engine-error","error"}; + static constexpr size_t header_crc_size = 12; void push_header(const char * header_name,const char* header_value); @@ -963,10 +965,7 @@ private: public: //12 positions for header-crc aws_response_handler(struct req_state *ps,RGWOp *rgwop) : sql_result("012345678901"), s(ps),m_rgwop(rgwop),total_bytes_returned{0},processed_size{0} - { - // the parameters are according to CRC-32 algorithm and its aligned with AWS-cli checksum - crc32 = std::unique_ptr(new boost::crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true>); - } + { } std::string &get_sql_result(); -- 2.39.5