From f933f604e466f312b262dd072a15b40c86d5897c Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Sat, 25 Feb 2023 11:09:24 +0800 Subject: [PATCH 1/4] fix: undefine the strdup by default. --- include/os/osMemory.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/os/osMemory.h b/include/os/osMemory.h index 3f57c72933..c35fd782fb 100644 --- a/include/os/osMemory.h +++ b/include/os/osMemory.h @@ -29,9 +29,12 @@ extern "C" { #define calloc CALLOC_FUNC_TAOS_FORBID #define realloc REALLOC_FUNC_TAOS_FORBID #define free FREE_FUNC_TAOS_FORBID +#ifdef strdup +#undef strdup #define strdup STRDUP_FUNC_TAOS_FORBID -#endif // ifndef ALLOW_FORBID_FUNC +#endif +#endif // ifndef ALLOW_FORBID_FUNC #endif // if !defined(WINDOWS) int32_t taosMemoryDbgInit(); From 3e9cc93b9f44b0f5dc9a85930574a785280756a5 Mon Sep 17 00:00:00 2001 From: huolibo Date: Sat, 25 Feb 2023 12:54:24 +0800 Subject: [PATCH 2/4] enh(driver): tmq async commit callback (#20114) --- .../jni/com_taosdata_jdbc_tmq_TMQConnector.h | 3 + source/client/src/clientJniConnector.c | 1 + source/client/src/clientTmqConnector.c | 66 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/source/client/jni/com_taosdata_jdbc_tmq_TMQConnector.h b/source/client/jni/com_taosdata_jdbc_tmq_TMQConnector.h index 197cd78006..c035b6598c 100644 --- a/source/client/jni/com_taosdata_jdbc_tmq_TMQConnector.h +++ b/source/client/jni/com_taosdata_jdbc_tmq_TMQConnector.h @@ -99,6 +99,9 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqCommitSync(JNI */ JNIEXPORT void JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqCommitAsync(JNIEnv *, jobject, jlong, jlong, jobject); +JNIEXPORT void JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_consumerCommitAsync(JNIEnv *, jobject, jlong, jlong, + jobject); + /* * Class: com_taosdata_jdbc_tmq_TMQConnector * Method: tmqUnsubscribeImp diff --git a/source/client/src/clientJniConnector.c b/source/client/src/clientJniConnector.c index 750ba684f4..cfa6f84bd2 100644 --- a/source/client/src/clientJniConnector.c +++ b/source/client/src/clientJniConnector.c @@ -56,6 +56,7 @@ jmethodID g_createConsumerErrorCallback; jmethodID g_topicListCallback; jclass g_consumerClass; +// deprecated jmethodID g_commitCallback; void jniGetGlobalMethod(JNIEnv *env) { diff --git a/source/client/src/clientTmqConnector.c b/source/client/src/clientTmqConnector.c index ccfc4980bc..a8c9f2279d 100644 --- a/source/client/src/clientTmqConnector.c +++ b/source/client/src/clientTmqConnector.c @@ -17,6 +17,36 @@ #include "jniCommon.h" #include "taos.h" +int __init_tmq = 0; +jmethodID g_offsetCallback; + +void tmqGlobalMethod(JNIEnv *env) { + // make sure init function executed once + switch (atomic_val_compare_exchange_32(&__init_tmq, 0, 1)) { + case 0: + break; + case 1: + do { + taosMsleep(0); + } while (atomic_load_32(&__init_tmq) == 1); + case 2: + return; + } + + if (g_vm == NULL) { + (*env)->GetJavaVM(env, &g_vm); + } + + jclass offset = (*env)->FindClass(env, "com/taosdata/jdbc/tmq/OffsetWaitCallback"); + jclass g_offsetCallbackClass = (*env)->NewGlobalRef(env, offset); + g_offsetCallback = (*env)->GetMethodID(env, g_offsetCallbackClass, "commitCallbackHandler", "(I)V"); + (*env)->DeleteLocalRef(env, offset); + + atomic_store_32(&__init_tmq, 2); + jniDebug("tmq method register finished"); +} + +// deprecated void commit_cb(tmq_t *tmq, int32_t code, void *param) { JNIEnv *env = NULL; int status = (*g_vm)->GetEnv(g_vm, (void **)&env, JNI_VERSION_1_6); @@ -40,6 +70,28 @@ void commit_cb(tmq_t *tmq, int32_t code, void *param) { env = NULL; } +void consumer_callback(tmq_t *tmq, int32_t code, void *param) { + JNIEnv *env = NULL; + int status = (*g_vm)->GetEnv(g_vm, (void **)&env, JNI_VERSION_1_6); + bool needDetach = false; + if (status < 0) { + if ((*g_vm)->AttachCurrentThread(g_vm, (void **)&env, NULL) != 0) { + return; + } + needDetach = true; + } + + jobject obj = (jobject)param; + (*env)->CallVoidMethod(env, obj, g_offsetCallback, code); + (*env)->DeleteGlobalRef(env, obj); + param = NULL; + + if (needDetach) { + (*g_vm)->DetachCurrentThread(g_vm); + } + env = NULL; +} + JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqConfNewImp(JNIEnv *env, jobject jobj) { tmq_conf_t *conf = tmq_conf_new(); jniGetGlobalMethod(env); @@ -201,6 +253,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqCommitSync(JNI return tmq_commit_sync(tmq, res); } +// deprecated JNIEXPORT void JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqCommitAsync(JNIEnv *env, jobject jobj, jlong jtmq, jlong jres, jobject consumer) { tmq_t *tmq = (tmq_t *)jtmq; @@ -213,6 +266,19 @@ JNIEXPORT void JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqCommitAsync(JN tmq_commit_async(tmq, res, commit_cb, consumer); } +JNIEXPORT void JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_consumerCommitAsync(JNIEnv *env, jobject jobj, jlong jtmq, + jlong jres, jobject offset) { + tmqGlobalMethod(env); + tmq_t *tmq = (tmq_t *)jtmq; + if (tmq == NULL) { + jniError("jobj:%p, tmq is closed", jobj); + return; + } + TAOS_RES *res = (TAOS_RES *)jres; + offset = (*env)->NewGlobalRef(env, offset); + tmq_commit_async(tmq, res, consumer_callback, offset); +} + JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_tmq_TMQConnector_tmqUnsubscribeImp(JNIEnv *env, jobject jobj, jlong jtmq) { tmq_t *tmq = (tmq_t *)jtmq; From 0e613ea3f381d3a3c349873b02b5e0f9a1857ec2 Mon Sep 17 00:00:00 2001 From: huolibo Date: Sat, 25 Feb 2023 14:48:25 +0800 Subject: [PATCH 3/4] enh(driver): add spring + mybatis type:byte[] example (#20050) * enh(driver): add spring + mybatis type:byte[] example * doc: add init description * docs: add byte[] description --- examples/JDBC/springbootdemo/readme.md | 7 +++++ .../springbootdemo/dao/WeatherMapper.xml | 10 +++++-- .../springbootdemo/domain/Weather.java | 30 +++++++++++++++++++ .../service/WeatherService.java | 2 ++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/examples/JDBC/springbootdemo/readme.md b/examples/JDBC/springbootdemo/readme.md index a3942a6a51..a89e21c009 100644 --- a/examples/JDBC/springbootdemo/readme.md +++ b/examples/JDBC/springbootdemo/readme.md @@ -1,6 +1,13 @@ ## TDengine SpringBoot + Mybatis Demo ## 需要提前创建 test 数据库 + +``` +$ taos -s 'create database if not exists test' + +$ curl http://localhost:8080/weather/init +``` + ### 配置 application.properties ```properties # datasource config diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml b/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml index 99d5893ec1..4899ec4654 100644 --- a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml +++ b/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml @@ -7,6 +7,7 @@ + - insert into test.t#{groupId} (ts, temperature, humidity, note) - values (#{ts}, ${temperature}, ${humidity}, #{note}) + insert into test.t#{groupId} (ts, temperature, humidity, note, bytes) + values (#{ts}, ${temperature}, ${humidity}, #{note}, #{bytes})