@@ -46,29 +46,24 @@ pub(super) struct PayloadWriter {
46
46
buf : Vec < u8 > ,
47
47
trailer_buf : Vec < u8 > ,
48
48
offsets : Vec < usize > ,
49
- with_length_prefix : bool ,
50
49
}
51
50
52
51
impl PayloadWriter {
53
52
/// Creates a new `PayloadWriter` with the given maximum payload length.
54
- pub fn new ( max_payload_len : usize , with_length_prefix : bool ) -> Self {
53
+ pub fn new ( max_payload_len : usize ) -> Self {
55
54
// NOTE: This should also be handled in the builder, but we want to just double check here that we're getting a
56
55
// properly sanitized value.
57
56
assert ! (
58
57
u32 :: try_from( max_payload_len) . is_ok( ) ,
59
58
"maximum payload length must be less than 2^32 bytes"
60
59
) ;
61
60
62
- let mut writer = Self {
61
+ Self {
63
62
max_payload_len,
64
63
buf : Vec :: new ( ) ,
65
64
trailer_buf : Vec :: new ( ) ,
66
65
offsets : Vec :: new ( ) ,
67
- with_length_prefix,
68
- } ;
69
-
70
- writer. prepare_for_write ( ) ;
71
- writer
66
+ }
72
67
}
73
68
74
69
fn last_offset ( & self ) -> usize {
@@ -80,21 +75,10 @@ impl PayloadWriter {
80
75
//
81
76
// If there aren't any committed metrics, then the last offset is simply zero.
82
77
let last_offset = self . last_offset ( ) ;
83
- let maybe_length_prefix_len = if self . with_length_prefix { 4 } else { 0 } ;
84
- self . buf . len ( ) - last_offset - maybe_length_prefix_len
85
- }
86
-
87
- fn prepare_for_write ( & mut self ) {
88
- if self . with_length_prefix {
89
- // If we're adding length prefixes, we need to write the length of the payload first.
90
- //
91
- // We write a dummy length of zero for now, and then we'll go back and fill it in later.
92
- self . buf . extend_from_slice ( & [ 0 , 0 , 0 , 0 ] ) ;
93
- }
78
+ self . buf . len ( ) - last_offset
94
79
}
95
80
96
81
fn commit ( & mut self ) -> bool {
97
- let current_last_offset = self . last_offset ( ) ;
98
82
let current_len = self . current_len ( ) ;
99
83
if current_len > self . max_payload_len {
100
84
// If the current metric is too long, we need to truncate everything we just wrote to get us back to the end
@@ -107,19 +91,6 @@ impl PayloadWriter {
107
91
// Track the new offset.
108
92
self . offsets . push ( self . buf . len ( ) ) ;
109
93
110
- // If we're dealing with length-delimited payloads, go back to the beginning of this payload and fill in the
111
- // length of it.
112
- if self . with_length_prefix {
113
- // NOTE: We unwrap the conversion here because we know that `self.max_payload_len` is less than 2^32, and we
114
- // check above that `current_len` is less than or equal to `self.max_payload_len`.
115
- let current_len_buf = u32:: try_from ( current_len) . unwrap ( ) . to_le_bytes ( ) ;
116
- self . buf [ current_last_offset..current_last_offset + 4 ]
117
- . copy_from_slice ( & current_len_buf[ ..] ) ;
118
- }
119
-
120
- // Initialize the buffer for the next payload.
121
- self . prepare_for_write ( ) ;
122
-
123
94
true
124
95
}
125
96
@@ -542,7 +513,7 @@ mod tests {
542
513
] ;
543
514
544
515
for ( key, value, ts, prefix, global_labels, expected) in cases {
545
- let mut writer = PayloadWriter :: new ( 8192 , false ) ;
516
+ let mut writer = PayloadWriter :: new ( 8192 ) ;
546
517
let result = writer. write_counter ( & key, value, ts, prefix, global_labels) ;
547
518
assert_eq ! ( result. payloads_written( ) , 1 ) ;
548
519
@@ -607,7 +578,7 @@ mod tests {
607
578
] ;
608
579
609
580
for ( key, value, ts, prefix, global_labels, expected) in cases {
610
- let mut writer = PayloadWriter :: new ( 8192 , false ) ;
581
+ let mut writer = PayloadWriter :: new ( 8192 ) ;
611
582
let result = writer. write_gauge ( & key, value, ts, prefix, global_labels) ;
612
583
assert_eq ! ( result. payloads_written( ) , 1 ) ;
613
584
@@ -666,7 +637,7 @@ mod tests {
666
637
] ;
667
638
668
639
for ( key, values, prefix, global_labels, expected) in cases {
669
- let mut writer = PayloadWriter :: new ( 8192 , false ) ;
640
+ let mut writer = PayloadWriter :: new ( 8192 ) ;
670
641
let result =
671
642
writer. write_histogram ( & key, values. iter ( ) . copied ( ) , None , prefix, global_labels) ;
672
643
assert_eq ! ( result. payloads_written( ) , 1 ) ;
@@ -726,7 +697,7 @@ mod tests {
726
697
] ;
727
698
728
699
for ( key, values, prefix, global_labels, expected) in cases {
729
- let mut writer = PayloadWriter :: new ( 8192 , false ) ;
700
+ let mut writer = PayloadWriter :: new ( 8192 ) ;
730
701
let result = writer. write_distribution (
731
702
& key,
732
703
values. iter ( ) . copied ( ) ,
@@ -741,51 +712,12 @@ mod tests {
741
712
}
742
713
}
743
714
744
- #[ test]
745
- fn length_prefix ( ) {
746
- let prefixed = |buf : & str | {
747
- let mut prefixed_buf = Vec :: with_capacity ( buf. len ( ) + 4 ) ;
748
- prefixed_buf. extend_from_slice ( & ( buf. len ( ) as u32 ) . to_le_bytes ( ) ) ;
749
- prefixed_buf. extend_from_slice ( buf. as_bytes ( ) ) ;
750
- prefixed_buf
751
- } ;
752
-
753
- // Cases are defined as: metric key, metric values, metric timestamp, expected output.
754
- let cases = [
755
- ( Key :: from ( "test_distribution" ) , & [ 22.22 ] [ ..] , prefixed ( "test_distribution:22.22|d\n " ) ) ,
756
- (
757
- Key :: from_parts ( "test_distribution" , & [ ( "foo" , "bar" ) , ( "baz" , "quux" ) ] ) ,
758
- & [ 88.0 ] [ ..] ,
759
- prefixed ( "test_distribution:88.0|d|#foo:bar,baz:quux\n " ) ,
760
- ) ,
761
- (
762
- Key :: from ( "test_distribution" ) ,
763
- & [ 22.22 , 33.33 , 44.44 ] [ ..] ,
764
- prefixed ( "test_distribution:22.22:33.33:44.44|d\n " ) ,
765
- ) ,
766
- (
767
- Key :: from_parts ( "test_distribution" , & [ ( "foo" , "bar" ) , ( "baz" , "quux" ) ] ) ,
768
- & [ 88.0 , 66.6 , 123.4 ] [ ..] ,
769
- prefixed ( "test_distribution:88.0:66.6:123.4|d|#foo:bar,baz:quux\n " ) ,
770
- ) ,
771
- ] ;
772
-
773
- for ( key, values, expected) in cases {
774
- let mut writer = PayloadWriter :: new ( 8192 , true ) ;
775
- let result = writer. write_distribution ( & key, values. iter ( ) . copied ( ) , None , None , & [ ] ) ;
776
- assert_eq ! ( result. payloads_written( ) , 1 ) ;
777
-
778
- let actual = buf_from_writer ( & mut writer) ;
779
- assert_eq ! ( actual, expected) ;
780
- }
781
- }
782
-
783
715
proptest ! {
784
716
#[ test]
785
717
fn property_test_gauntlet( payload_limit in 0 ..16384usize , inputs in arb_vec( arb_metric( ) , 1 ..128 ) ) {
786
718
// TODO: Parameterize reservoir size so we can exercise the sample rate stuff.[]
787
719
788
- let mut writer = PayloadWriter :: new( payload_limit, false ) ;
720
+ let mut writer = PayloadWriter :: new( payload_limit) ;
789
721
let mut total_input_points: u64 = 0 ;
790
722
let mut payloads_written = 0 ;
791
723
let mut points_dropped = 0 ;
0 commit comments