Skip to content

Commit bf94ab0

Browse files
authored
Merge branch 'master' into add-ch-arrow-codec
2 parents e862e94 + 4d22ce1 commit bf94ab0

File tree

34 files changed

+392
-65
lines changed

34 files changed

+392
-65
lines changed

.github/workflows/integration.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ jobs:
4646

4747
build-test-runner:
4848
needs: changes
49-
if: |
50-
${{
51-
github.event_name == 'workflow_dispatch' ||
52-
(github.event_name == 'merge_group' &&
53-
(needs.changes.outputs.dependencies == 'true' ||
54-
needs.changes.outputs.integration-yml == 'true' ||
55-
needs.changes.outputs.int-tests-any == 'true' ||
56-
needs.changes.outputs.e2e-tests-any == 'true'))
57-
}}
49+
if: ${{
50+
github.event_name == 'workflow_dispatch' ||
51+
(github.event_name == 'merge_group' &&
52+
(needs.changes.outputs.dependencies == 'true' ||
53+
needs.changes.outputs.integration-yml == 'true' ||
54+
needs.changes.outputs.int-tests-any == 'true' ||
55+
needs.changes.outputs.e2e-tests-any == 'true'))
56+
}}
57+
5858
uses: ./.github/workflows/build-test-runner.yml
5959
with:
6060
commit_sha: ${{ github.sha }}
@@ -65,7 +65,7 @@ jobs:
6565
- changes
6666
- build-test-runner
6767

