Skip to content

Commit 73dba97

Browse files
committed
fix(cloudwatch-logs): add @NotNull guard, rate-limit entity rejection log, remove duplicate test
- Add @NotNull on attributes field to prevent NPE from explicit null in YAML - Use NOISY marker on entity rejection WARN to rate-limit under load - Remove redundant empty-key-attributes test (default is already emptyMap) - Add test for @NotNull constraint violation on null attributes Signed-off-by: Nikhil Bagmar <nikhilbagmar73@gmail.com>
1 parent b5f09b4 commit 73dba97

3 files changed

Lines changed: 12 additions & 8 deletions

File tree

data-prepper-plugins/cloudwatch-logs/src/main/java/org/opensearch/dataprepper/plugins/sink/cloudwatch_logs/client/CloudWatchLogsDispatcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public void upload() {
177177
}
178178
if (putLogEventsResponse != null && putLogEventsResponse.rejectedEntityInfo() != null) {
179179
cloudWatchLogsMetrics.increaseEntityRejectedCounter(1);
180-
LOG.warn("Entity was rejected by CloudWatch: {}",
180+
LOG.warn(NOISY, "Entity was rejected by CloudWatch: {}",
181181
putLogEventsResponse.rejectedEntityInfo().errorTypeAsString());
182182
}
183183
cloudWatchLogsMetrics.increaseLogEventSuccessCounter(totalEventCount - dlqObjects.size());

data-prepper-plugins/cloudwatch-logs/src/main/java/org/opensearch/dataprepper/plugins/sink/cloudwatch_logs/config/EntityConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import com.fasterxml.jackson.annotation.JsonProperty;
1414
import jakarta.validation.constraints.NotEmpty;
15+
import jakarta.validation.constraints.NotNull;
1516

1617
import java.util.Collections;
1718
import java.util.Map;
@@ -23,6 +24,7 @@ public class EntityConfig {
2324
private Map<String, String> keyAttributes = Collections.emptyMap();
2425

2526
@JsonProperty("attributes")
27+
@NotNull
2628
private Map<String, String> attributes = Collections.emptyMap();
2729

2830
public Map<String, String> getKeyAttributes() {

data-prepper-plugins/cloudwatch-logs/src/test/java/org/opensearch/dataprepper/plugins/sink/cloudwatch_logs/config/EntityConfigTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.junit.jupiter.api.Test;
2020
import org.opensearch.dataprepper.test.helper.ReflectivelySetField;
2121

22-
import java.util.Collections;
2322
import java.util.HashMap;
2423
import java.util.Map;
2524
import java.util.Set;
@@ -122,10 +121,8 @@ void GIVEN_entity_config_with_only_key_attributes_in_yaml_WHEN_deserialized_SHOU
122121
}
123122

124123
@Test
125-
void GIVEN_entity_config_with_empty_key_attributes_WHEN_validated_SHOULD_fail_NotEmpty_constraint()
126-
throws NoSuchFieldException, IllegalAccessException {
124+
void GIVEN_entity_config_with_default_key_attributes_WHEN_validated_SHOULD_fail_NotEmpty_constraint() {
127125
final EntityConfig entityConfig = new EntityConfig();
128-
ReflectivelySetField.setField(EntityConfig.class, entityConfig, KEY_ATTRIBUTES_FIELD, Collections.emptyMap());
129126

130127
final Set<ConstraintViolation<EntityConfig>> violations = validator.validate(entityConfig);
131128

@@ -135,14 +132,19 @@ void GIVEN_entity_config_with_empty_key_attributes_WHEN_validated_SHOULD_fail_No
135132
}
136133

137134
@Test
138-
void GIVEN_entity_config_with_default_key_attributes_WHEN_validated_SHOULD_fail_NotEmpty_constraint() {
135+
void GIVEN_null_attributes_WHEN_validated_SHOULD_fail_NotNull_constraint()
136+
throws NoSuchFieldException, IllegalAccessException {
139137
final EntityConfig entityConfig = new EntityConfig();
138+
final Map<String, String> keyAttributes = new HashMap<>();
139+
keyAttributes.put("Type", "Service");
140+
keyAttributes.put("Name", "my-app");
141+
ReflectivelySetField.setField(EntityConfig.class, entityConfig, KEY_ATTRIBUTES_FIELD, keyAttributes);
142+
ReflectivelySetField.setField(EntityConfig.class, entityConfig, ATTRIBUTES_FIELD, null);
140143

141144
final Set<ConstraintViolation<EntityConfig>> violations = validator.validate(entityConfig);
142145

143146
assertThat(violations, hasSize(1));
144-
final ConstraintViolation<EntityConfig> violation = violations.iterator().next();
145-
assertThat(violation.getPropertyPath().toString(), equalTo(KEY_ATTRIBUTES_FIELD));
147+
assertThat(violations.iterator().next().getPropertyPath().toString(), equalTo(ATTRIBUTES_FIELD));
146148
}
147149

148150
@Test

0 commit comments

Comments
 (0)