diff --git a/Cargo.lock b/Cargo.lock index 93bf270ce0a12..496912fcf1b04 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2191,29 +2191,12 @@ dependencies = [ "half", ] -[[package]] -name = "cidr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d18b093eba54c9aaa1e3784d4361eb2ba944cf7d0a932a830132238f483e8d8" - [[package]] name = "cidr" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd1b64030216239a2e7c364b13cd96a2097ebf0dfe5025f2dedee14a23f2ab60" -[[package]] -name = "cidr-utils" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25c0a9fb70c2c2cc2a520aa259b1d1345650046a07df1b6da1d3cefcd327f43e" -dependencies = [ - "cidr 0.2.2", - "num-bigint", - "num-traits", -] - [[package]] name = "cipher" version = "0.4.4" @@ -4035,8 +4018,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.13.3+wasi-0.2.2", + "wasm-bindgen", "windows-targets 0.52.6", ] @@ -4718,7 +4703,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.8", + "socket2 0.4.10", "tokio", "tower-service", "tracing 0.1.41", @@ -5384,10 +5369,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -6451,7 +6437,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f79c902b31ceac6856e262af5dbaffef75390cf4647c9fef7b55da69a4b912e" dependencies = [ - "cidr 0.3.1", + "cidr", "serde", ] @@ -7767,7 +7753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.11.0", "proc-macro2 1.0.94", "quote 1.0.40", "syn 2.0.100", @@ -11801,7 +11787,7 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "vrl" version = "0.22.0" -source = "git+https://github.com/vectordotdev/vrl?branch=main#2d5e2dfb28ad22c2f659099f3d7869954f4a6be3" +source = "git+https://github.com/Zettroke/vrl?branch=CoW-value-optimization#c41c9a200f1d50c44d0cf4bd2abc5236757b7f5a" dependencies = [ "aes", "aes-siv", @@ -11819,7 +11805,7 @@ dependencies = [ "chrono", "chrono-tz", "ciborium", - "cidr-utils", + "cidr", "clap", "codespan-reporting", "community-id", @@ -11837,6 +11823,7 @@ dependencies = [ "exitcode", "fancy-regex", "flate2", + "getrandom 0.3.1", "grok", "hex", "hmac", @@ -11856,7 +11843,6 @@ dependencies = [ "onig", "ordered-float 4.6.0", "parse-size", - "paste", "peeking_take_while", "percent-encoding", "pest", @@ -11872,7 +11858,7 @@ dependencies = [ "publicsuffix", "quickcheck", "quoted_printable", - "rand 0.8.5", + "rand 0.9.0", "regex", "roxmltree", "rust_decimal", diff --git a/Cargo.toml b/Cargo.toml index d05a30075b0be..81992e4b3960d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -171,7 +171,8 @@ vector-lib = { path = "lib/vector-lib", default-features = false, features = ["v vector-config = { path = "lib/vector-config" } vector-config-common = { path = "lib/vector-config-common" } vector-config-macros = { path = "lib/vector-config-macros" } -vrl = { git = "https://github.com/vectordotdev/vrl", branch = "main", features = ["arbitrary", "cli", "test", "test_framework"] } +# TODO: change when https://github.com/vectordotdev/vrl/pull/1349 is merged +vrl = { git = "https://github.com/Zettroke/vrl", branch = "CoW-value-optimization", features = ["arbitrary", "cli", "test", "test_framework"] } [dependencies] pin-project.workspace = true diff --git a/lib/codecs/src/decoding/format/avro.rs b/lib/codecs/src/decoding/format/avro.rs index 7a49763179891..3ac4865367e4e 100644 --- a/lib/codecs/src/decoding/format/avro.rs +++ b/lib/codecs/src/decoding/format/avro.rs @@ -187,7 +187,7 @@ pub fn try_from(value: AvroValue) -> vector_common::Result { for item in array { vector.push(try_from(item)?); } - Ok(VrlValue::Array(vector)) + Ok(VrlValue::Array(vector.into())) } AvroValue::Boolean(boolean) => Ok(VrlValue::from(boolean)), AvroValue::Bytes(bytes) => Ok(VrlValue::from(bytes)), diff --git a/lib/codecs/src/encoding/format/gelf.rs b/lib/codecs/src/encoding/format/gelf.rs index be5c861548822..060c833a1ac29 100644 --- a/lib/codecs/src/encoding/format/gelf.rs +++ b/lib/codecs/src/encoding/format/gelf.rs @@ -236,15 +236,16 @@ fn to_gelf_event(log: LogEvent) -> vector_common::Result { #[cfg(test)] mod tests { + use std::collections::BTreeMap; use crate::encoding::SerializerConfig; use super::*; use chrono::NaiveDateTime; use vector_core::event::{Event, EventMetadata}; use vrl::btreemap; - use vrl::value::{ObjectMap, Value}; + use vrl::value::Value; - fn do_serialize(expect_success: bool, event_fields: ObjectMap) -> Option { + fn do_serialize(expect_success: bool, event_fields: BTreeMap) -> Option { let config = GelfSerializerConfig::new(); let mut serializer = config.build(); let event: Event = LogEvent::from_map(event_fields, EventMetadata::default()).into(); diff --git a/lib/opentelemetry-proto/src/convert.rs b/lib/opentelemetry-proto/src/convert.rs index 590abfebfda15..05b05ffc7573c 100644 --- a/lib/opentelemetry-proto/src/convert.rs +++ b/lib/opentelemetry-proto/src/convert.rs @@ -7,7 +7,7 @@ use vector_core::{ config::{log_schema, LegacyKey, LogNamespace}, event::{Event, LogEvent, TraceEvent}, }; -use vrl::value::KeyString; +use vrl::value::{KeyString, Array}; use vrl::{ event_path, value::{ObjectMap, Value}, @@ -87,7 +87,7 @@ impl From for Value { arr.values .into_iter() .map(|av| av.value.map(Into::into).unwrap_or(Value::Null)) - .collect::>(), + .collect::(), ), PBValue::KvlistValue(arr) => kv_list_into_value(arr.values), } @@ -395,7 +395,7 @@ impl From for Value { "dropped_attributes_count".into(), Value::Integer(ev.dropped_attributes_count as i64), ); - Value::Object(obj) + Value::Object(obj.into()) } } @@ -410,7 +410,7 @@ impl From for Value { "dropped_attributes_count".into(), Value::Integer(link.dropped_attributes_count as i64), ); - Value::Object(obj) + Value::Object(obj.into()) } } @@ -419,6 +419,6 @@ impl From for Value { let mut obj: BTreeMap = BTreeMap::new(); obj.insert("message".into(), status.message.into()); obj.insert("code".into(), status.code.into()); - Value::Object(obj) + Value::Object(obj.into()) } } diff --git a/lib/vector-core/src/event/log_event.rs b/lib/vector-core/src/event/log_event.rs index 3061767409b5b..1290f69785d18 100644 --- a/lib/vector-core/src/event/log_event.rs +++ b/lib/vector-core/src/event/log_event.rs @@ -7,7 +7,7 @@ use std::{ num::NonZeroUsize, sync::{Arc, LazyLock}, }; - +use std::collections::BTreeMap; use crate::event::util::log::all_fields_skip_array_elements; use bytes::Bytes; use chrono::Utc; @@ -150,7 +150,7 @@ impl PartialEq for Inner { #[derive(Clone, Debug, Default, Deserialize, PartialEq)] pub struct LogEvent { #[serde(flatten)] - inner: Arc, + inner: Inner, #[serde(skip)] metadata: EventMetadata, @@ -177,11 +177,11 @@ impl LogEvent { } pub fn value(&self) -> &Value { - self.inner.as_ref().as_value() + self.inner.as_value() } pub fn value_mut(&mut self) -> &mut Value { - let result = Arc::make_mut(&mut self.inner); + let result = &mut self.inner; // We MUST invalidate the inner size cache when making a // mutable copy, since the _next_ action will modify the data. result.invalidate(); @@ -258,14 +258,14 @@ impl LogEvent { /// Create a `LogEvent` from a `Value` and `EventMetadata` pub fn from_parts(value: Value, metadata: EventMetadata) -> Self { Self { - inner: Arc::new(value.into()), + inner: value.into(), metadata, } } /// Create a `LogEvent` from an `ObjectMap` and `EventMetadata` - pub fn from_map(map: ObjectMap, metadata: EventMetadata) -> Self { - let inner = Arc::new(Inner::from(Value::Object(map))); + pub fn from_map(map: BTreeMap, metadata: EventMetadata) -> Self { + let inner = Inner::from(Value::Object(map.into())); Self { inner, metadata } } @@ -273,9 +273,7 @@ impl LogEvent { pub fn into_parts(mut self) -> (Value, EventMetadata) { self.value_mut(); - let value = Arc::try_unwrap(self.inner) - .unwrap_or_else(|_| unreachable!("inner fields already cloned after owning")) - .fields; + let value = self.inner.fields; let metadata = self.metadata; (value, metadata) } @@ -668,6 +666,11 @@ impl From for LogEvent { Self::from_parts(Value::Object(map), EventMetadata::default()) } } +impl From> for LogEvent { + fn from(map: BTreeMap) -> Self { + Self::from_parts(Value::Object(map.into()), EventMetadata::default()) + } +} impl From> for LogEvent { fn from(map: HashMap) -> Self { diff --git a/lib/vector-core/src/event/proto.rs b/lib/vector-core/src/event/proto.rs index f1c926b49e1cd..f4d9a690443f2 100644 --- a/lib/vector-core/src/event/proto.rs +++ b/lib/vector-core/src/event/proto.rs @@ -15,7 +15,7 @@ mod proto_event { pub use event_wrapper::Event; pub use metric::Value as MetricValue; pub use proto_event::*; -use vrl::value::{ObjectMap, Value as VrlValue}; +use vrl::value::{Array, ObjectMap, Value as VrlValue}; use super::{array, metric::MetricSketch, EventMetadata}; @@ -112,7 +112,7 @@ impl From for super::LogEvent { .fields .into_iter() .filter_map(|(k, v)| decode_value(v).map(|value| (k.into(), value))) - .collect::(); + .collect(); Self::from_map(fields, metadata) } @@ -137,7 +137,7 @@ impl From for super::TraceEvent { .fields .into_iter() .filter_map(|(k, v)| decode_value(v).map(|value| (k.into(), value))) - .collect::(); + .collect(); Self::from(super::LogEvent::from_map(fields, metadata)) } @@ -726,7 +726,7 @@ fn decode_array(items: Vec) -> Option { items .into_iter() .map(decode_value) - .collect::>>() + .collect::>() .map(super::Value::Array) } @@ -758,7 +758,7 @@ fn encode_map(fields: ObjectMap) -> ValueMap { } } -fn encode_array(items: Vec) -> ValueArray { +fn encode_array(items: Array) -> ValueArray { ValueArray { items: items.into_iter().map(encode_value).collect(), } diff --git a/lib/vector-core/src/event/test/common.rs b/lib/vector-core/src/event/test/common.rs index 431a4f3eee417..35ab67582d4d1 100644 --- a/lib/vector-core/src/event/test/common.rs +++ b/lib/vector-core/src/event/test/common.rs @@ -1,8 +1,8 @@ use std::{collections::BTreeSet, iter}; - +use std::collections::BTreeMap; use chrono::{DateTime, Utc}; use quickcheck::{empty_shrinker, Arbitrary, Gen}; -use vrl::value::{ObjectMap, Value}; +use vrl::value::Value; use super::super::{ metric::{ @@ -77,7 +77,7 @@ impl Arbitrary for Event { impl Arbitrary for LogEvent { fn arbitrary(g: &mut Gen) -> Self { let mut gen = Gen::new(MAX_MAP_SIZE); - let map: ObjectMap = ObjectMap::arbitrary(&mut gen); + let map = BTreeMap::arbitrary(&mut gen); let metadata: EventMetadata = EventMetadata::arbitrary(g); LogEvent::from_map(map, metadata) } diff --git a/lib/vector-core/src/event/trace.rs b/lib/vector-core/src/event/trace.rs index 3956a9532315b..5a741c990cf49 100644 --- a/lib/vector-core/src/event/trace.rs +++ b/lib/vector-core/src/event/trace.rs @@ -30,7 +30,7 @@ impl TraceEvent { } pub fn from_parts(fields: ObjectMap, metadata: EventMetadata) -> Self { - Self(LogEvent::from_map(fields, metadata)) + Self(LogEvent::from_parts(Value::Object(fields), metadata)) } pub fn value(&self) -> &Value { diff --git a/lib/vector-core/src/event/util/log/all_fields.rs b/lib/vector-core/src/event/util/log/all_fields.rs index 10afadfede4cc..cefd4d8f85d2e 100644 --- a/lib/vector-core/src/event/util/log/all_fields.rs +++ b/lib/vector-core/src/event/util/log/all_fields.rs @@ -334,7 +334,7 @@ mod test { ("a.b.c", Value::Integer(5)), ("\"a.b.c\"", Value::Integer(6)), ("d", Value::Object(ObjectMap::new())), - ("e", Value::Array(Vec::new())), + ("e", Value::array()), ] .into_iter() .map(|(k, v)| (k.into(), v)) @@ -356,7 +356,7 @@ mod test { ("a.b.c", Value::Integer(5)), ("a.b.c", Value::Integer(6)), ("d", Value::Object(ObjectMap::new())), - ("e", Value::Array(Vec::new())), + ("e", Value::array()), ] .into_iter() .map(|(k, v)| (k.into(), v)) diff --git a/lib/vector-core/src/event/vrl_target.rs b/lib/vector-core/src/event/vrl_target.rs index 7ef2aec3b87a6..878ea8f3f4ac3 100644 --- a/lib/vector-core/src/event/vrl_target.rs +++ b/lib/vector-core/src/event/vrl_target.rs @@ -791,7 +791,7 @@ mod test { ]; for (value, path, expect) in cases { - let value: ObjectMap = value; + let value: ObjectMap = value.into(); let info = ProgramInfo { fallible: false, abortable: false, @@ -865,37 +865,37 @@ mod test { Ok(()), ), ( - btreemap! { "foo" => Value::Array(vec![]) }, + btreemap! { "foo" => Value::array() }, owned_value_path!("foo", 0), "baz".into(), btreemap! { "foo" => vec!["baz"] }, Ok(()), ), ( - btreemap! { "foo" => Value::Array(vec![0.into()]) }, + btreemap! { "foo" => Value::Array(vec![0.into()].into()) }, owned_value_path!("foo", 0), "baz".into(), btreemap! { "foo" => vec!["baz"] }, Ok(()), ), ( - btreemap! { "foo" => Value::Array(vec![0.into(), 1.into()]) }, + btreemap! { "foo" => Value::Array(vec![0.into(), 1.into()].into()) }, owned_value_path!("foo", 0), "baz".into(), - btreemap! { "foo" => Value::Array(vec!["baz".into(), 1.into()]) }, + btreemap! { "foo" => Value::Array(vec!["baz".into(), 1.into()].into()) }, Ok(()), ), ( - btreemap! { "foo" => Value::Array(vec![0.into(), 1.into()]) }, + btreemap! { "foo" => Value::Array(vec![0.into(), 1.into()].into()) }, owned_value_path!("foo", 1), "baz".into(), - btreemap! { "foo" => Value::Array(vec![0.into(), "baz".into()]) }, + btreemap! { "foo" => Value::Array(vec![0.into(), "baz".into()].into()) }, Ok(()), ), ]; for (object, path, value, expect, result) in cases { - let object: ObjectMap = object; + let object: ObjectMap = object.into(); let info = ProgramInfo { fallible: false, abortable: false, @@ -903,7 +903,7 @@ mod test { target_assignments: vec![], }; let mut target = VrlTarget::new(Event::Log(LogEvent::from(object)), &info, false); - let expect = LogEvent::from(expect); + let expect = LogEvent::from(ObjectMap::from(expect)); let value: Value = value; let path = OwnedTargetPath::event(path); @@ -960,7 +960,7 @@ mod test { btreemap! { "foo" => vec![0] }, owned_value_path!("foo", 0), false, - Some(btreemap! { "foo" => Value::Array(vec![]) }.into()), + Some(btreemap! { "foo" => Value::array() }.into()), ), ( btreemap! { "foo" => vec![0] }, @@ -977,7 +977,7 @@ mod test { false, Some( btreemap! { - "foo" => btreemap! { "bar baz" => Value::Array(vec![]) }, + "foo" => btreemap! { "bar baz" => Value::array() }, "bar" => "baz", } .into(), @@ -1001,7 +1001,7 @@ mod test { target_queries: vec![], target_assignments: vec![], }; - let mut target = VrlTarget::new(Event::Log(LogEvent::from(object)), &info, false); + let mut target = VrlTarget::new(Event::Log(LogEvent::from(ObjectMap::from(object))), &info, false); let path = OwnedTargetPath::event(path); let removed = Target::target_get(&target, &path).unwrap().cloned(); @@ -1222,7 +1222,7 @@ mod test { let mut target = VrlTarget::new(Event::Metric(metric), &info, false); let _result = target.target_insert( &OwnedTargetPath::event(owned_value_path!("tags")), - Value::Object(BTreeMap::from([("a".into(), "b".into())])), + Value::Object(ObjectMap::from([("a".into(), "b".into())])), ); match target { @@ -1319,7 +1319,7 @@ mod test { let mut target = VrlTarget::new(Event::Metric(metric), &info, true); - let value = Value::Array(vec!["a".into(), "".into(), Value::Null, "b".into()]); + let value = Value::Array(vec!["a".into(), "".into(), Value::Null, "b".into()].into()); target .target_insert( &OwnedTargetPath::event(owned_value_path!("tags", "foo")), @@ -1334,9 +1334,9 @@ mod test { assert_eq!( vrl_tags_value, - &Value::Object(BTreeMap::from([( + &Value::Object(ObjectMap::from([( "foo".into(), - Value::Array(vec!["a".into(), "".into(), Value::Null, "b".into()]) + Value::Array(vec!["a".into(), "".into(), Value::Null, "b".into()].into()) )])) ); diff --git a/lib/vector-core/src/schema/definition.rs b/lib/vector-core/src/schema/definition.rs index aff0522606774..dfa9ddb27df60 100644 --- a/lib/vector-core/src/schema/definition.rs +++ b/lib/vector-core/src/schema/definition.rs @@ -616,7 +616,7 @@ mod tests { use lookup::lookup_v2::parse_target_path; use lookup::owned_value_path; use std::collections::{BTreeMap, HashMap}; - use vrl::value::Value; + use vrl::value::{ObjectMap, Value}; use super::*; @@ -638,7 +638,7 @@ mod tests { TestCase { title: "match", definition: Definition::new(Kind::any(), Kind::any(), [LogNamespace::Legacy]), - event: Event::Log(LogEvent::from(BTreeMap::new())), + event: Event::Log(LogEvent::from(ObjectMap::new())), valid: true, }, TestCase { @@ -648,7 +648,7 @@ mod tests { Kind::any(), [LogNamespace::Legacy], ), - event: Event::Log(LogEvent::from(BTreeMap::from([("foo".into(), 4.into())]))), + event: Event::Log(LogEvent::from(ObjectMap::from([("foo".into(), 4.into())]))), valid: false, }, TestCase { @@ -659,7 +659,7 @@ mod tests { [LogNamespace::Legacy], ), event: Event::Log(LogEvent::from_parts( - Value::Object(BTreeMap::new()), + Value::object(), EventMetadata::default_with_value( BTreeMap::from([("foo".into(), 4.into())]).into(), ), @@ -669,7 +669,7 @@ mod tests { TestCase { title: "wrong log namespace", definition: Definition::new(Kind::any(), Kind::any(), []), - event: Event::Log(LogEvent::from(BTreeMap::new())), + event: Event::Log(LogEvent::from(ObjectMap::new())), valid: false, }, TestCase { @@ -679,7 +679,7 @@ mod tests { Kind::any(), [LogNamespace::Legacy], ), - event: Event::Log(LogEvent::from(BTreeMap::from([( + event: Event::Log(LogEvent::from(ObjectMap::from([( "foo".into(), Value::Null, )]))), diff --git a/lib/vector-core/src/tls/settings.rs b/lib/vector-core/src/tls/settings.rs index e0c84dc51308c..3e7343f87c564 100644 --- a/lib/vector-core/src/tls/settings.rs +++ b/lib/vector-core/src/tls/settings.rs @@ -460,8 +460,7 @@ impl TlsConfig { /// === System Specific Root Cert === /// -/// Most of this code is borrowed from https://github.com/ctz/rustls-native-certs - +/// Most of this code is borrowed from /// Load the system default certs from `schannel` this should be in place /// of openssl-probe on linux. #[cfg(windows)] diff --git a/lib/vector-vrl/tests/src/docs.rs b/lib/vector-vrl/tests/src/docs.rs index ec694ce316f6e..4c5baa7e2bf58 100644 --- a/lib/vector-vrl/tests/src/docs.rs +++ b/lib/vector-vrl/tests/src/docs.rs @@ -1,5 +1,5 @@ use std::{ - collections::{BTreeMap, HashMap}, + collections::HashMap, fs, process::Command, }; @@ -136,7 +136,7 @@ fn test_from_cue_example(category: &'static str, name: String, example: Example) Some(event) => { serde_json::from_value::(serde_json::Value::Object(event.log)).unwrap() } - None => Value::Object(BTreeMap::default()), + None => Value::object(), }; if returns.is_some() && output.is_some() { diff --git a/lib/vector-vrl/web-playground/src/lib.rs b/lib/vector-vrl/web-playground/src/lib.rs index a434050aefa3c..64187a54648d2 100644 --- a/lib/vector-vrl/web-playground/src/lib.rs +++ b/lib/vector-vrl/web-playground/src/lib.rs @@ -1,6 +1,5 @@ use gloo_utils::format::JsValueSerdeExt; use serde::{Deserialize, Serialize}; -use std::collections::BTreeMap; use vrl::compiler::runtime::{Runtime, Terminate}; use vrl::compiler::TimeZone; use vrl::compiler::{compile_with_state, CompileConfig, TargetValue, TypeState}; @@ -89,7 +88,7 @@ fn compile(mut input: Input) -> Result { let mut target_value = TargetValue { value: event.clone(), - metadata: Value::Object(BTreeMap::new()), + metadata: Value::object(), secrets: Secrets::new(), }; diff --git a/src/codecs/encoding/transformer.rs b/src/codecs/encoding/transformer.rs index 5539df5dd332c..a1a66fca24085 100644 --- a/src/codecs/encoding/transformer.rs +++ b/src/codecs/encoding/transformer.rs @@ -2,7 +2,6 @@ use chrono::{DateTime, Utc}; use core::fmt::Debug; -use std::collections::BTreeMap; use ordered_float::NotNan; use serde::{Deserialize, Deserializer}; @@ -131,7 +130,7 @@ impl Transformer { fn apply_only_fields(&self, log: &mut LogEvent) { if let Some(only_fields) = self.only_fields.as_ref() { - let mut old_value = std::mem::replace(log.value_mut(), Value::Object(BTreeMap::new())); + let mut old_value = std::mem::replace(log.value_mut(), Value::object()); for field in only_fields { if let Some(value) = old_value.remove(field, true) { diff --git a/src/common/http/server_auth.rs b/src/common/http/server_auth.rs index ea10ea0a25f59..32d7aee6e9e02 100644 --- a/src/common/http/server_auth.rs +++ b/src/common/http/server_auth.rs @@ -223,7 +223,7 @@ impl HttpServerAuthMatcher { program: &Program, ) -> Result<(), ErrorMessage> { let mut target = VrlTarget::new( - Event::Log(LogEvent::from_map( + Event::Log(LogEvent::from_parts( ObjectMap::from([( "headers".into(), Value::Object( @@ -237,7 +237,7 @@ impl HttpServerAuthMatcher { }) .collect::(), ), - )]), + )]).into(), Default::default(), )), program.info(), diff --git a/src/config/unit_test/mod.rs b/src/config/unit_test/mod.rs index deafeff02cfcb..ebcac73e7b9ac 100644 --- a/src/config/unit_test/mod.rs +++ b/src/config/unit_test/mod.rs @@ -12,7 +12,7 @@ mod tests; mod unit_test_components; use std::{ - collections::{BTreeMap, HashMap, HashSet}, + collections::{HashMap, HashSet}, sync::Arc, }; @@ -28,7 +28,6 @@ use vrl::{ diagnostic::Formatter, value, }; - pub use self::unit_test_components::{ UnitTestSinkCheck, UnitTestSinkConfig, UnitTestSinkResult, UnitTestSourceConfig, UnitTestStreamSinkConfig, UnitTestStreamSourceConfig, @@ -595,7 +594,7 @@ fn build_input_event(input: &TestInput) -> Result { let mut target = TargetValue { value: value!({}), - metadata: value::Value::Object(BTreeMap::new()), + metadata: value::Value::object(), secrets: value::Secrets::default(), }; diff --git a/src/sinks/datadog/traces/tests.rs b/src/sinks/datadog/traces/tests.rs index 8ae044628bfb4..8bc937a8cecd7 100644 --- a/src/sinks/datadog/traces/tests.rs +++ b/src/sinks/datadog/traces/tests.rs @@ -101,7 +101,7 @@ pub fn simple_trace_event(resource: String) -> TraceEvent { t.insert(event_path!("error_tps"), Value::Integer(5)); t.insert( event_path!("spans"), - Value::Array(vec![Value::from(simple_span(resource))]), + Value::Array(vec![Value::from(simple_span(resource))].into()), ); t } diff --git a/src/sinks/elasticsearch/config.rs b/src/sinks/elasticsearch/config.rs index ba639c6ec794b..339ea62d93cd8 100644 --- a/src/sinks/elasticsearch/config.rs +++ b/src/sinks/elasticsearch/config.rs @@ -1,5 +1,5 @@ use std::{ - collections::{BTreeMap, HashMap}, + collections::HashMap, convert::TryFrom, }; @@ -476,13 +476,13 @@ impl DataStreamConfig { let namespace = self.namespace(&*log); if log.as_map().is_none() { - *log.value_mut() = Value::Object(BTreeMap::new()); + *log.value_mut() = Value::object(); } let existing = log .as_map_mut() .expect("must be a map") .entry("data_stream".into()) - .or_insert_with(|| Value::Object(BTreeMap::new())) + .or_insert_with(Value::object) .as_object_mut_unwrap(); if let Some(dtype) = dtype { diff --git a/src/sinks/util/encoding.rs b/src/sinks/util/encoding.rs index 2958da0f9173e..a87bce9f2ca62 100644 --- a/src/sinks/util/encoding.rs +++ b/src/sinks/util/encoding.rs @@ -146,7 +146,6 @@ where #[cfg(test)] mod tests { - use std::collections::BTreeMap; use std::env; use std::path::PathBuf; @@ -158,7 +157,7 @@ mod tests { }; use vector_lib::event::LogEvent; use vector_lib::{internal_event::CountByteSize, json_size::JsonSize}; - use vrl::value::{KeyString, Value}; + use vrl::value::{KeyString, ObjectMap, Value}; use super::*; @@ -194,7 +193,7 @@ mod tests { ); let mut writer = Vec::new(); - let input = vec![Event::Log(LogEvent::from(BTreeMap::from([( + let input = vec![Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value"), )])))]; @@ -222,15 +221,15 @@ mod tests { ); let input = vec![ - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value1"), )]))), - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value2"), )]))), - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value3"), )]))), @@ -285,7 +284,7 @@ mod tests { ); let mut writer = Vec::new(); - let input = vec![Event::Log(LogEvent::from(BTreeMap::from([( + let input = vec![Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value"), )])))]; @@ -313,15 +312,15 @@ mod tests { let mut writer = Vec::new(); let input = vec![ - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value1"), )]))), - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value2"), )]))), - Event::Log(LogEvent::from(BTreeMap::from([( + Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value3"), )]))), @@ -349,7 +348,7 @@ mod tests { ); let mut writer = Vec::new(); - let input = Event::Log(LogEvent::from(BTreeMap::from([( + let input = Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("key"), Value::from("value"), )]))); @@ -370,7 +369,7 @@ mod tests { ); let mut writer = Vec::new(); - let input = Event::Log(LogEvent::from(BTreeMap::from([( + let input = Event::Log(LogEvent::from(ObjectMap::from([( KeyString::from("message"), Value::from("value"), )]))); @@ -415,7 +414,7 @@ mod tests { ); let mut writer = Vec::new(); - let input = vec![Event::Log(LogEvent::from(BTreeMap::from([ + let input = vec![Event::Log(LogEvent::from(ObjectMap::from([ (KeyString::from("id"), Value::from("123")), (KeyString::from("name"), Value::from("Alice")), (KeyString::from("age"), Value::from(30)), @@ -470,7 +469,7 @@ mod tests { let mut writer = Vec::new(); let input = vec![ - Event::Log(LogEvent::from(BTreeMap::from([ + Event::Log(LogEvent::from(ObjectMap::from([ (KeyString::from("id"), Value::from("123")), (KeyString::from("name"), Value::from("Alice")), (KeyString::from("age"), Value::from(30)), @@ -479,7 +478,7 @@ mod tests { Value::from(vec!["alice@example.com", "alice@work.com"]), ), ]))), - Event::Log(LogEvent::from(BTreeMap::from([ + Event::Log(LogEvent::from(ObjectMap::from([ (KeyString::from("id"), Value::from("123")), (KeyString::from("name"), Value::from("Alice")), (KeyString::from("age"), Value::from(30)), diff --git a/src/sources/fluent/message.rs b/src/sources/fluent/message.rs index 25c3c0589082e..9a2173bae751d 100644 --- a/src/sources/fluent/message.rs +++ b/src/sources/fluent/message.rs @@ -225,7 +225,6 @@ impl From for Value { #[cfg(test)] mod test { - use std::collections::BTreeMap; use approx::assert_relative_eq; use quickcheck::quickcheck; @@ -331,7 +330,7 @@ mod test { let actual_inner: Vec<(rmpv::Value, rmpv::Value)> = input.into_iter().map(|(k,v)| (key_fn(k), val_fn(v))).collect(); let actual = rmpv::Value::Map(actual_inner); - let expected = Value::Object(BTreeMap::new()); + let expected = Value::Object(ObjectMap::new()); assert_eq!(Value::from(FluentValue(actual)), expected); } diff --git a/src/sources/logstash.rs b/src/sources/logstash.rs index 79628f96759a3..2ba10f527a6f4 100644 --- a/src/sources/logstash.rs +++ b/src/sources/logstash.rs @@ -20,7 +20,7 @@ use vector_lib::{ schema::Definition, }; use vrl::value::kind::Collection; -use vrl::value::{KeyString, Kind}; +use vrl::value::{KeyString, Kind, ObjectMap}; use super::util::net::{SocketListenAddr, TcpSource, TcpSourceAck, TcpSourceAcker}; use crate::{ @@ -697,7 +697,7 @@ impl From for Event { .fields .into_iter() .map(|(key, value)| (key, Value::from(value))) - .collect::>(), + .collect::(), )) } } diff --git a/src/sources/socket/mod.rs b/src/sources/socket/mod.rs index df8eb08a2f915..a7aba6f38c2ed 100644 --- a/src/sources/socket/mod.rs +++ b/src/sources/socket/mod.rs @@ -646,7 +646,7 @@ mod test { let tls_meta: ObjectMap = btreemap!( "subject" => "CN=localhost,OU=Vector,O=Datadog,L=New York,ST=New York,C=US" - ); + ).into(); assert_eq!(event.as_log()["tls_peer"], tls_meta.clone().into(),); @@ -711,7 +711,7 @@ mod test { let tls_meta: ObjectMap = btreemap!( "subject" => "CN=localhost,OU=Vector,O=Datadog,L=New York,ST=New York,C=US" - ); + ).into(); assert_eq!( event_meta diff --git a/src/transforms/exclusive_route/tests.rs b/src/transforms/exclusive_route/tests.rs index 8a63632599499..9f81ecaedbf5f 100644 --- a/src/transforms/exclusive_route/tests.rs +++ b/src/transforms/exclusive_route/tests.rs @@ -12,6 +12,7 @@ use crate::{ config::{build_unit_tests, ConfigBuilder}, test_util::components::{init_test, COMPONENT_MULTIPLE_OUTPUTS_TESTS}, }; +use vrl::prelude::ObjectMap; fn get_outputs_buf() -> (Vec<&'static str>, TransformOutputsBuf) { let names = vec!["a", "b", UNMATCHED_ROUTE]; @@ -47,9 +48,9 @@ fn exclusive_routes() { let (output_names, mut outputs) = get_outputs_buf(); for service in ["a", "b", "c"] { - let event = Event::Log(LogEvent::from(btreemap! { + let event = Event::Log(LogEvent::from(ObjectMap::from(btreemap! { "service" => service - })); + }))); transform.transform(event.clone(), &mut outputs); for name in output_names.clone() { let mut events: Vec<_> = outputs.drain_named(name).collect(); diff --git a/src/transforms/metric_to_log.rs b/src/transforms/metric_to_log.rs index 5cbde65f812c5..0eb71e8ecf7dd 100644 --- a/src/transforms/metric_to_log.rs +++ b/src/transforms/metric_to_log.rs @@ -1,6 +1,6 @@ use chrono::Utc; use serde_json::Value; -use std::collections::{BTreeMap, BTreeSet}; +use std::collections::BTreeSet; use vector_lib::codecs::MetricTagValues; use vector_lib::config::LogNamespace; use vector_lib::configurable::configurable_component; @@ -8,7 +8,7 @@ use vector_lib::lookup::{event_path, owned_value_path, path, PathPrefix}; use vector_lib::TimeZone; use vrl::path::OwnedValuePath; use vrl::value::kind::Collection; -use vrl::value::Kind; +use vrl::value::{Kind, ObjectMap}; use crate::config::OutputId; use crate::{ @@ -324,7 +324,7 @@ impl MetricToLog { // This can be removed once metrics support namespacing. log.insert( (PathPrefix::Metadata, path!("vector")), - vrl::value::Value::Object(BTreeMap::new()), + vrl::value::Value::Object(ObjectMap::new()), ); } Some(log) diff --git a/src/transforms/reduce/merge_strategy.rs b/src/transforms/reduce/merge_strategy.rs index 1aeef9eab4d74..775bd01a9e02f 100644 --- a/src/transforms/reduce/merge_strategy.rs +++ b/src/transforms/reduce/merge_strategy.rs @@ -6,6 +6,7 @@ use chrono::{DateTime, Utc}; use ordered_float::NotNan; use vector_lib::configurable::configurable_component; use vrl::path::OwnedTargetPath; +use vrl::value::Array; /// Strategies for merging events. #[configurable_component] @@ -178,7 +179,7 @@ impl ReduceValueMerger for ConcatArrayMerger { path: &OwnedTargetPath, v: &mut LogEvent, ) -> Result<(), String> { - v.insert(path, Value::Array(self.v)); + v.insert(path, Value::Array(self.v.into())); Ok(()) } } @@ -205,18 +206,18 @@ impl ReduceValueMerger for ArrayMerger { path: &OwnedTargetPath, v: &mut LogEvent, ) -> Result<(), String> { - v.insert(path, Value::Array(self.v)); + v.insert(path, Value::Array(self.v.into())); Ok(()) } } #[derive(Debug, Clone)] struct LongestArrayMerger { - v: Vec, + v: Array, } impl LongestArrayMerger { - const fn new(v: Vec) -> Self { + const fn new(v: Array) -> Self { Self { v } } } @@ -248,11 +249,11 @@ impl ReduceValueMerger for LongestArrayMerger { #[derive(Debug, Clone)] struct ShortestArrayMerger { - v: Vec, + v: Array, } impl ShortestArrayMerger { - const fn new(v: Vec) -> Self { + const fn new(v: Array) -> Self { Self { v } } } @@ -619,7 +620,7 @@ pub(crate) fn get_value_merger( }, MergeStrategy::Concat => match v { Value::Bytes(b) => Ok(Box::new(ConcatMerger::new(b, Some(' ')))), - Value::Array(a) => Ok(Box::new(ConcatArrayMerger::new(a))), + Value::Array(a) => Ok(Box::new(ConcatArrayMerger::new(a.into_vec()))), _ => Err(format!( "expected string or array value, found: '{}'", v.to_string_lossy() diff --git a/src/transforms/reduce/transform.rs b/src/transforms/reduce/transform.rs index bb9cef48666a8..e9f7c1d6eb48f 100644 --- a/src/transforms/reduce/transform.rs +++ b/src/transforms/reduce/transform.rs @@ -526,7 +526,7 @@ merge_strategies.baz = "max" assert_eq!(output_1["foo"], "first foo second foo".into()); assert_eq!( output_1["bar"], - Value::Array(vec!["first bar".into(), 2.into(), "third bar".into()]), + Value::Array(vec!["first bar".into(), 2.into(), "third bar".into()].into()), ); assert_eq!(output_1["baz"], 3.into()); assert_eq!(output_1.metadata(), &metadata); diff --git a/src/transforms/remap.rs b/src/transforms/remap.rs index 27973b3eb40f3..adeca57ca1036 100644 --- a/src/transforms/remap.rs +++ b/src/transforms/remap.rs @@ -1,5 +1,5 @@ use std::collections::HashMap; -use std::sync::Mutex; +use std::sync::{Arc, Mutex}; use std::{ collections::BTreeMap, fs::File, @@ -391,7 +391,7 @@ where Runner: VrlRunner, { component_key: Option, - program: Program, + program: Arc, timezone: TimeZone, drop_on_error: bool, drop_on_abort: bool, @@ -464,7 +464,7 @@ where ) -> crate::Result { Ok(Remap { component_key: context.key.clone(), - program, + program: Arc::new(program), timezone: config .timezone .unwrap_or_else(|| context.globals.timezone()),