From e03f5ca25f2b63ab4efab5860701293246aac9c9 Mon Sep 17 00:00:00 2001 From: Ali Masarwa Date: Tue, 10 Dec 2024 15:09:50 +0200 Subject: [PATCH] RGW\logging: convert s3_filter to key_filter Signed-off-by: Ali Masarwa --- doc/radosgw/s3/bucketops.rst | 24 ---------------- examples/rgw/boto3/service-2.sdk-extras.json | 16 +++++++++-- src/rgw/rgw_bucket_logging.cc | 19 ++++++++----- src/rgw/rgw_bucket_logging.h | 30 ++++++-------------- 4 files changed, 35 insertions(+), 54 deletions(-) diff --git a/doc/radosgw/s3/bucketops.rst b/doc/radosgw/s3/bucketops.rst index 4f354f14dab7..36b712ab4b78 100644 --- a/doc/radosgw/s3/bucketops.rst +++ b/doc/radosgw/s3/bucketops.rst @@ -758,18 +758,6 @@ Parameters are XML encoded in the body of the request, in the following format: - - - - - - - - - - - - @@ -908,18 +896,6 @@ Response is XML encoded in the body of the request, in the following format: - - - - - - - - - - - - diff --git a/examples/rgw/boto3/service-2.sdk-extras.json b/examples/rgw/boto3/service-2.sdk-extras.json index 15aa6bc85380..5decf6db9a7d 100644 --- a/examples/rgw/boto3/service-2.sdk-extras.json +++ b/examples/rgw/boto3/service-2.sdk-extras.json @@ -289,8 +289,8 @@ "documentation":"indicates how many records to batch in memory before writing to the object. if set to zero, records are written syncronously to the object. if ObjectRollTimee is reached, the batch of records will be written to the object regardless of the number of records.

" }, "Filter":{ - "shape":"NotificationConfigurationFilter", - "documentation":"

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 f63efeee9408..d24a53024f1b 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 bedd5d3e0bd0..d4877bafb0f2 100644 --- a/src/rgw/rgw_bucket_logging.h +++ b/src/rgw/rgw_bucket_logging.h @@ -50,24 +50,12 @@ namespace rgw::bucketlogging { integer integer - - - suffix/prefix/regex - - - - - - - - - - - - - - - + + + suffix/prefix/regex + + + @@ -99,7 +87,7 @@ struct configuration { PartitionDateSource date_source = PartitionDateSource::DeliveryTime; // EventTime: use only year, month, and day. The hour, minutes and seconds are set to 00 in the key // DeliveryTime: the time the log object was created - rgw_s3_filter s3_filter; + rgw_s3_key_filter key_filter; bool decode_xml(XMLObj *obj); void dump_xml(Formatter *f) const; void dump(Formatter *f) const; // json @@ -115,7 +103,7 @@ struct configuration { encode(records_batch_size, bl); encode(static_cast(date_source), bl); if (logging_type == LoggingType::Journal) { - encode(s3_filter, bl); + encode(key_filter, bl); } ENCODE_FINISH(bl); } @@ -134,7 +122,7 @@ struct configuration { decode(type, bl); date_source = static_cast(type); if (logging_type == LoggingType::Journal) { - decode(s3_filter, bl); + decode(key_filter, bl); } DECODE_FINISH(bl); } -- 2.47.3