From: Ali Masarwa Date: Tue, 10 Dec 2024 13:09:50 +0000 (+0200) Subject: RGW\logging: convert s3_filter to key_filter X-Git-Tag: testing/wip-vshankar-testing-20241219.063429-debug~22^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e03f5ca25f2b63ab4efab5860701293246aac9c9;p=ceph-ci.git RGW\logging: convert s3_filter to key_filter Signed-off-by: Ali Masarwa --- diff --git a/doc/radosgw/s3/bucketops.rst b/doc/radosgw/s3/bucketops.rst index 4f354f14dab..36b712ab4b7 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 15aa6bc8538..5decf6db9a7 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 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 { 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); }