From 8dcbab803550d7a7c8308535439538b54a365fcc Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Wed, 3 Apr 2019 22:21:36 +0200 Subject: [PATCH] fix: Spray-and-pray hotfixes to avoid exploding event sizes in store (#191) --- general/src/types/meta.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/general/src/types/meta.rs b/general/src/types/meta.rs index 4f5fd350c0..accb230d9d 100644 --- a/general/src/types/meta.rs +++ b/general/src/types/meta.rs @@ -4,6 +4,7 @@ use std::str::FromStr; use serde::{de, ser::SerializeSeq, Deserialize, Deserializer, Serialize, Serializer}; use smallvec::SmallVec; +use crate::processor::estimate_size; use crate::types::{Map, ToValue, Value}; /// The start (inclusive) and end (exclusive) indices of a `Remark`. @@ -544,7 +545,12 @@ impl Meta { /// Mutable reference to errors of this field. pub fn add_error>(&mut self, err: E) { - self.upsert().errors.push(err.into()); + let errors = &mut self.upsert().errors; + let err = err.into(); + if errors.contains(&err) { + return; + } + errors.push(err); } /// Returns a reference to the original value, if any. @@ -557,7 +563,11 @@ impl Meta { where T: ToValue, { - self.upsert().original_value = original_value.map(ToValue::to_value); + // XXX: Since metadata is currently not subject to trimming, only allow really small values + // in original_value for now. + if estimate_size(original_value.as_ref()) < 500 { + self.upsert().original_value = original_value.map(ToValue::to_value); + } } /// Take out the original value.