summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAli Masarwa <amasarwa@redhat.com>2024-12-10 14:09:50 +0100
committerAli Masarwa <amasarwa@redhat.com>2024-12-17 12:06:11 +0100
commite03f5ca25f2b63ab4efab5860701293246aac9c9 (patch)
tree35ee67294af520f89c7e2d2cfff940b395a1944a
parentRGW/logging: add filtering for bucket logging (diff)
downloadceph-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.rst24
-rw-r--r--examples/rgw/boto3/service-2.sdk-extras.json16
-rw-r--r--src/rgw/rgw_bucket_logging.cc19
-rw-r--r--src/rgw/rgw_bucket_logging.h30
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);
}