From f683d4b0082a50eedefe93be9cc3c4d61cd9cb17 Mon Sep 17 00:00:00 2001 From: "chris.smith" Date: Wed, 26 Oct 2022 10:06:28 -0400 Subject: [PATCH] Add metadata to KinesisFirehose response record to support dynamic partitioning --- .../KinesisFirehoseResponse.cs | 27 +++++++++++++++++++ .../test/EventsTests.Shared/EventTests.cs | 3 ++- .../kinesis-firehose-response.json | 10 +++++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/Libraries/src/Amazon.Lambda.KinesisFirehoseEvents/KinesisFirehoseResponse.cs b/Libraries/src/Amazon.Lambda.KinesisFirehoseEvents/KinesisFirehoseResponse.cs index 76d9fcb81..3c9a31681 100644 --- a/Libraries/src/Amazon.Lambda.KinesisFirehoseEvents/KinesisFirehoseResponse.cs +++ b/Libraries/src/Amazon.Lambda.KinesisFirehoseEvents/KinesisFirehoseResponse.cs @@ -92,6 +92,16 @@ public class FirehoseRecord #endif public string Base64EncodedData { get; set; } + /// + /// The response record metadata. + /// + [DataMember(Name = "metadata")] +#if NETCOREAPP_3_1 + [System.Text.Json.Serialization.JsonPropertyName("metadata")] +#endif + public FirehoseResponseRecordMetadata Metadata { get; set; } + + /// /// Base64 encodes the data and sets the Base64EncodedData property. /// @@ -101,5 +111,22 @@ public void EncodeData(string data) this.Base64EncodedData = Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); } } + + /// + /// The response record metadata after processing KinesisFirehoseEvent.Records + /// + [DataContract] + public class FirehoseResponseRecordMetadata + { + /// + /// Key Value pairs used for Dynamic Partitioning + /// https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html + /// + [DataMember(Name = "partitionKeys")] +#if NETCOREAPP_3_1 + [System.Text.Json.Serialization.JsonPropertyName("partitionKeys")] +#endif + public Dictionary PartitionKeys { get; set; } + } } } diff --git a/Libraries/test/EventsTests.Shared/EventTests.cs b/Libraries/test/EventsTests.Shared/EventTests.cs index 8027c78ac..36c4481bd 100644 --- a/Libraries/test/EventsTests.Shared/EventTests.cs +++ b/Libraries/test/EventsTests.Shared/EventTests.cs @@ -1559,7 +1559,8 @@ public void KinesisFirehoseResponseTest(Type serializerType) Assert.Equal("49572672223665514422805246926656954630972486059535892482", kinesisResponse.Records[0].RecordId); Assert.Equal(KinesisFirehoseResponse.TRANSFORMED_STATE_OK, kinesisResponse.Records[0].Result); Assert.Equal("SEVMTE8gV09STEQ=", kinesisResponse.Records[0].Base64EncodedData); - + Assert.Equal("iamValue1", kinesisResponse.Records[0].Metadata.PartitionKeys["iamKey1"]); + Assert.Equal("iamValue2", kinesisResponse.Records[0].Metadata.PartitionKeys["iamKey2"]); MemoryStream ms = new MemoryStream(); diff --git a/Libraries/test/EventsTests.Shared/kinesis-firehose-response.json b/Libraries/test/EventsTests.Shared/kinesis-firehose-response.json index bf25f21d1..8fb0c21db 100644 --- a/Libraries/test/EventsTests.Shared/kinesis-firehose-response.json +++ b/Libraries/test/EventsTests.Shared/kinesis-firehose-response.json @@ -3,7 +3,13 @@ { "recordId": "49572672223665514422805246926656954630972486059535892482", "result": "Ok", - "data": "SEVMTE8gV09STEQ=" + "data": "SEVMTE8gV09STEQ=", + "metadata": { + "partitionKeys": { + "iamKey1": "iamValue1", + "iamKey2": "iamValue2" + } + } } ] -} \ No newline at end of file +}