diff options
author | Ali Masarwa <amasarwa@redhat.com> | 2024-12-10 14:09:50 +0100 |
---|---|---|
committer | Ali Masarwa <amasarwa@redhat.com> | 2024-12-17 12:06:11 +0100 |
commit | e03f5ca25f2b63ab4efab5860701293246aac9c9 (patch) | |
tree | 35ee67294af520f89c7e2d2cfff940b395a1944a | |
parent | RGW/logging: add filtering for bucket logging (diff) | |
download | ceph-e03f5ca25f2b63ab4efab5860701293246aac9c9.tar.xz ceph-e03f5ca25f2b63ab4efab5860701293246aac9c9.zip |
RGW\logging: convert s3_filter to key_filter
Signed-off-by: Ali Masarwa <amasarwa@redhat.com>
-rw-r--r-- | doc/radosgw/s3/bucketops.rst | 24 | ||||
-rw-r--r-- | examples/rgw/boto3/service-2.sdk-extras.json | 16 | ||||
-rw-r--r-- | src/rgw/rgw_bucket_logging.cc | 19 | ||||
-rw-r--r-- | 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 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: <Value></Value> </FilterRule> </S3Key> - <S3Metadata> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Metadata> - <S3Tags> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Tags> </Filter> </LoggingEnabled> </BucketLoggingStatus> @@ -908,18 +896,6 @@ Response is XML encoded in the body of the request, in the following format: <Value></Value> </FilterRule> </S3Key> - <S3Metadata> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Metadata> - <S3Tags> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Tags> </Filter> </LoggingEnabled> </BucketLoggingStatus> 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 <code>ObjectRollTime</code>e is reached, the batch of records will be written to the object regardless of the number of records. </p>" }, "Filter":{ - "shape":"NotificationConfigurationFilter", - "documentation":"<p>A filter for all log object. Types of filter for the object by its: attributes, tags and key (prefix, suffix and regex).</p>" + "shape":"LoggingConfigurationFilter", + "documentation":"<p>A filter for all log object. Filter for the object by its key (prefix, suffix and regex).</p>" } }, "documentation":"<p>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.</p>" @@ -344,6 +344,18 @@ "Standard", "Journal" ] + }, + "LoggingConfigurationFilter":{ + "type":"structure", + "members":{ + "Key":{ + "shape":"S3KeyFilter", + "documentation":"<p/>", + "locationName":"S3Key" + } + }, + "documentation":"<p>A filter for all log object. Filter for the object by its key (prefix, suffix and regex).</p>", + "locationName":"Filter" } }, "documentation":"<p/>" 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 { <ObjectRollTime>integer</ObjectRollTime> <!-- Ceph extension --> <RecordsBatchSize>integer</RecordsBatchSize> <!-- Ceph extension --> <Filter> - <S3Key> - <FilterRule> - <Name>suffix/prefix/regex</Name> - <Value></Value> - </FilterRule> - </S3Key> - <S3Metadata> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Metadata> - <S3Tags> - <FilterRule> - <Name></Name> - <Value></Value> - </FilterRule> - </S3Tags> + <S3Key> + <FilterRule> + <Name>suffix/prefix/regex</Name> + <Value></Value> + </FilterRule> + </S3Key> </Filter> </LoggingEnabled> </BucketLoggingStatus> @@ -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<int>(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<PartitionDateSource>(type); if (logging_type == LoggingType::Journal) { - decode(s3_filter, bl); + decode(key_filter, bl); } DECODE_FINISH(bl); } |