From 4f0d3dbe3f3003badc42a0a28c78e5e42c5594ee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 8 Jul 2025 22:04:50 +0000 Subject: [PATCH 1/3] Initial plan From 2c09d26437092c93512b1eb0126de9074f923ab5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 8 Jul 2025 22:16:40 +0000 Subject: [PATCH 2/3] Fix trace flags type from i32 to u32 in Geneva exporter Co-authored-by: lalitb <1196320+lalitb@users.noreply.github.com> --- .../src/payload_encoder/otlp_encoder.rs | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs b/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs index f453931b..100f084f 100644 --- a/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs +++ b/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs @@ -119,7 +119,7 @@ impl OtlpEncoder { fields.push((FIELD_SPAN_ID.into(), BondDataType::BT_STRING)); } if log.flags != 0 { - fields.push((FIELD_TRACE_FLAGS.into(), BondDataType::BT_INT32)); + fields.push((FIELD_TRACE_FLAGS.into(), BondDataType::BT_UINT32)); } // Part B - Core log fields @@ -252,7 +252,7 @@ impl OtlpEncoder { BondWriter::write_string(&mut buffer, hex_str); } FIELD_TRACE_FLAGS => { - BondWriter::write_numeric(&mut buffer, log.flags as i32); + BondWriter::write_numeric(&mut buffer, log.flags as u32); } FIELD_NAME => { BondWriter::write_string(&mut buffer, &log.event_name); @@ -397,4 +397,26 @@ mod tests { let _result3 = encoder.encode_log_batch([log2].iter(), metadata); assert_eq!(encoder.schema_cache.read().unwrap().len(), 2); } + + #[test] + fn test_trace_flags_uint32_type() { + let encoder = OtlpEncoder::new(); + + let log_with_flags = LogRecord { + observed_time_unix_nano: 1_700_000_000_000_000_000, + severity_number: 9, + flags: 1, // Set a non-zero flags value to trigger inclusion + trace_id: vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + span_id: vec![1, 2, 3, 4, 5, 6, 7, 8], + ..Default::default() + }; + + // Determine fields should include trace flags field with correct type + let fields = encoder.determine_fields(&log_with_flags); + + // Find the trace flags field and verify it's BT_UINT32 + let trace_flags_field = fields.iter().find(|f| f.name == FIELD_TRACE_FLAGS); + assert!(trace_flags_field.is_some(), "Trace flags field should be present when flags != 0"); + assert_eq!(trace_flags_field.unwrap().type_id, BondDataType::BT_UINT32, "Trace flags should be BT_UINT32, not BT_INT32"); + } } From 14172ad275e18736e9347d6793c1468535ba7a12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:33:09 +0000 Subject: [PATCH 3/3] Remove unnecessary unit test and fix linting issues - Removed test_trace_flags_uint32_type() as requested by maintainer - Fixed unnecessary cast warning by removing "as u32" cast since log.flags is already u32 - All linting checks now pass Co-authored-by: lalitb <1196320+lalitb@users.noreply.github.com> --- .../src/payload_encoder/otlp_encoder.rs | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs b/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs index 100f084f..0a77cb32 100644 --- a/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs +++ b/opentelemetry-exporter-geneva/geneva-uploader/src/payload_encoder/otlp_encoder.rs @@ -252,7 +252,7 @@ impl OtlpEncoder { BondWriter::write_string(&mut buffer, hex_str); } FIELD_TRACE_FLAGS => { - BondWriter::write_numeric(&mut buffer, log.flags as u32); + BondWriter::write_numeric(&mut buffer, log.flags); } FIELD_NAME => { BondWriter::write_string(&mut buffer, &log.event_name); @@ -397,26 +397,4 @@ mod tests { let _result3 = encoder.encode_log_batch([log2].iter(), metadata); assert_eq!(encoder.schema_cache.read().unwrap().len(), 2); } - - #[test] - fn test_trace_flags_uint32_type() { - let encoder = OtlpEncoder::new(); - - let log_with_flags = LogRecord { - observed_time_unix_nano: 1_700_000_000_000_000_000, - severity_number: 9, - flags: 1, // Set a non-zero flags value to trigger inclusion - trace_id: vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], - span_id: vec![1, 2, 3, 4, 5, 6, 7, 8], - ..Default::default() - }; - - // Determine fields should include trace flags field with correct type - let fields = encoder.determine_fields(&log_with_flags); - - // Find the trace flags field and verify it's BT_UINT32 - let trace_flags_field = fields.iter().find(|f| f.name == FIELD_TRACE_FLAGS); - assert!(trace_flags_field.is_some(), "Trace flags field should be present when flags != 0"); - assert_eq!(trace_flags_field.unwrap().type_id, BondDataType::BT_UINT32, "Trace flags should be BT_UINT32, not BT_INT32"); - } }