fix: do not copy the key to decode

pull/24376/head
alamb 2020-07-04 07:53:57 -04:00
parent 06f8dee3dc
commit 75fe1217e0
2 changed files with 13 additions and 11 deletions

View File

@ -37,14 +37,16 @@ pub type Result<T, E = Error> = std::result::Result<T, E>;
/// measurement = "http_api_request"
/// tags = [("status", "2XX")]
/// field = "sum"
pub fn parse_tsm_key(key: Vec<u8>) -> Result<ParsedTSMKey, TSMError> {
pub fn parse_tsm_key(key: &[u8]) -> Result<ParsedTSMKey, TSMError> {
// skip over org id, bucket id, comma
// The next n-1 bytes are the measurement name, where the nᵗʰ byte is a `,`.
let mut rem_key = key.into_iter().skip(8 + 8 + 1);
let mut rem_key = key.into_iter()
.copied()
.skip(8 + 8 + 1);
let mut tagset = Vec::<(String, String)>::with_capacity(10);
let mut measurement: Option<String> = None;
let mut field_key: Option<String> = None;
let mut tagset = Vec::with_capacity(10);
let mut measurement = None;
let mut field_key = None;
loop {
let key = parse_tsm_tag_key(&mut rem_key).map_err(|e| TSMError {
@ -541,7 +543,7 @@ mod tests {
let mut key = make_tsm_key_prefix("m", "tag1=val1,tag2=val2");
key = add_field_key(key, "f");
let parsed_key = super::parse_tsm_key(key).unwrap();
let parsed_key = super::parse_tsm_key(&key).unwrap();
assert_eq!(parsed_key.measurement, String::from("m"));
let exp_tagset = vec![
(String::from("tag1"), String::from("val1")),
@ -557,7 +559,7 @@ mod tests {
let key = make_tsm_key_prefix("m", "tag1=val1,tag2=val2");
assert_eq!(
super::parse_tsm_key(key)
super::parse_tsm_key(&key)
.err()
.expect("expect parsing error"),
TSMError {
@ -574,7 +576,7 @@ mod tests {
key = add_field_key(key, "f2");
assert_eq!(
super::parse_tsm_key(key)
super::parse_tsm_key(&key)
.err()
.expect("expect parsing error"),
TSMError {
@ -598,7 +600,7 @@ mod tests {
.join("");
let tsm_key = hex::decode(buf).unwrap();
let parsed_key = super::parse_tsm_key(tsm_key).unwrap();
let parsed_key = super::parse_tsm_key(&tsm_key).unwrap();
assert_eq!(
parsed_key.measurement,
String::from("http_api_request_duration_seconds")
@ -641,7 +643,7 @@ mod tests {
.join("");
let tsm_key = hex::decode(buf).unwrap();
let parsed_key = super::parse_tsm_key(tsm_key).unwrap();
let parsed_key = super::parse_tsm_key(&tsm_key).unwrap();
assert_eq!(parsed_key.measurement, String::from("query_log"));
let exp_tagset = vec![

View File

@ -221,7 +221,7 @@ impl IndexEntry {
}
pub fn parse_key(&self) -> Result<ParsedTSMKey, TSMError> {
key::parse_tsm_key(self.key.to_vec())
key::parse_tsm_key(&self.key)
}
}