68-
if: ${{ !failure() && !cancelled() && (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') }}
68+
if: ${{ !failure() && !cancelled() && needs.build-test-runner.result == 'success' && (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') }}
6969
strategy:
7070
matrix:
7171
# TODO: Add "splunk" back once https://github.com/vectordotdev/vector/issues/23474 is fixed.
@@ -133,7 +133,7 @@ jobs:
133133
needs:
134134
- changes
135135
- build-test-runner
136-
if: ${{ !failure() && !cancelled() && (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') }}
136+
if: ${{ !failure() && !cancelled() && needs.build-test-runner.result == 'success' && (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') }}
137137
strategy:
138138
matrix:
139139
service: [ "datadog-logs", "datadog-metrics", "opentelemetry-logs", "opentelemetry-metrics" ]

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,7 @@ transforms-logs = [
732732
"transforms-exclusive-route",
733733
"transforms-sample",
734734
"transforms-throttle",
735+
"transforms-trace_to_log"
735736
]
736737
transforms-metrics = [
737738
"transforms-aggregate",
@@ -761,6 +762,7 @@ transforms-exclusive-route = []
761762
transforms-sample = ["transforms-impl-sample"]
762763
transforms-tag_cardinality_limit = ["dep:bloomy", "dep:hashbrown"]
763764
transforms-throttle = ["dep:governor"]
765+
transforms-trace_to_log = []
764766

765767
# Implementations of transforms
766768
transforms-impl-sample = []
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fixed an issue in vector tests where memory enrichment tables would report missing components errors.
2+
3+
authors: esensar Quad9DNS
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Introduced `trace_to_log` transform that allows converting traces to logs.
2+
3+
authors: huevosabio
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
The `internal_logs` source now captures all internal Vector logs without rate limiting. Previously, repeated log messages were silently
2+
dropped.
3+
4+
authors: pront

lib/codecs/src/encoding/serializer.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,20 @@ use super::format::{
1717
};
1818
#[cfg(feature = "opentelemetry")]
1919
use super::format::{OtlpSerializer, OtlpSerializerConfig};
20-
use super::framing::{
21-
CharacterDelimitedEncoderConfig, FramingConfig, LengthDelimitedEncoderConfig,
22-
VarintLengthDelimitedEncoderConfig,
20+
use super::{
21+
chunking::Chunker,
22+
format::{
23+
AvroSerializer, AvroSerializerConfig, AvroSerializerOptions, CefSerializer,
24+
CefSerializerConfig, CsvSerializer, CsvSerializerConfig, GelfSerializer,
25+
GelfSerializerConfig, JsonSerializer, JsonSerializerConfig, LogfmtSerializer,
26+
LogfmtSerializerConfig, NativeJsonSerializer, NativeJsonSerializerConfig, NativeSerializer,
27+
NativeSerializerConfig, ProtobufSerializer, ProtobufSerializerConfig, RawMessageSerializer,
28+
RawMessageSerializerConfig, TextSerializer, TextSerializerConfig,
29+
},
30+
framing::{
31+
CharacterDelimitedEncoderConfig, FramingConfig, LengthDelimitedEncoderConfig,
32+
VarintLengthDelimitedEncoderConfig,
33+
},
2334
};
2435

2536
/// Serializer configuration.

lib/vector-core/src/event/trace.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ impl From<LogEvent> for TraceEvent {
131131
}
132132
}
133133

134+
impl From<TraceEvent> for LogEvent {
135+
fn from(trace: TraceEvent) -> Self {
136+
trace.0
137+
}
138+
}
139+
134140
impl From<ObjectMap> for TraceEvent {
135141
fn from(map: ObjectMap) -> Self {
136142
Self(map.into())

src/config/unit_test/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,15 @@ async fn build_unit_test(
432432
.collect::<Vec<_>>();
433433
valid_components.extend(unexpanded_transforms);
434434

435+
// Enrichment tables consume inputs but are referenced dynamically in VRL transforms
436+
// (via get_enrichment_table_record). Since we can't statically analyze VRL usage,
437+
// we conservatively include all enrichment table inputs as valid components.
438+
config_builder
439+
.enrichment_tables
440+
.iter()
441+
.filter_map(|(key, c)| c.as_sink(key).map(|(_, sink)| sink.inputs))
442+
.for_each(|i| valid_components.extend(i.into_iter()));
443+
435444
// Remove all transforms that are not relevant to the current test
436445
config_builder.transforms = config_builder
437446
.transforms

src/sinks/splunk_hec/common/acknowledgements.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use hyper::Body;
22
use serde::{Deserialize, Serialize};
3-
use std::io::Write;
43
use std::{
54
collections::HashMap,
5+
io::Write,
66
num::{NonZeroU8, NonZeroU64},
77
sync::Arc,
88
time::Duration,
@@ -11,14 +11,14 @@ use tokio::sync::{mpsc::Receiver, oneshot::Sender};
1111
use vector_lib::{configurable::configurable_component, event::EventStatus};
1212

1313
use super::service::{HttpRequestBuilder, MetadataFields};
14-
use crate::sinks::util::Compressor;
1514
use crate::{
1615
config::AcknowledgementsConfig,
1716
http::HttpClient,
1817
internal_events::{
1918
SplunkIndexerAcknowledgementAPIError, SplunkIndexerAcknowledgementAckAdded,
2019
SplunkIndexerAcknowledgementAcksRemoved,
2120
},
21+
sinks::util::Compressor,
2222
};
2323

2424
/// Splunk HEC acknowledgement configuration.

src/sources/internal_logs.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ mod tests {
213213
use vector_lib::{event::Value, lookup::OwnedTargetPath};
214214
use vrl::value::kind::Collection;
215215

216+
use serial_test::serial;
217+
216218
use super::*;
217219
use crate::{
218220
event::Event,
@@ -234,6 +236,7 @@ mod tests {
234236
// cases because `consume_early_buffer` (called within the
235237
// `start_source` helper) panics when called more than once.
236238
#[tokio::test]
239+
#[serial]
237240
async fn receives_logs() {
238241
trace::init(false, false, "debug", 10);
239242
trace::reset_early_buffer();
@@ -341,6 +344,43 @@ mod tests {
341344
rx
342345
}
343346

347+
// NOTE: This test requires #[serial] because it directly interacts with global tracing state.
348+
// This is a pre-existing limitation around tracing initialization in tests.
349+
#[tokio::test]
350+
#[serial]
351+
async fn repeated_logs_are_not_rate_limited() {
352+
trace::init(false, false, "info", 10);
353+
trace::reset_early_buffer();
354+
355+
let rx = start_source().await;
356+
357+
// Generate 20 identical log messages with the same component_id
358+
for _ in 0..20 {
359+
info!(component_id = "test", "Repeated test message.");
360+
}
361+
362+
sleep(Duration::from_millis(50)).await;
363+
let events = collect_ready(rx).await;
364+
365+
// Filter to only our test messages
366+
let test_events: Vec<_> = events
367+
.iter()
368+
.filter(|e| {
369+
e.as_log()
370+
.get("message")
371+
.map(|m| m.to_string_lossy() == "Repeated test message.")
372+
.unwrap_or(false)
373+
})
374+
.collect();
375+
376+
// We should receive all 20 messages, no rate limiting.
377+
assert_eq!(
378+
test_events.len(),
379+
20,
380+
"internal_logs source should capture all repeated messages without rate limiting"
381+
);
382+
}
383+
344384
#[test]
345385
fn output_schema_definition_vector_namespace() {
346386
let config = InternalLogsConfig::default();

0 commit comments

Comments
 (0)