diff --git a/CHANGELOG.md b/CHANGELOG.md index 7aa205fcd..2b8927e4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to this project will be documented in this file. - hive: fixed 4.0.1 shaded hive-metastore-opa-authorizer jar by relocating dependencies ([#1356]). - testing-tools: fix: add kubectl and openssl ([#1367]). - ubi: Bumped ubi9 and ubi10 hashes ([#1386]). +- vector: Bumped from 0.49.0 to 0.52.0 ([#1387]). ### Removed @@ -36,6 +37,7 @@ All notable changes to this project will be documented in this file. [#1366]: https://github.com/stackabletech/docker-images/pull/1366 [#1367]: https://github.com/stackabletech/docker-images/pull/1367 [#1386]: https://github.com/stackabletech/docker-images/pull/1386 +[#1387]: https://github.com/stackabletech/docker-images/pull/1387 ## [25.11.0] - 2025-11-07 diff --git a/airflow/boil-config.toml b/airflow/boil-config.toml index 324abdffe..0d81f18a2 100644 --- a/airflow/boil-config.toml +++ b/airflow/boil-config.toml @@ -1,6 +1,6 @@ [versions."2.9.3".local-images] "shared/statsd-exporter" = "0.28.0" -vector = "0.49.0" +vector = "0.52.0" stackable-devel = "1.0.0" [versions."2.9.3".build-arguments] @@ -16,7 +16,7 @@ nodejs-version = "20" [versions."2.10.5".local-images] "shared/statsd-exporter" = "0.28.0" -vector = "0.49.0" +vector = "0.52.0" stackable-devel = "1.0.0" [versions."2.10.5".build-arguments] @@ -32,7 +32,7 @@ nodejs-version = "20" [versions."3.0.1".local-images] "shared/statsd-exporter" = "0.28.0" -vector = "0.49.0" +vector = "0.52.0" stackable-devel = "1.0.0" [versions."3.0.1".build-arguments] @@ -48,7 +48,7 @@ nodejs-version = "20" [versions."3.0.6".local-images] "shared/statsd-exporter" = "0.28.0" -vector = "0.49.0" +vector = "0.52.0" stackable-devel = "1.0.0" [versions."3.0.6".build-arguments] @@ -61,22 +61,22 @@ uv-version = "0.7.8" # Airflow extras are defined in separate lists to make them easier to check against the links below. The lists will be concatenated and duplicates removed in the dockerfile. # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#core-airflow-extras -airflow-extras-core="async,graphviz,kerberos,otel,sentry,standard,statsd" +airflow-extras-core = "async,graphviz,kerberos,otel,sentry,standard,statsd" # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#meta-airflow-package-extras -airflow-extras-meta="aiobotocore,cloudpickle,github-enterprise,google-auth,graphviz,ldap,leveldb,pandas,polars,rabbitmq,s3fs,saml,uv" +airflow-extras-meta = "aiobotocore,cloudpickle,github-enterprise,google-auth,graphviz,ldap,leveldb,pandas,polars,rabbitmq,s3fs,saml,uv" # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#apache-software-extras -airflow-extras-provider-apache="apache-beam,apache-cassandra,apache-drill,apache-druid,apache-flink,apache-hdfs,apache-hive,apache-iceberg,apache-impala,apache-kafka,apache-kylin,apache-livy,apache-pig,apache-pinot" +airflow-extras-provider-apache = "apache-beam,apache-cassandra,apache-drill,apache-druid,apache-flink,apache-hdfs,apache-hive,apache-iceberg,apache-impala,apache-kafka,apache-kylin,apache-livy,apache-pig,apache-pinot" # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#external-services-extras -airflow-extras-external-services="airbyte,alibaba,apprise,amazon,asana,atlassian-jira,microsoft-azure,cloudant,cohere,databricks,datadog,dbt-cloud,dingding,discord,facebook,github,google,hashicorp,openai,opsgenie,pagerduty,pgvector,pinecone,qdrant,salesforce,sendgrid,segment,slack,snowflake,tableau,tabular,telegram,vertica,weaviate,yandex,ydb,zendesk" +airflow-extras-external-services = "airbyte,alibaba,apprise,amazon,asana,atlassian-jira,microsoft-azure,cloudant,cohere,databricks,datadog,dbt-cloud,dingding,discord,facebook,github,google,hashicorp,openai,opsgenie,pagerduty,pgvector,pinecone,qdrant,salesforce,sendgrid,segment,slack,snowflake,tableau,tabular,telegram,vertica,weaviate,yandex,ydb,zendesk" # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#locally-installed-software-extras -airflow-extras-locally-installed-software="arangodb,celery,cncf-kubernetes,docker,edge3,elasticsearch,exasol,fab,git,github,influxdb,jenkins,mongo,microsoft-mssql,neo4j,odbc,openfaas,oracle,postgres,presto,redis,samba,singularity,teradata,trino" +airflow-extras-locally-installed-software = "arangodb,celery,cncf-kubernetes,docker,edge3,elasticsearch,exasol,fab,git,github,influxdb,jenkins,mongo,microsoft-mssql,neo4j,odbc,openfaas,oracle,postgres,presto,redis,samba,singularity,teradata,trino" # See https://airflow.apache.org/docs/apache-airflow/3.0.6/extra-packages-ref.html#other-extras -airflow-extras-other="common-compat,common-io,common-messaging,common-sql,ftp,grpc,http,imap,jdbc,microsoft-psrp,microsoft-winrm,openlineage,opensearch,papermill,sftp,smtp,sqlite,ssh" +airflow-extras-other = "common-compat,common-io,common-messaging,common-sql,ftp,grpc,http,imap,jdbc,microsoft-psrp,microsoft-winrm,openlineage,opensearch,papermill,sftp,smtp,sqlite,ssh" opa-auth-manager = "airflow-3" nodejs-version = "20" diff --git a/java-base/boil-config.toml b/java-base/boil-config.toml index 2fd545dd9..9cf094094 100644 --- a/java-base/boil-config.toml +++ b/java-base/boil-config.toml @@ -1,20 +1,20 @@ [versions."8".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."11".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."17".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."21".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."22".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."23".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."24".local-images] -vector = "0.49.0" +vector = "0.52.0" diff --git a/jdk-base/boil-config.toml b/jdk-base/boil-config.toml index 2fd545dd9..9cf094094 100644 --- a/jdk-base/boil-config.toml +++ b/jdk-base/boil-config.toml @@ -1,20 +1,20 @@ [versions."8".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."11".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."17".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."21".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."22".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."23".local-images] -vector = "0.49.0" +vector = "0.52.0" [versions."24".local-images] -vector = "0.49.0" +vector = "0.52.0" diff --git a/opa/boil-config.toml b/opa/boil-config.toml index 8c5f39327..f8b771992 100644 --- a/opa/boil-config.toml +++ b/opa/boil-config.toml @@ -1,7 +1,7 @@ # Version 1.8.0 [versions."1.8.0".local-images] stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."1.8.0".build-arguments] golang-version = "1.24.6" @@ -9,7 +9,7 @@ golang-version = "1.24.6" # Version 1.4.2 [versions."1.4.2".local-images] stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."1.4.2".build-arguments] golang-version = "1.23.9" diff --git a/opensearch-dashboards/boil-config.toml b/opensearch-dashboards/boil-config.toml index 862332fbd..119dbd5d1 100644 --- a/opensearch-dashboards/boil-config.toml +++ b/opensearch-dashboards/boil-config.toml @@ -1,22 +1,22 @@ [versions."3.1.0".local-images] stackable-devel = "1.0.0" -"opensearch-dashboards/alerting-dashboards-plugin"= "3.1.0.0" -"opensearch-dashboards/anomaly-detection-dashboards-plugin"= "3.1.0.0" -"opensearch-dashboards/dashboards-assistant"= "3.1.0.0" -"opensearch-dashboards/dashboards-flow-framework"= "3.1.0.0" -"opensearch-dashboards/dashboards-maps"= "3.1.0.0" -"opensearch-dashboards/dashboards-notifications"= "3.1.0.0" -"opensearch-dashboards/dashboards-observability"= "3.1.0.0" -"opensearch-dashboards/dashboards-query-workbench"= "3.1.0.0" -"opensearch-dashboards/dashboards-reporting"= "3.1.0.0" -"opensearch-dashboards/dashboards-search-relevance"= "3.1.0.0" -"opensearch-dashboards/index-management-dashboards-plugin"= "3.1.0.0" -"opensearch-dashboards/ml-commons-dashboards"= "3.1.0.0" -"opensearch-dashboards/query-insights-dashboards"= "3.1.0.0" -"opensearch-dashboards/security-analytics-dashboards-plugin"= "3.1.0.0" -"opensearch-dashboards/security-dashboards-plugin"= "3.1.0.0" -"opensearch-dashboards/opensearch-build"= "3.1.0" -"vector" = "0.49.0" +vector = "0.52.0" +"opensearch-dashboards/alerting-dashboards-plugin" = "3.1.0.0" +"opensearch-dashboards/anomaly-detection-dashboards-plugin" = "3.1.0.0" +"opensearch-dashboards/dashboards-assistant" = "3.1.0.0" +"opensearch-dashboards/dashboards-flow-framework" = "3.1.0.0" +"opensearch-dashboards/dashboards-maps" = "3.1.0.0" +"opensearch-dashboards/dashboards-notifications" = "3.1.0.0" +"opensearch-dashboards/dashboards-observability" = "3.1.0.0" +"opensearch-dashboards/dashboards-query-workbench" = "3.1.0.0" +"opensearch-dashboards/dashboards-reporting" = "3.1.0.0" +"opensearch-dashboards/dashboards-search-relevance" = "3.1.0.0" +"opensearch-dashboards/index-management-dashboards-plugin" = "3.1.0.0" +"opensearch-dashboards/ml-commons-dashboards" = "3.1.0.0" +"opensearch-dashboards/query-insights-dashboards" = "3.1.0.0" +"opensearch-dashboards/security-analytics-dashboards-plugin" = "3.1.0.0" +"opensearch-dashboards/security-dashboards-plugin" = "3.1.0.0" +"opensearch-dashboards/opensearch-build" = "3.1.0" [versions."3.1.0".build-arguments] nodejs-version = "20.18.3" diff --git a/spark-k8s/boil-config.toml b/spark-k8s/boil-config.toml index 6dac4f272..5d082b569 100644 --- a/spark-k8s/boil-config.toml +++ b/spark-k8s/boil-config.toml @@ -3,7 +3,6 @@ java-base = "17" java-devel = "17" hbase = "2.6.3" -vector = "0.49.0" [versions."3.5.6".build-arguments] python-version = "3.11" @@ -22,7 +21,6 @@ hbase-connector-version = "1.0.1" java-base = "17" java-devel = "17" hbase = "2.6.3" -vector = "0.49.0" [versions."3.5.7".build-arguments] python-version = "3.11" @@ -41,7 +39,6 @@ hbase-connector-version = "1.0.1" java-base = "17" java-devel = "17" hbase = "2.6.3" -vector = "0.49.0" [versions."4.0.1".build-arguments] python-version = "3.11" diff --git a/stackable-devel/boil-config.toml b/stackable-devel/boil-config.toml index b58145429..59192ee9c 100644 --- a/stackable-devel/boil-config.toml +++ b/stackable-devel/boil-config.toml @@ -3,5 +3,5 @@ # Used specifically by vector [versions."vector-build".build-arguments] # Use what upstream vector uses: -# https://github.com/vectordotdev/vector/blob/v0.49.0/rust-toolchain.toml -rust-default-toolchain-version = "1.88.0" +# https://github.com/vectordotdev/vector/blob/v0.52.0/rust-toolchain.toml +rust-default-toolchain-version = "1.91.1" diff --git a/superset/boil-config.toml b/superset/boil-config.toml index 4433d2ef2..f6d694b4d 100644 --- a/superset/boil-config.toml +++ b/superset/boil-config.toml @@ -1,7 +1,7 @@ [versions."4.0.2".local-images] "shared/statsd-exporter" = "0.28.0" stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."4.0.2".build-arguments] cyclonedx-bom-version = "6.0.0" @@ -15,7 +15,7 @@ nodejs-version = "20" [versions."4.1.2".local-images] "shared/statsd-exporter" = "0.28.0" stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."4.1.2".build-arguments] cyclonedx-bom-version = "6.0.0" @@ -29,7 +29,7 @@ nodejs-version = "20" [versions."4.1.4".local-images] "shared/statsd-exporter" = "0.28.0" stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."4.1.4".build-arguments] cyclonedx-bom-version = "6.0.0" @@ -43,7 +43,7 @@ nodejs-version = "20" [versions."6.0.0-rc2".local-images] "shared/statsd-exporter" = "0.28.0" stackable-devel = "1.0.0" -vector = "0.49.0" +vector = "0.52.0" [versions."6.0.0-rc2".build-arguments] cyclonedx-bom-version = "6.0.0" diff --git a/vector/Dockerfile b/vector/Dockerfile index 1246f49f1..1f9cdd781 100644 --- a/vector/Dockerfile +++ b/vector/Dockerfile @@ -22,7 +22,9 @@ microdnf install \ `# tar needed to create the source code snapshot before building the Rust code` \ tar \ `# needed for rdkafka-sys` \ - cyrus-sasl-devel + cyrus-sasl-devel \ + `# needed for vector build (zstd-sys/bindgen)` \ + clang microdnf clean all rm -rf /var/cache/yum EOF diff --git a/vector/boil-config.toml b/vector/boil-config.toml index 0e016d6d5..3a6ef6653 100644 --- a/vector/boil-config.toml +++ b/vector/boil-config.toml @@ -1,8 +1,10 @@ -[versions."0.49.0".local-images] +[versions."0.52.0".local-images] +# We need to point to a special version of stackable-devel which will have the +# correct toolchain to build vector. stackable-devel = "vector-build" stackable-base = "1.0.0" -[versions."0.49.0".build-arguments] +[versions."0.52.0".build-arguments] # See .scripts/upload_new_protoc_version.sh # Unsure which version is used by vector. They seem to install `buf` in workflows. protoc-version = "31.1" diff --git a/vector/stackable/patches/0.49.0/0001-Fix-problem-where-multi-chars-delimiters-fail-to-be-.patch b/vector/stackable/patches/0.49.0/0001-Fix-problem-where-multi-chars-delimiters-fail-to-be-.patch deleted file mode 100644 index 7d0a19af0..000000000 --- a/vector/stackable/patches/0.49.0/0001-Fix-problem-where-multi-chars-delimiters-fail-to-be-.patch +++ /dev/null @@ -1,267 +0,0 @@ -From 87e178e98713539ac5e543c34520cc7aca3d8c03 Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Mon, 20 Oct 2025 08:36:40 +0200 -Subject: Fix problem where multi-chars delimiters fail to be parsed if they - happen right at a buffer boundary. - -This can be removed when we use the version of Vector that includes this -fix. -See: https://github.com/vectordotdev/vector/pull/24028 - -NOTE: async/await removed from the patch, because async is added after -0.49.0. ---- - lib/file-source/src/buffer.rs | 209 ++++++++++++++++++++++++++++++++-- - 1 file changed, 202 insertions(+), 7 deletions(-) - -diff --git a/lib/file-source/src/buffer.rs b/lib/file-source/src/buffer.rs -index 55dd48133..1ef892aaf 100644 ---- a/lib/file-source/src/buffer.rs -+++ b/lib/file-source/src/buffer.rs -@@ -48,6 +48,12 @@ pub fn read_until_with_max_size<'a, R: BufRead + ?Sized>( - let delim_finder = Finder::new(delim); - let delim_len = delim.len(); - let mut discarded_for_size_and_truncated = Vec::new(); -+ // The following line from the upstream change is only needed once the funciton becomes async -+ // let mut reader = Box::new(reader); -+ -+ // Track partial delimiter matches across buffer boundaries -+ let mut partial_delim: BytesMut = BytesMut::with_capacity(delim_len); -+ - loop { - let available: &[u8] = match reader.fill_buf() { - Ok(n) => n, -@@ -55,6 +61,35 @@ pub fn read_until_with_max_size<'a, R: BufRead + ?Sized>( - Err(e) => return Err(e), - }; - -+ // First, check if we have a partial delimiter from the previous iteration -+ if !partial_delim.is_empty() { -+ let expected_suffix = &delim[partial_delim.len()..]; -+ let expected_suffix_len = expected_suffix.len(); -+ -+ if available.len() >= expected_suffix_len -+ && &available[..expected_suffix_len] == expected_suffix -+ { -+ // Complete delimiter found! Consume the suffix -+ reader.consume(expected_suffix_len); -+ *position += expected_suffix_len as u64; -+ total_read += expected_suffix_len; -+ partial_delim.clear(); -+ -+ // Found a complete delimiter, return the current buffer -+ return Ok(ReadResult { -+ successfully_read: Some(total_read), -+ discarded_for_size_and_truncated, -+ }); -+ } else { -+ // Not a complete delimiter after all. Add partial_delim to output buffer -+ if !discarding { -+ buf.extend_from_slice(&partial_delim); -+ } -+ partial_delim.clear(); -+ // Continue processing current available buffer -+ } -+ } -+ - let (done, used) = { - match delim_finder.find(available) { - Some(i) => { -@@ -64,13 +99,47 @@ pub fn read_until_with_max_size<'a, R: BufRead + ?Sized>( - (true, i + delim_len) - } - None => { -- if !discarding { -- buf.extend_from_slice(available); -+ // No delimiter found in current buffer. Check if buffer ends with a -+ // partial delimiter match. For multi-byte delimiters like \r\n, we need -+ // to handle the case where the delimiter is split across buffer boundaries. -+ let mut partial_match_len = 0; -+ if !available.is_empty() && delim_len > 1 { -+ // Check if the end matches a prefix of the delimiter. -+ // We iterate from longest to shortest prefix and break on first match. -+ // Performance: For typical 2-byte delimiters (CRLF), this is 1 iteration. -+ // For longer delimiters, this runs O(delim_len) times but only occurs -+ // at buffer boundaries (~every 8KB), making the impact negligible. -+ for prefix_len in (1..delim_len).rev() { -+ if available.len() >= prefix_len -+ && available.ends_with(&delim[..prefix_len]) -+ { -+ partial_match_len = prefix_len; -+ break; -+ } -+ } - } -+ -+ let bytes_to_copy = available.len() - partial_match_len; -+ -+ if !discarding && bytes_to_copy > 0 { -+ buf.extend_from_slice(&available[..bytes_to_copy]); -+ } -+ -+ // If we found a potential partial delimiter, save it for the next iteration -+ if partial_match_len > 0 { -+ partial_delim.clear(); -+ partial_delim.extend_from_slice(&available[bytes_to_copy..]); -+ } -+ - (false, available.len()) - } - } - }; -+ -+ // Check if we're at EOF before we start processing -+ // (for borrow checker, has to come before `consume`) -+ let at_eof = available.is_empty(); -+ - reader.consume(used); - *position += used as u64; // do this at exactly same time - total_read += used; -@@ -94,11 +163,12 @@ pub fn read_until_with_max_size<'a, R: BufRead + ?Sized>( - discarding = false; - buf.clear(); - } -- } else if used == 0 { -- // We've hit EOF but not yet seen a newline. This can happen when unlucky timing causes -- // us to observe an incomplete write. We return None here and let the loop continue -- // next time the method is called. This is safe because the buffer is specific to this -- // FileWatcher. -+ } else if used == 0 && at_eof { -+ // We've hit EOF but haven't seen a delimiter. This can happen when: -+ // 1. The file ends without a trailing delimiter -+ // 2. We're observing an incomplete write -+ // -+ // Return None to signal the caller to retry later. - return Ok(ReadResult { - successfully_read: None, - discarded_for_size_and_truncated, -@@ -253,4 +323,129 @@ mod test { - .max_tests(2_000) - .quickcheck(qc_inner as fn(Vec>, u8, NonZeroU8) -> TestResult); - } -+ -+ /// Generic test helper that tests delimiter splits across buffer boundaries -+ /// for any delimiter length. This function: -+ /// 1. Creates test data with delimiters positioned to split at buffer boundaries -+ /// 2. Tests multiple iterations to ensure state tracking works correctly -+ /// 3. Verifies all lines are correctly separated without merging -+ fn test_delimiter_boundary_split_helper(delimiter: &[u8], num_lines: usize) { -+ let delimiter_len = delimiter.len(); -+ -+ // Use a buffer capacity that will force splits -+ // We'll position delimiters to split at this boundary -+ let buffer_capacity = 10; -+ -+ println!( -+ "\n=== Testing delimiter: {:?} (length: {}) ===", -+ String::from_utf8_lossy(delimiter), -+ delimiter_len -+ ); -+ println!("Buffer capacity: {} bytes", buffer_capacity); -+ -+ // Build test data where each delimiter is positioned to split across buffer boundary -+ // Strategy: For each line, calculate position so delimiter starts at boundary - (delimiter_len - 1) -+ let mut data = Vec::new(); -+ let mut expected_lines = Vec::new(); -+ -+ for i in 0..num_lines { -+ // Create line content that positions the delimiter to split at buffer boundary -+ // We want the delimiter to straddle a buffer_capacity boundary -+ -+ // Calculate how many bytes until the next buffer boundary -+ let current_pos = data.len(); -+ let bytes_until_boundary = buffer_capacity - (current_pos % buffer_capacity); -+ -+ // Create line content that will position delimiter to split -+ // We want (delimiter_len - 1) bytes before boundary, then 1 byte after -+ let line_content = if bytes_until_boundary > delimiter_len { -+ let content_len = bytes_until_boundary - (delimiter_len - 1); -+ format!("line{:0width$}", i, width = content_len.saturating_sub(4)).into_bytes() -+ } else { -+ // Not enough room in this buffer, pad to next boundary -+ let padding = bytes_until_boundary; -+ let extra_content = buffer_capacity - (delimiter_len - 1); -+ let mut content = vec![b'X'; padding]; -+ content.extend_from_slice( -+ format!("L{:0width$}", i, width = extra_content.saturating_sub(1)).as_bytes(), -+ ); -+ content -+ }; -+ -+ println!( -+ "Line {}: '{}' (len: {}, data pos: {})", -+ i, -+ String::from_utf8_lossy(&line_content), -+ line_content.len(), -+ current_pos -+ ); -+ -+ expected_lines.push(line_content.clone()); -+ data.extend_from_slice(&line_content); -+ data.extend_from_slice(delimiter); -+ } -+ -+ println!("Total test data size: {} bytes\n", data.len()); -+ -+ // Now test reading this data -+ let cursor = Cursor::new(data); -+ let mut reader = BufReader::with_capacity(buffer_capacity, cursor); -+ let mut position = 0; -+ let max_size = 1024; -+ -+ // Read each line and verify it matches expected -+ for (i, expected_line) in expected_lines.iter().enumerate() { -+ let mut buffer = BytesMut::new(); -+ let result = read_until_with_max_size( -+ Box::pin(&mut reader), -+ &mut position, -+ delimiter, -+ &mut buffer, -+ max_size, -+ ) -+ .unwrap(); -+ -+ assert_eq!( -+ buffer.as_ref(), -+ expected_line.as_slice(), -+ "Line {} should match expected content. Got: {:?}, Expected: {:?}", -+ i, -+ String::from_utf8_lossy(&buffer), -+ String::from_utf8_lossy(expected_line) -+ ); -+ -+ assert!( -+ result.successfully_read.is_some(), -+ "Should find delimiter for line {}", -+ i -+ ); -+ } -+ } -+ -+ #[test] -+ fn test_single_byte_delimiter_boundary() { -+ // Test single-byte delimiter (should work without any special handling) -+ test_delimiter_boundary_split_helper(b"\n", 5); -+ } -+ -+ #[test] -+ fn test_two_byte_delimiter_boundary() { -+ // Test two-byte delimiter (CRLF case) -+ test_delimiter_boundary_split_helper(b"\r\n", 5); -+ } -+ -+ #[test] -+ fn test_three_byte_delimiter_boundary() { -+ test_delimiter_boundary_split_helper(b"|||", 5); -+ } -+ -+ #[test] -+ fn test_four_byte_delimiter_boundary() { -+ test_delimiter_boundary_split_helper(b"<|>|", 5); -+ } -+ -+ #[test] -+ fn test_five_byte_delimiter_boundary() { -+ test_delimiter_boundary_split_helper(b"<<>>>", 5); -+ } - } diff --git a/vector/stackable/patches/0.49.0/patchable.toml b/vector/stackable/patches/0.52.0/patchable.toml similarity index 52% rename from vector/stackable/patches/0.49.0/patchable.toml rename to vector/stackable/patches/0.52.0/patchable.toml index 69f9321d1..2df24ac67 100644 --- a/vector/stackable/patches/0.49.0/patchable.toml +++ b/vector/stackable/patches/0.52.0/patchable.toml @@ -1,2 +1,2 @@ mirror = "https://github.com/stackabletech/vector.git" -base = "dc7e79278323d1323bcafe3741d7e258b0c37fb4" +base = "ca5bf2690ffcfc2c95d320cf7156b1df1b28a080"