Skip to content

Commit

Permalink
Merge pull request #789 from taosdata/fix/TD-31621-3.0
Browse files Browse the repository at this point in the history
fix: stmt bindParam length not free
  • Loading branch information
DuanKuanJun authored Aug 23, 2024
2 parents 66cbe4f + 7f1dc1c commit 270a5f5
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 55 deletions.
1 change: 1 addition & 0 deletions inc/bench.h
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,7 @@ typedef struct SThreadInfo_S {
uint64_t *bind_ts_array;
char *bindParams;
char *is_null;
int32_t **lengths;
uint32_t threadID;
uint64_t start_table_from;
uint64_t end_table_to;
Expand Down
9 changes: 0 additions & 9 deletions src/benchCommandOpt.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,15 +306,6 @@ void modifyArgument() {
superTable->partialColNum = g_arguments->partialColNum;
}

if (superTable->iface == STMT_IFACE) {
//if (g_arguments->reqPerReq > INT16_MAX) {
// g_arguments->reqPerReq = INT16_MAX;
//}
if (g_arguments->prepared_rand > g_arguments->reqPerReq) {
g_arguments->prepared_rand = g_arguments->reqPerReq;
}
}

for (int i = 0; i < superTable->cols->size; ++i) {
Field * col = benchArrayGet(superTable->cols, i);
if (!g_arguments->demo_mode) {
Expand Down
4 changes: 2 additions & 2 deletions src/benchData.c
Original file line number Diff line number Diff line change
Expand Up @@ -1977,7 +1977,7 @@ uint32_t bindParamBatch(threadInfo *pThreadInfo,
(sizeof(TAOS_MULTI_BIND) * (columnCount + 1)));
memset(pThreadInfo->is_null, 0, batch);

for (int c = 0; c < columnCount + 1; c++) {
for (int c = 0; c <= columnCount; c++) {
TAOS_MULTI_BIND *param =
(TAOS_MULTI_BIND *)(pThreadInfo->bindParams +
sizeof(TAOS_MULTI_BIND) * c);
Expand Down Expand Up @@ -2007,7 +2007,7 @@ uint32_t bindParamBatch(threadInfo *pThreadInfo,
col->length);
}
param->buffer_type = data_type;
param->length = benchCalloc(batch, sizeof(int32_t), true);
param->length = pThreadInfo->lengths[c];

for (int b = 0; b < batch; b++) {
param->length[b] = (int32_t)param->buffer_length;
Expand Down
30 changes: 17 additions & 13 deletions src/benchInsert.c
Original file line number Diff line number Diff line change
Expand Up @@ -3050,14 +3050,11 @@ static int parseBufferToStmtBatch(SSuperTable* stbInfo, uint64_t *bind_ts_array)

for (int c = 0; c < columnCount; c++) {
Field *col = benchArrayGet(stbInfo->cols, c);
char dataType = col->type;

char *is_null = benchCalloc(
1, sizeof(char) *g_arguments->prepared_rand, false);
char *is_null = benchCalloc(1, sizeof(char) * g_arguments->prepared_rand, false);
tmfree(col->stmtData.is_null);
col->stmtData.is_null = is_null;

initStmtData(dataType, &(col->stmtData.data), col->length);
initStmtData(col->type, &(col->stmtData.data), col->length);
}

return initStmtDataValue(stbInfo, NULL, bind_ts_array);
Expand Down Expand Up @@ -3525,13 +3522,16 @@ int32_t initInsertThread(SDataBase* database, SSuperTable* stbInfo, int32_t nthr
goto END;
}

int32_t max_cnt = g_arguments->prepared_rand > g_arguments->reqPerReq ? g_arguments->prepared_rand : g_arguments->reqPerReq;

// malloc bind
pThreadInfo->bind_ts = benchCalloc(1, sizeof(int64_t), true);
pThreadInfo->bind_ts_array = benchCalloc(1, sizeof(int64_t)*max_cnt, true);
pThreadInfo->bind_ts_array = benchCalloc(1, sizeof(int64_t)*g_arguments->reqPerReq, true);
pThreadInfo->bindParams = benchCalloc(1, sizeof(TAOS_MULTI_BIND)*(stbInfo->cols->size + 1), true);
pThreadInfo->is_null = benchCalloc(1, g_arguments->reqPerReq, true);
// have ts columns, so size + 1
pThreadInfo->lengths = benchCalloc(stbInfo->cols->size + 1, sizeof(int32_t*), true);
for(int32_t c = 0; c <= stbInfo->cols->size; c++) {
pThreadInfo->lengths[c] = benchCalloc(g_arguments->reqPerReq, sizeof(int32_t), true);
}

parseBufferToStmtBatch(stbInfo, pThreadInfo->bind_ts_array);
for (int64_t child = 0; child < stbInfo->childTblCount; child++) {
Expand Down Expand Up @@ -3835,15 +3835,19 @@ int32_t exitInsertThread(SDataBase* database, SSuperTable* stbInfo, int32_t nthr
case STMT_IFACE:
taos_stmt_close(pThreadInfo->conn->stmt);

// free length
for (int c = 0; c < stbInfo->cols->size + 1; c++) {
TAOS_MULTI_BIND *param = (TAOS_MULTI_BIND *)(pThreadInfo->bindParams + sizeof(TAOS_MULTI_BIND) * c);
tmfree(param->length);
}
tmfree(pThreadInfo->bind_ts);
tmfree(pThreadInfo->bind_ts_array);
tmfree(pThreadInfo->bindParams);
tmfree(pThreadInfo->is_null);

// free lengths
if(pThreadInfo->lengths) {
for(int c = 0; c <= stbInfo->cols->size; c++) {
tmfree(pThreadInfo->lengths[c]);
}
free(pThreadInfo->lengths);
pThreadInfo->lengths = NULL;
}
break;

case TAOSC_IFACE:
Expand Down
56 changes: 25 additions & 31 deletions src/benchJsonOpt.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,9 @@ static int getColumnAndTagTypeFromInsertJsonFile(
int count = 1;
int64_t max = RAND_MAX >> 1;
int64_t min = 0;
double maxInDbl = max;
double minInDbl = min;
uint32_t scalingFactor = 1;
double maxInDbl = max;
double minInDbl = min;
uint32_t scalingFactor = 1;
int32_t length = 4;
// fun type
uint8_t funType = FUNTYPE_NONE;
Expand Down Expand Up @@ -260,25 +260,25 @@ static int getColumnAndTagTypeFromInsertJsonFile(
}

double valueRange = maxInDbl - minInDbl;
tools_cJSON *dataScalingFactor = tools_cJSON_GetObjectItem(column, "scalingFactor");
if (tools_cJSON_IsNumber(dataScalingFactor)) {
scalingFactor = dataScalingFactor->valueint;
if (scalingFactor > 1) {
max = maxInDbl * scalingFactor;
min = minInDbl * scalingFactor;
} else {
scalingFactor = 1;
}
} else {
if (0 < valueRange && valueRange <= 1) {
scalingFactor = 1000;
max = maxInDbl * scalingFactor;
min = minInDbl * scalingFactor;
} else {
scalingFactor = 1;
}
}

tools_cJSON *dataScalingFactor = tools_cJSON_GetObjectItem(column, "scalingFactor");
if (tools_cJSON_IsNumber(dataScalingFactor)) {
scalingFactor = dataScalingFactor->valueint;
if (scalingFactor > 1) {
max = maxInDbl * scalingFactor;
min = minInDbl * scalingFactor;
} else {
scalingFactor = 1;
}
} else {
if (0 < valueRange && valueRange <= 1) {
scalingFactor = 1000;
max = maxInDbl * scalingFactor;
min = minInDbl * scalingFactor;
} else {
scalingFactor = 1;
}
}

// gen
tools_cJSON *dataGen = tools_cJSON_GetObjectItem(column, "gen");
if (tools_cJSON_IsString(dataGen)) {
Expand Down Expand Up @@ -352,9 +352,9 @@ static int getColumnAndTagTypeFromInsertJsonFile(
col->sma = sma;
col->max = max;
col->min = min;
col->maxInDbl = maxInDbl;
col->minInDbl = minInDbl;
col->scalingFactor = scalingFactor;
col->maxInDbl = maxInDbl;
col->minInDbl = minInDbl;
col->scalingFactor = scalingFactor;
col->gen = gen;
col->fillNull = fillNull;
col->values = dataValues;
Expand Down Expand Up @@ -891,12 +891,6 @@ static int getStableInfo(tools_cJSON *dbinfos, int index) {
superTable->iface = REST_IFACE;
} else if (0 == strcasecmp(stbIface->valuestring, "stmt")) {
superTable->iface = STMT_IFACE;
//if (g_arguments->reqPerReq > INT16_MAX) {
// g_arguments->reqPerReq = INT16_MAX;
//}
if (g_arguments->reqPerReq > g_arguments->prepared_rand) {
g_arguments->prepared_rand = g_arguments->reqPerReq;
}
} else if (0 == strcasecmp(stbIface->valuestring, "sml")) {
if (g_arguments->reqPerReq > SML_MAX_BATCH) {
errorPrint("reqPerReq (%u) larger than maximum (%d)\n",
Expand Down
10 changes: 10 additions & 0 deletions src/benchMain.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ void* benchCancelHandler(void* arg) {
}
#endif

void checkArgumentValid() {
// check prepared_rand valid
if(g_arguments->prepared_rand < g_arguments->reqPerReq) {
infoPrint("prepared_rand(%"PRIu64") < num_of_records_per_req(%d), so set num_of_records_per_req = prepared_rand\n",
g_arguments->prepared_rand, g_arguments->reqPerReq);
g_arguments->reqPerReq = g_arguments->prepared_rand;
}
}

int main(int argc, char* argv[]) {
int ret = 0;

Expand Down Expand Up @@ -111,6 +120,7 @@ int main(int argc, char* argv[]) {
}

infoPrint("client version: %s\n", taos_get_client_info());
checkArgumentValid();

if (g_arguments->test_mode == INSERT_TEST) {
if (insertTestProcess()) {
Expand Down

0 comments on commit 270a5f5

Please sign in to comment.