From: Ali Masarwa ObjectRollTimee is reached, the batch of records will be written to the object regardless of the number of records.
A filter for all log object. Types of filter for the object by its: attributes, tags and key (prefix, suffix and regex).
" + "shape":"LoggingConfigurationFilter", + "documentation":"A filter for all log object. Filter for the object by its key (prefix, suffix and regex).
" } }, "documentation":"Describes where logs are stored the prefix assigned to all log object keys for a bucket, and their format. also, the level the delivery guarantee of the records.
" @@ -344,6 +344,18 @@ "Standard", "Journal" ] + }, + "LoggingConfigurationFilter":{ + "type":"structure", + "members":{ + "Key":{ + "shape":"S3KeyFilter", + "documentation":"", + "locationName":"S3Key" + } + }, + "documentation":"A filter for all log object. Filter for the object by its key (prefix, suffix and regex).
", + "locationName":"Filter" } }, "documentation":"" diff --git a/src/rgw/rgw_bucket_logging.cc b/src/rgw/rgw_bucket_logging.cc index f63efeee940..d24a53024f1 100644 --- a/src/rgw/rgw_bucket_logging.cc +++ b/src/rgw/rgw_bucket_logging.cc @@ -31,7 +31,9 @@ bool configuration::decode_xml(XMLObj* obj) { logging_type = LoggingType::Standard; } else if (type == "Journal") { logging_type = LoggingType::Journal; - RGWXMLDecoder::decode_xml("Filter", s3_filter, o); + if (iter = o->find("Filter"); XMLObj* const filter_o = iter.get_next()) { + RGWXMLDecoder::decode_xml("S3Key", key_filter, filter_o); + } } else { // we don't allow for type "Any" in the configuration throw RGWXMLDecoder::err("invalid bucket logging record type: '" + type + "'"); @@ -74,8 +76,10 @@ void configuration::dump_xml(Formatter *f) const { break; case LoggingType::Journal: ::encode_xml("LoggingType", "Journal", f); - if (s3_filter.has_content()) { - ::encode_xml("Filter", s3_filter, f); + if (key_filter.has_content()) { + f->open_object_section("Filter"); + ::encode_xml("S3Key", key_filter, f); + f->close_section(); // Filter } break; case LoggingType::Any: @@ -122,8 +126,9 @@ void configuration::dump(Formatter *f) const { break; case LoggingType::Journal: encode_json("loggingType", "Journal", f); - if (s3_filter.has_content()) { - encode_json("Filter", s3_filter, f); + if (key_filter.has_content()) { + Formatter::ObjectSection s(*f, "Filter"); + encode_json("S3Key", key_filter, f); } break; case LoggingType::Any: @@ -533,8 +538,8 @@ int log_record(rgw::sal::Driver* driver, if (type != LoggingType::Any && configuration.logging_type != type) { return 0; } - if (configuration.s3_filter.has_content()) { - if (!match(configuration.s3_filter, obj)) { + if (configuration.key_filter.has_content()) { + if (!match(configuration.key_filter, obj->get_name())) { return 0; } } diff --git a/src/rgw/rgw_bucket_logging.h b/src/rgw/rgw_bucket_logging.h index bedd5d3e0bd..d4877bafb0f 100644 --- a/src/rgw/rgw_bucket_logging.h +++ b/src/rgw/rgw_bucket_logging.h @@ -50,24 +50,12 @@ namespace rgw::bucketlogging {