Skip to content

Commit 28d8349

Browse files
committed
chore: fix get json meta coredump when json meta is null
1 parent 9633431 commit 28d8349

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

taos-optin/src/raw/mod.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::sync::{Arc, Mutex, Weak};
1010
use std::task::{Context, Poll, Waker};
1111

1212
use dlopen2::raw::Library;
13-
use taos_query::common::{c_field_t, raw_data_t, RawData, SmlData};
13+
use taos_query::common::{c_field_t, raw_data_t, JsonMeta, RawData, SmlData};
1414
use taos_query::prelude::{Code, Field, Precision, RawError};
1515
use taos_query::tmq::Assignment;
1616
use taos_query::RawBlock;
@@ -1763,13 +1763,25 @@ impl RawRes {
17631763
}
17641764
}
17651765
#[inline]
1766-
pub(crate) fn tmq_get_json_meta(&self) -> String {
1766+
pub(crate) fn tmq_get_json_meta(&self) -> Result<JsonMeta, RawError> {
17671767
unsafe {
17681768
let meta = (self.c.tmq.as_ref().unwrap().tmq_get_json_meta)(self.as_ptr());
1769-
let meta_cstr = CStr::from_ptr(meta).to_string_lossy().into_owned();
1770-
(self.c.tmq.as_ref().unwrap().tmq_free_json_meta)(meta);
1771-
tracing::debug!(json = meta_cstr, "Received TMQ json meta");
1772-
meta_cstr
1769+
if meta.is_null() {
1770+
return Err(RawError::from_string("tmq_get_json_meta returns null"));
1771+
}
1772+
1773+
let meta_cstr = CStr::from_ptr(meta);
1774+
match serde_json::from_slice(meta_cstr.to_bytes()) {
1775+
Ok(json_meta) => {
1776+
tracing::trace!(json = %meta_cstr.to_string_lossy(), "Received TMQ json meta");
1777+
(self.c.tmq.as_ref().unwrap().tmq_free_json_meta)(meta);
1778+
Ok(json_meta)
1779+
}
1780+
Err(err) => {
1781+
(self.c.tmq.as_ref().unwrap().tmq_free_json_meta)(meta);
1782+
Err(RawError::from_string(err.to_string()))
1783+
}
1784+
}
17731785
}
17741786
}
17751787

taos-optin/src/tmq/mod.rs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -319,13 +319,10 @@ impl AsyncOnSync for Meta {}
319319
impl IsMeta for Meta {
320320
fn as_raw_meta(&self) -> RawResult<RawMeta> {
321321
self.res.tmq_get_raw()
322-
// Ok(unsafe { std::mem::transmute(self.raw.clone()) })
323322
}
324323

325324
fn as_json_meta(&self) -> RawResult<taos_query::common::JsonMeta> {
326-
let meta = serde_json::from_slice(self.res.tmq_get_json_meta().as_bytes())
327-
.map_err(|err| RawError::from_string(err.to_string()))?;
328-
Ok(meta)
325+
self.res.tmq_get_json_meta()
329326
}
330327
}
331328
impl Meta {
@@ -334,17 +331,13 @@ impl Meta {
334331
Self { res }
335332
}
336333

337-
// pub fn to_raw(&self) -> raw_data_t {
338-
// self.raw.as_raw_data_t()
339-
// }
340-
334+
#[cfg(test)]
341335
pub fn to_json(&self) -> serde_json::Value {
342-
serde_json::from_slice(self.res.tmq_get_json_meta().as_bytes())
343-
.expect("meta json should always be valid json format")
344-
}
345-
346-
pub fn to_sql(&self) -> String {
347-
todo!()
336+
self.res
337+
.tmq_get_json_meta()
338+
.ok()
339+
.and_then(|v| serde_json::to_value(v).ok())
340+
.unwrap_or_else(|| serde_json::Value::Null)
348341
}
349342
}
350343
#[derive(Debug)]

0 commit comments

Comments
 (0)