Merge branch 'develop' into feature/add-testcase-to-test-boundary
This commit is contained in:
commit
9e031188bd
|
@ -3620,299 +3620,6 @@ void spread_function_finalizer(SQLFunctionCtx *pCtx) {
|
||||||
doFinalizer(pCtx);
|
doFinalizer(pCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getStatics_i8(int64_t *primaryKey, int32_t type, int8_t *data, int32_t numOfRow, int64_t *min, int64_t *max,
|
|
||||||
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
*min = INT64_MAX;
|
|
||||||
*max = INT64_MIN;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
// int64_t lastKey = 0;
|
|
||||||
// int8_t lastVal = TSDB_DATA_TINYINT_NULL;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((char *)&data[i], type)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*sum += data[i];
|
|
||||||
if (*min > data[i]) {
|
|
||||||
*min = data[i];
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*max < data[i]) {
|
|
||||||
*max = data[i];
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (type != TSDB_DATA_TYPE_BOOL) { // ignore the bool data type pre-calculation
|
|
||||||
// if (isNull((char *)&lastVal, type)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void getStatics_i16(int64_t *primaryKey, int16_t *data, int32_t numOfRow, int64_t *min, int64_t *max,
|
|
||||||
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
*min = INT64_MAX;
|
|
||||||
*max = INT64_MIN;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
// int64_t lastKey = 0;
|
|
||||||
// int16_t lastVal = TSDB_DATA_SMALLINT_NULL;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_SMALLINT)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*sum += data[i];
|
|
||||||
if (*min > data[i]) {
|
|
||||||
*min = data[i];
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*max < data[i]) {
|
|
||||||
*max = data[i];
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isNull(&lastVal, TSDB_DATA_TYPE_SMALLINT)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void getStatics_i32(int64_t *primaryKey, int32_t *data, int32_t numOfRow, int64_t *min, int64_t *max,
|
|
||||||
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
*min = INT64_MAX;
|
|
||||||
*max = INT64_MIN;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
// int64_t lastKey = 0;
|
|
||||||
// int32_t lastVal = TSDB_DATA_INT_NULL;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_INT)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*sum += data[i];
|
|
||||||
if (*min > data[i]) {
|
|
||||||
*min = data[i];
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*max < data[i]) {
|
|
||||||
*max = data[i];
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isNull(&lastVal, TSDB_DATA_TYPE_INT)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void getStatics_i64(int64_t *primaryKey, int64_t *data, int32_t numOfRow, int64_t *min, int64_t *max,
|
|
||||||
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
*min = INT64_MAX;
|
|
||||||
*max = INT64_MIN;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_BIGINT)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*sum += data[i];
|
|
||||||
if (*min > data[i]) {
|
|
||||||
*min = data[i];
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*max < data[i]) {
|
|
||||||
*max = data[i];
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isNull(&lastVal, TSDB_DATA_TYPE_BIGINT)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void getStatics_f(int64_t *primaryKey, float *data, int32_t numOfRow, double *min, double *max, double *sum,
|
|
||||||
int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
float fmin = DBL_MAX;
|
|
||||||
float fmax = -DBL_MAX;
|
|
||||||
double dsum = 0;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_FLOAT)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float fv = 0;
|
|
||||||
fv = GET_FLOAT_VAL(&(data[i]));
|
|
||||||
dsum += fv;
|
|
||||||
if (fmin > fv) {
|
|
||||||
fmin = fv;
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fmax < fv) {
|
|
||||||
fmax = fv;
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isNull(&lastVal, TSDB_DATA_TYPE_FLOAT)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
double csum = 0;
|
|
||||||
csum = GET_DOUBLE_VAL(sum);
|
|
||||||
csum += dsum;
|
|
||||||
#ifdef _TD_ARM_32_
|
|
||||||
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(max, &fmax);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(min, &fmin);
|
|
||||||
#else
|
|
||||||
*sum = csum;
|
|
||||||
*max = fmax;
|
|
||||||
*min = fmin;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void getStatics_d(int64_t *primaryKey, double *data, int32_t numOfRow, double *min, double *max, double *sum,
|
|
||||||
int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
double dmin = DBL_MAX;
|
|
||||||
double dmax = -DBL_MAX;
|
|
||||||
double dsum = 0;
|
|
||||||
*minIndex = 0;
|
|
||||||
*maxIndex = 0;
|
|
||||||
|
|
||||||
assert(numOfRow <= INT16_MAX);
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_DOUBLE)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
double dv = 0;
|
|
||||||
dv = GET_DOUBLE_VAL(&(data[i]));
|
|
||||||
dsum += dv;
|
|
||||||
if (dmin > dv) {
|
|
||||||
dmin = dv;
|
|
||||||
*minIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmax < dv) {
|
|
||||||
dmax = dv;
|
|
||||||
*maxIndex = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (isNull(&lastVal, TSDB_DATA_TYPE_DOUBLE)) {
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// } else {
|
|
||||||
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
|
||||||
// lastKey = primaryKey[i];
|
|
||||||
// lastVal = data[i];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
double csum = 0;
|
|
||||||
csum = GET_DOUBLE_VAL(sum);
|
|
||||||
csum += dsum;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _TD_ARM_32_
|
|
||||||
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(max, &dmax);
|
|
||||||
SET_DOUBLE_VAL_ALIGN(min, &dmin);
|
|
||||||
#else
|
|
||||||
*sum = csum;
|
|
||||||
*max = dmax;
|
|
||||||
*min = dmin;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void getStatistics(char *priData, char *data, int32_t size, int32_t numOfRow, int32_t type, int64_t *min, int64_t *max,
|
|
||||||
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int32_t *numOfNull) {
|
|
||||||
int64_t *primaryKey = (int64_t *)priData;
|
|
||||||
if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) {
|
|
||||||
for (int32_t i = 0; i < numOfRow; ++i) {
|
|
||||||
if (isNull(data + i * size, type)) {
|
|
||||||
(*numOfNull) += 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (type == TSDB_DATA_TYPE_TINYINT || type == TSDB_DATA_TYPE_BOOL) {
|
|
||||||
getStatics_i8(primaryKey, type, (int8_t *)data, numOfRow, min, max, sum, minIndex, maxIndex, numOfNull);
|
|
||||||
} else if (type == TSDB_DATA_TYPE_SMALLINT) {
|
|
||||||
getStatics_i16(primaryKey, (int16_t *)data, numOfRow, min, max, sum, minIndex, maxIndex, numOfNull);
|
|
||||||
} else if (type == TSDB_DATA_TYPE_INT) {
|
|
||||||
getStatics_i32(primaryKey, (int32_t *)data, numOfRow, min, max, sum, minIndex, maxIndex, numOfNull);
|
|
||||||
} else if (type == TSDB_DATA_TYPE_BIGINT || type == TSDB_DATA_TYPE_TIMESTAMP) {
|
|
||||||
getStatics_i64(primaryKey, (int64_t *)data, numOfRow, min, max, sum, minIndex, maxIndex, numOfNull);
|
|
||||||
} else if (type == TSDB_DATA_TYPE_DOUBLE) {
|
|
||||||
getStatics_d(primaryKey, (double *)data, numOfRow, (double*) min, (double*) max, (double*) sum, minIndex, maxIndex, numOfNull);
|
|
||||||
} else if (type == TSDB_DATA_TYPE_FLOAT) {
|
|
||||||
getStatics_f(primaryKey, (float *)data, numOfRow, (double*) min, (double*) max, (double*) sum, minIndex, maxIndex, numOfNull);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* param[1]: start time
|
* param[1]: start time
|
||||||
|
|
|
@ -32,18 +32,280 @@ const int32_t TYPE_BYTES[11] = {
|
||||||
sizeof(VarDataOffsetT) // TSDB_DATA_TYPE_NCHAR
|
sizeof(VarDataOffsetT) // TSDB_DATA_TYPE_NCHAR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void getStatics_i8(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
int8_t *data = (int8_t *)pData;
|
||||||
|
*min = INT64_MAX;
|
||||||
|
*max = INT64_MIN;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
// int64_t lastKey = 0;
|
||||||
|
// int8_t lastVal = TSDB_DATA_TINYINT_NULL;
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((char *)&data[i], TSDB_DATA_TYPE_TINYINT)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sum += data[i];
|
||||||
|
if (*min > data[i]) {
|
||||||
|
*min = data[i];
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*max < data[i]) {
|
||||||
|
*max = data[i];
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getStatics_i16(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
int16_t *data = (int16_t *)pData;
|
||||||
|
*min = INT64_MAX;
|
||||||
|
*max = INT64_MIN;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
// int64_t lastKey = 0;
|
||||||
|
// int16_t lastVal = TSDB_DATA_SMALLINT_NULL;
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_SMALLINT)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sum += data[i];
|
||||||
|
if (*min > data[i]) {
|
||||||
|
*min = data[i];
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*max < data[i]) {
|
||||||
|
*max = data[i];
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (isNull(&lastVal, TSDB_DATA_TYPE_SMALLINT)) {
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// } else {
|
||||||
|
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getStatics_i32(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
int32_t *data = (int32_t *)pData;
|
||||||
|
*min = INT64_MAX;
|
||||||
|
*max = INT64_MIN;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
// int64_t lastKey = 0;
|
||||||
|
// int32_t lastVal = TSDB_DATA_INT_NULL;
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_INT)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sum += data[i];
|
||||||
|
if (*min > data[i]) {
|
||||||
|
*min = data[i];
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*max < data[i]) {
|
||||||
|
*max = data[i];
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (isNull(&lastVal, TSDB_DATA_TYPE_INT)) {
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// } else {
|
||||||
|
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getStatics_i64(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
int64_t *data = (int64_t *)pData;
|
||||||
|
*min = INT64_MAX;
|
||||||
|
*max = INT64_MIN;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_BIGINT)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
*sum += data[i];
|
||||||
|
if (*min > data[i]) {
|
||||||
|
*min = data[i];
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*max < data[i]) {
|
||||||
|
*max = data[i];
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (isNull(&lastVal, TSDB_DATA_TYPE_BIGINT)) {
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// } else {
|
||||||
|
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getStatics_f(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
float *data = (float *)pData;
|
||||||
|
float fmin = DBL_MAX;
|
||||||
|
float fmax = -DBL_MAX;
|
||||||
|
double dsum = 0;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_FLOAT)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float fv = 0;
|
||||||
|
fv = GET_FLOAT_VAL(&(data[i]));
|
||||||
|
dsum += fv;
|
||||||
|
if (fmin > fv) {
|
||||||
|
fmin = fv;
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fmax < fv) {
|
||||||
|
fmax = fv;
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (isNull(&lastVal, TSDB_DATA_TYPE_FLOAT)) {
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// } else {
|
||||||
|
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
double csum = 0;
|
||||||
|
csum = GET_DOUBLE_VAL(sum);
|
||||||
|
csum += dsum;
|
||||||
|
#ifdef _TD_ARM_32_
|
||||||
|
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
||||||
|
SET_DOUBLE_VAL_ALIGN(max, &fmax);
|
||||||
|
SET_DOUBLE_VAL_ALIGN(min, &fmin);
|
||||||
|
#else
|
||||||
|
*sum = csum;
|
||||||
|
*max = fmax;
|
||||||
|
*min = fmin;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getStatics_d(const TSKEY *primaryKey, const void *pData, int32_t numOfRow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minIndex, int16_t *maxIndex, int16_t *numOfNull) {
|
||||||
|
double *data = (double *)pData;
|
||||||
|
double dmin = DBL_MAX;
|
||||||
|
double dmax = -DBL_MAX;
|
||||||
|
double dsum = 0;
|
||||||
|
*minIndex = 0;
|
||||||
|
*maxIndex = 0;
|
||||||
|
|
||||||
|
ASSERT(numOfRow <= INT16_MAX);
|
||||||
|
|
||||||
|
for (int32_t i = 0; i < numOfRow; ++i) {
|
||||||
|
if (isNull((const char*) &data[i], TSDB_DATA_TYPE_DOUBLE)) {
|
||||||
|
(*numOfNull) += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
double dv = 0;
|
||||||
|
dv = GET_DOUBLE_VAL(&(data[i]));
|
||||||
|
dsum += dv;
|
||||||
|
if (dmin > dv) {
|
||||||
|
dmin = dv;
|
||||||
|
*minIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dmax < dv) {
|
||||||
|
dmax = dv;
|
||||||
|
*maxIndex = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (isNull(&lastVal, TSDB_DATA_TYPE_DOUBLE)) {
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// } else {
|
||||||
|
// *wsum = lastVal * (primaryKey[i] - lastKey);
|
||||||
|
// lastKey = primaryKey[i];
|
||||||
|
// lastVal = data[i];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
double csum = 0;
|
||||||
|
csum = GET_DOUBLE_VAL(sum);
|
||||||
|
csum += dsum;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _TD_ARM_32_
|
||||||
|
SET_DOUBLE_VAL_ALIGN(sum, &csum);
|
||||||
|
SET_DOUBLE_VAL_ALIGN(max, &dmax);
|
||||||
|
SET_DOUBLE_VAL_ALIGN(min, &dmin);
|
||||||
|
#else
|
||||||
|
*sum = csum;
|
||||||
|
*max = dmax;
|
||||||
|
*min = dmin;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
tDataTypeDescriptor tDataTypeDesc[11] = {
|
tDataTypeDescriptor tDataTypeDesc[11] = {
|
||||||
{TSDB_DATA_TYPE_NULL, 6, 1, "NOTYPE", NULL, NULL},
|
{TSDB_DATA_TYPE_NULL, 6, 1, "NOTYPE", NULL, NULL, NULL},
|
||||||
{TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", tsCompressBool, tsDecompressBool},
|
{TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", tsCompressBool, tsDecompressBool, NULL},
|
||||||
{TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", tsCompressTinyint, tsDecompressTinyint},
|
{TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", tsCompressTinyint, tsDecompressTinyint, getStatics_i8},
|
||||||
{TSDB_DATA_TYPE_SMALLINT, 8, SHORT_BYTES, "SMALLINT", tsCompressSmallint, tsDecompressSmallint},
|
{TSDB_DATA_TYPE_SMALLINT, 8, SHORT_BYTES, "SMALLINT", tsCompressSmallint, tsDecompressSmallint, getStatics_i16},
|
||||||
{TSDB_DATA_TYPE_INT, 3, INT_BYTES, "INT", tsCompressInt, tsDecompressInt},
|
{TSDB_DATA_TYPE_INT, 3, INT_BYTES, "INT", tsCompressInt, tsDecompressInt, getStatics_i32},
|
||||||
{TSDB_DATA_TYPE_BIGINT, 6, LONG_BYTES, "BIGINT", tsCompressBigint, tsDecompressBigint},
|
{TSDB_DATA_TYPE_BIGINT, 6, LONG_BYTES, "BIGINT", tsCompressBigint, tsDecompressBigint, getStatics_i64},
|
||||||
{TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", tsCompressFloat, tsDecompressFloat},
|
{TSDB_DATA_TYPE_FLOAT, 5, FLOAT_BYTES, "FLOAT", tsCompressFloat, tsDecompressFloat, getStatics_f},
|
||||||
{TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", tsCompressDouble, tsDecompressDouble},
|
{TSDB_DATA_TYPE_DOUBLE, 6, DOUBLE_BYTES, "DOUBLE", tsCompressDouble, tsDecompressDouble, getStatics_d},
|
||||||
{TSDB_DATA_TYPE_BINARY, 6, 0, "BINARY", tsCompressString, tsDecompressString},
|
{TSDB_DATA_TYPE_BINARY, 6, 0, "BINARY", tsCompressString, tsDecompressString, NULL},
|
||||||
{TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", tsCompressTimestamp, tsDecompressTimestamp},
|
{TSDB_DATA_TYPE_TIMESTAMP, 9, LONG_BYTES, "TIMESTAMP", tsCompressTimestamp, tsDecompressTimestamp, NULL},
|
||||||
{TSDB_DATA_TYPE_NCHAR, 5, 8, "NCHAR", tsCompressString, tsDecompressString},
|
{TSDB_DATA_TYPE_NCHAR, 5, 8, "NCHAR", tsCompressString, tsDecompressString, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
char tTokenTypeSwitcher[13] = {
|
char tTokenTypeSwitcher[13] = {
|
||||||
|
|
|
@ -241,17 +241,12 @@ function CTaosInterface (config = null, pass = false) {
|
||||||
'taos_fetch_rows_a': [ ref.types.void, [ ref.types.void_ptr, ref.types.void_ptr, ref.types.void_ptr ]],
|
'taos_fetch_rows_a': [ ref.types.void, [ ref.types.void_ptr, ref.types.void_ptr, ref.types.void_ptr ]],
|
||||||
|
|
||||||
// Subscription
|
// Subscription
|
||||||
//TAOS_SUB *taos_subscribe(char *host, char *user, char *pass, char *db, char *table, long time, int mseconds)
|
//TAOS_SUB *taos_subscribe(TAOS* taos, int restart, const char* topic, const char *sql, TAOS_SUBSCRIBE_CALLBACK fp, void *param, int interval)
|
||||||
////TAOS_SUB *taos_subscribe(char *host, char *user, char *pass, char *db, char *table, int64_t time, int mseconds);
|
'taos_subscribe': [ ref.types.void_ptr, [ ref.types.void_ptr, ref.types.int, ref.types.char_ptr, ref.types.char_ptr, ref.types.void_ptr, ref.types.void_ptr, ref.types.int] ],
|
||||||
'taos_subscribe': [ ref.types.void_ptr, [ ref.types.char_ptr, ref.types.char_ptr, ref.types.char_ptr, ref.types.char_ptr, ref.types.char_ptr, ref.types.int64, ref.types.int] ],
|
// TAOS_RES *taos_consume(TAOS_SUB *tsub)
|
||||||
//TAOS_ROW taos_consume(TAOS_SUB *tsub);
|
'taos_consume': [ ref.types.void_ptr, [ref.types.void_ptr] ],
|
||||||
'taos_consume': [ ref.refType(ref.types.void_ptr2), [ref.types.void_ptr] ],
|
|
||||||
//void taos_unsubscribe(TAOS_SUB *tsub);
|
//void taos_unsubscribe(TAOS_SUB *tsub);
|
||||||
'taos_unsubscribe': [ ref.types.void, [ ref.types.void_ptr ] ],
|
'taos_unsubscribe': [ ref.types.void, [ ref.types.void_ptr ] ],
|
||||||
//int taos_subfields_count(TAOS_SUB *tsub);
|
|
||||||
'taos_subfields_count': [ ref.types.int, [ref.types.void_ptr ] ],
|
|
||||||
//TAOS_FIELD *taos_fetch_subfields(TAOS_SUB *tsub);
|
|
||||||
'taos_fetch_subfields': [ ref.refType(TaosField), [ ref.types.void_ptr ] ],
|
|
||||||
|
|
||||||
// Continuous Query
|
// Continuous Query
|
||||||
//TAOS_STREAM *taos_open_stream(TAOS *taos, char *sqlstr, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row),
|
//TAOS_STREAM *taos_open_stream(TAOS *taos, char *sqlstr, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row),
|
||||||
|
@ -362,7 +357,7 @@ CTaosInterface.prototype.fetchBlock = function fetchBlock(result, fields) {
|
||||||
blocks.fill(null);
|
blocks.fill(null);
|
||||||
num_of_rows = Math.abs(num_of_rows);
|
num_of_rows = Math.abs(num_of_rows);
|
||||||
let offset = 0;
|
let offset = 0;
|
||||||
pblock = pblock.deref()
|
pblock = pblock.deref();
|
||||||
for (let i = 0; i < fields.length; i++) {
|
for (let i = 0; i < fields.length; i++) {
|
||||||
|
|
||||||
if (!convertFunctions[fields[i]['type']] ) {
|
if (!convertFunctions[fields[i]['type']] ) {
|
||||||
|
@ -472,64 +467,40 @@ CTaosInterface.prototype.getClientInfo = function getClientInfo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscription
|
// Subscription
|
||||||
CTaosInterface.prototype.subscribe = function subscribe(host=null, user="root", password="taosdata", db=null, table=null, time=null, mseconds=null) {
|
CTaosInterface.prototype.subscribe = function subscribe(connection, restart, topic, sql, interval) {
|
||||||
let dbOrig = db;
|
let topicOrig = topic;
|
||||||
let tableOrig = table;
|
let sqlOrig = sql;
|
||||||
try {
|
try {
|
||||||
host = host != null ? ref.allocCString(host) : ref.alloc(ref.types.char_ptr, ref.NULL);
|
sql = sql != null ? ref.allocCString(sql) : ref.alloc(ref.types.char_ptr, ref.NULL);
|
||||||
}
|
}
|
||||||
catch(err) {
|
catch(err) {
|
||||||
throw "Attribute Error: host is expected as a str";
|
throw "Attribute Error: sql is expected as a str";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
user = ref.allocCString(user)
|
topic = topic != null ? ref.allocCString(topic) : ref.alloc(ref.types.char_ptr, ref.NULL);
|
||||||
}
|
}
|
||||||
catch(err) {
|
catch(err) {
|
||||||
throw "Attribute Error: user is expected as a str";
|
throw TypeError("topic is expected as a str");
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
password = ref.allocCString(password);
|
restart = ref.alloc(ref.types.int, restart);
|
||||||
}
|
|
||||||
catch(err) {
|
let subscription = this.libtaos.taos_subscribe(connection, restart, topic, sql, null, null, interval);
|
||||||
throw "Attribute Error: password is expected as a str";
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
db = db != null ? ref.allocCString(db) : ref.alloc(ref.types.char_ptr, ref.NULL);
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
throw "Attribute Error: db is expected as a str";
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
table = table != null ? ref.allocCString(table) : ref.alloc(ref.types.char_ptr, ref.NULL);
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
throw TypeError("table is expected as a str");
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mseconds = ref.alloc(ref.types.int, mseconds);
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
throw TypeError("mseconds is expected as an int");
|
|
||||||
}
|
|
||||||
//TAOS_SUB *taos_subscribe(char *host, char *user, char *pass, char *db, char *table, int64_t time, int mseconds);
|
|
||||||
let subscription = this.libtaos.taos_subscribe(host, user, password, db, table, time, mseconds);
|
|
||||||
if (ref.isNull(subscription)) {
|
if (ref.isNull(subscription)) {
|
||||||
throw new errors.TDError('Failed to subscribe to TDengine | Database: ' + dbOrig + ', Table: ' + tableOrig);
|
throw new errors.TDError('Failed to subscribe to TDengine | Database: ' + dbOrig + ', Table: ' + tableOrig);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log('Successfully subscribed to TDengine | Database: ' + dbOrig + ', Table: ' + tableOrig);
|
console.log('Successfully subscribed to TDengine - Topic: ' + topicOrig);
|
||||||
}
|
}
|
||||||
return subscription;
|
return subscription;
|
||||||
}
|
}
|
||||||
CTaosInterface.prototype.subFieldsCount = function subFieldsCount(subscription) {
|
|
||||||
return this.libtaos.taos_subfields_count(subscription);
|
CTaosInterface.prototype.consume = function consume(subscription) {
|
||||||
}
|
let result = this.libtaos.taos_consume(subscription);
|
||||||
CTaosInterface.prototype.fetchSubFields = function fetchSubFields(subscription) {
|
|
||||||
let pfields = this.libtaos.taos_fetch_subfields(subscription);
|
|
||||||
let pfieldscount = this.subFieldsCount(subscription);
|
|
||||||
let fields = [];
|
let fields = [];
|
||||||
|
let pfields = this.fetchFields(result);
|
||||||
if (ref.isNull(pfields) == false) {
|
if (ref.isNull(pfields) == false) {
|
||||||
pfields = ref.reinterpret(pfields, 68 * pfieldscount , 0);
|
pfields = ref.reinterpret(pfields, this.numFields(result) * 68, 0);
|
||||||
for (let i = 0; i < pfields.length; i += 68) {
|
for (let i = 0; i < pfields.length; i += 68) {
|
||||||
//0 - 63 = name //64 - 65 = bytes, 66 - 67 = type
|
//0 - 63 = name //64 - 65 = bytes, 66 - 67 = type
|
||||||
fields.push( {
|
fields.push( {
|
||||||
|
@ -539,27 +510,23 @@ CTaosInterface.prototype.fetchSubFields = function fetchSubFields(subscription)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fields;
|
|
||||||
}
|
let data = [];
|
||||||
CTaosInterface.prototype.consume = function consume(subscription) {
|
while(true) {
|
||||||
let row = this.libtaos.taos_consume(subscription);
|
let { blocks, num_of_rows } = this.fetchBlock(result, fields);
|
||||||
let fields = this.fetchSubFields(subscription);
|
if (num_of_rows == 0) {
|
||||||
//let isMicro = (cti.libtaos.taos_result_precision(result) == FieldTypes.C_TIMESTAMP_MICRO);
|
break;
|
||||||
let isMicro = false; //no supported function for determining precision?
|
}
|
||||||
let blocks = new Array(fields.length);
|
for (let i = 0; i < num_of_rows; i++) {
|
||||||
blocks.fill(null);
|
data.push([]);
|
||||||
let numOfRows2 = 1; //Math.abs(numOfRows2);
|
let rowBlock = new Array(fields.length);
|
||||||
let offset = 0;
|
for (let j = 0; j < fields.length; j++) {
|
||||||
if (numOfRows2 > 0){
|
rowBlock[j] = blocks[j][i];
|
||||||
for (let i = 0; i < fields.length; i++) {
|
|
||||||
if (!convertFunctions[fields[i]['type']] ) {
|
|
||||||
throw new errors.DatabaseError("Invalid data type returned from database");
|
|
||||||
}
|
}
|
||||||
blocks[i] = convertFunctions[fields[i]['type']](row, numOfRows2, fields[i]['bytes'], offset, isMicro);
|
data[data.length-1] = (rowBlock);
|
||||||
offset += fields[i]['bytes'] * numOfRows2;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {blocks:blocks, fields:fields};
|
return { data: data, fields: fields, result: result };
|
||||||
}
|
}
|
||||||
CTaosInterface.prototype.unsubscribe = function unsubscribe(subscription) {
|
CTaosInterface.prototype.unsubscribe = function unsubscribe(subscription) {
|
||||||
//void taos_unsubscribe(TAOS_SUB *tsub);
|
//void taos_unsubscribe(TAOS_SUB *tsub);
|
||||||
|
|
|
@ -405,18 +405,16 @@ TDengineCursor.prototype.getClientInfo = function getClientInfo() {
|
||||||
/**
|
/**
|
||||||
* Subscribe to a table from a database in TDengine.
|
* Subscribe to a table from a database in TDengine.
|
||||||
* @param {Object} config - A configuration object containing the configuration options for the subscription
|
* @param {Object} config - A configuration object containing the configuration options for the subscription
|
||||||
* @param {string} config.host - The host to subscribe to
|
* @param {string} config.restart - whether or not to continue a subscription if it already exits, otherwise start from beginning
|
||||||
* @param {string} config.user - The user to subscribe as
|
* @param {string} config.topic - The unique identifier of a subscription
|
||||||
* @param {string} config.password - The password for the said user
|
* @param {string} config.sql - A sql statement for data query
|
||||||
* @param {string} config.db - The db containing the table to subscribe to
|
* @param {string} config.interval - The pulling interval
|
||||||
* @param {string} config.table - The name of the table to subscribe to
|
|
||||||
* @param {number} config.time - The start time to start a subscription session
|
|
||||||
* @param {number} config.mseconds - The pulling period of the subscription session
|
|
||||||
* @return {Buffer} A buffer pointing to the subscription session handle
|
* @return {Buffer} A buffer pointing to the subscription session handle
|
||||||
* @since 1.3.0
|
* @since 1.3.0
|
||||||
*/
|
*/
|
||||||
TDengineCursor.prototype.subscribe = function subscribe(config) {
|
TDengineCursor.prototype.subscribe = function subscribe(config) {
|
||||||
return this._chandle.subscribe(config.host, config.user, config.password, config.db, config.table, config.time, config.mseconds);
|
let restart = config.restart ? 1 : 0;
|
||||||
|
return this._chandle.subscribe(this._connection._conn, restart, config.topic, config.sql, config.interval);
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* An infinite loop that consumes the latest data and calls a callback function that is provided.
|
* An infinite loop that consumes the latest data and calls a callback function that is provided.
|
||||||
|
@ -426,18 +424,8 @@ TDengineCursor.prototype.subscribe = function subscribe(config) {
|
||||||
*/
|
*/
|
||||||
TDengineCursor.prototype.consumeData = async function consumeData(subscription, callback) {
|
TDengineCursor.prototype.consumeData = async function consumeData(subscription, callback) {
|
||||||
while (true) {
|
while (true) {
|
||||||
let res = this._chandle.consume(subscription);
|
let { data, fields, result} = this._chandle.consume(subscription);
|
||||||
let data = [];
|
callback(data, fields, result);
|
||||||
let num_of_rows = res.blocks[0].length;
|
|
||||||
for (let j = 0; j < num_of_rows; j++) {
|
|
||||||
data.push([]);
|
|
||||||
let rowBlock = new Array(res.fields.length);
|
|
||||||
for (let k = 0; k < res.fields.length; k++) {
|
|
||||||
rowBlock[k] = res.blocks[k][j];
|
|
||||||
}
|
|
||||||
data[data.length-1] = rowBlock;
|
|
||||||
}
|
|
||||||
callback(data, res.fields, subscription);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "td-connector",
|
"name": "td-connector",
|
||||||
"version": "1.5.0",
|
"version": "1.6.1",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "td-connector",
|
"name": "td-connector",
|
||||||
"version": "1.5.0",
|
"version": "1.6.1",
|
||||||
"description": "A Node.js connector for TDengine.",
|
"description": "A Node.js connector for TDengine.",
|
||||||
"main": "tdengine.js",
|
"main": "tdengine.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
@ -33,12 +33,12 @@ for (let i = 0; i < 10000; i++) {
|
||||||
parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // Int
|
parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // Int
|
||||||
parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // BigInt
|
parseInt( R(-Math.pow(2,31) + 1 , Math.pow(2,31) - 1) ), // BigInt
|
||||||
parseFloat( R(-3.4E38, 3.4E38) ), // Float
|
parseFloat( R(-3.4E38, 3.4E38) ), // Float
|
||||||
parseFloat( R(-1.7E308, 1.7E308) ), // Double
|
parseFloat( R(-1.7E30, 1.7E30) ), // Double
|
||||||
"\"Long Binary\"", // Binary
|
"\"Long Binary\"", // Binary
|
||||||
parseInt( R(-32767, 32767) ), // Small Int
|
parseInt( R(-32767, 32767) ), // Small Int
|
||||||
parseInt( R(-127, 127) ), // Tiny Int
|
parseInt( R(-127, 127) ), // Tiny Int
|
||||||
randomBool(),
|
randomBool(),
|
||||||
"\"Nchars 一些中文字幕\""]; // Bool
|
"\"Nchars\""]; // Bool
|
||||||
c1.execute('insert into td_connector_test.all_types values(' + insertData.join(',') + ' );', {quiet:true});
|
c1.execute('insert into td_connector_test.all_types values(' + insertData.join(',') + ' );', {quiet:true});
|
||||||
if (i % 1000 == 0) {
|
if (i % 1000 == 0) {
|
||||||
console.log("Insert # " , i);
|
console.log("Insert # " , i);
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
const taos = require('../tdengine');
|
||||||
|
var conn = taos.connect({host:"127.0.0.1", user:"root", password:"taosdata", config:"/etc/taos",port:10});
|
||||||
|
var c1 = conn.cursor();
|
||||||
|
let stime = new Date();
|
||||||
|
let interval = 1000;
|
||||||
|
c1.execute('use td_connector_test');
|
||||||
|
let sub = c1.subscribe({
|
||||||
|
restart: true,
|
||||||
|
sql: "select AVG(_int) from td_connector_test.all_Types;",
|
||||||
|
topic: 'all_Types',
|
||||||
|
interval: 1000
|
||||||
|
});
|
||||||
|
|
||||||
|
c1.consumeData(sub, (data, fields) => {
|
||||||
|
console.log(data);
|
||||||
|
});
|
|
@ -157,8 +157,8 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char
|
||||||
if (rpcRsp.code != 0) {
|
if (rpcRsp.code != 0) {
|
||||||
dError("user:%s, auth msg received from mnode, error:%s", user, tstrerror(rpcRsp.code));
|
dError("user:%s, auth msg received from mnode, error:%s", user, tstrerror(rpcRsp.code));
|
||||||
} else {
|
} else {
|
||||||
dTrace("user:%s, auth msg received from mnode", user);
|
|
||||||
SDMAuthRsp *pRsp = rpcRsp.pCont;
|
SDMAuthRsp *pRsp = rpcRsp.pCont;
|
||||||
|
dTrace("user:%s, auth msg received from mnode", user);
|
||||||
memcpy(secret, pRsp->secret, TSDB_KEY_LEN);
|
memcpy(secret, pRsp->secret, TSDB_KEY_LEN);
|
||||||
memcpy(ckey, pRsp->ckey, TSDB_KEY_LEN);
|
memcpy(ckey, pRsp->ckey, TSDB_KEY_LEN);
|
||||||
*spi = pRsp->spi;
|
*spi = pRsp->spi;
|
||||||
|
|
|
@ -147,6 +147,8 @@ typedef struct tDataTypeDescriptor {
|
||||||
char algorithm, char *const buffer, int bufferSize);
|
char algorithm, char *const buffer, int bufferSize);
|
||||||
int (*decompFunc)(const char *const input, int compressedSize, const int nelements, char *const output,
|
int (*decompFunc)(const char *const input, int compressedSize, const int nelements, char *const output,
|
||||||
int outputSize, char algorithm, char *const buffer, int bufferSize);
|
int outputSize, char algorithm, char *const buffer, int bufferSize);
|
||||||
|
void (*getStatisFunc)(const TSKEY *primaryKey, const void *pData, int32_t numofrow, int64_t *min, int64_t *max,
|
||||||
|
int64_t *sum, int16_t *minindex, int16_t *maxindex, int16_t *numofnull);
|
||||||
} tDataTypeDescriptor;
|
} tDataTypeDescriptor;
|
||||||
|
|
||||||
extern tDataTypeDescriptor tDataTypeDesc[11];
|
extern tDataTypeDescriptor tDataTypeDesc[11];
|
||||||
|
|
|
@ -72,7 +72,7 @@ typedef void TsdbRepoT; // use void to hide implementation details from outside
|
||||||
int tsdbCreateRepo(char *rootDir, STsdbCfg *pCfg, void *limiter);
|
int tsdbCreateRepo(char *rootDir, STsdbCfg *pCfg, void *limiter);
|
||||||
int32_t tsdbDropRepo(TsdbRepoT *repo);
|
int32_t tsdbDropRepo(TsdbRepoT *repo);
|
||||||
TsdbRepoT *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH);
|
TsdbRepoT *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH);
|
||||||
int32_t tsdbCloseRepo(TsdbRepoT *repo);
|
int32_t tsdbCloseRepo(TsdbRepoT *repo, int toCommit);
|
||||||
int32_t tsdbConfigRepo(TsdbRepoT *repo, STsdbCfg *pCfg);
|
int32_t tsdbConfigRepo(TsdbRepoT *repo, STsdbCfg *pCfg);
|
||||||
|
|
||||||
// --------- TSDB TABLE DEFINITION
|
// --------- TSDB TABLE DEFINITION
|
||||||
|
@ -140,7 +140,7 @@ STableInfo *tsdbGetTableInfo(TsdbRepoT *pRepo, STableId tid);
|
||||||
*
|
*
|
||||||
* @return the number of points inserted, -1 for failure and the error number is set
|
* @return the number of points inserted, -1 for failure and the error number is set
|
||||||
*/
|
*/
|
||||||
int32_t tsdbInsertData(TsdbRepoT *pRepo, SSubmitMsg *pMsg);
|
int32_t tsdbInsertData(TsdbRepoT *repo, SSubmitMsg *pMsg, SShellSubmitRspMsg * pRsp) ;
|
||||||
|
|
||||||
// -- FOR QUERY TIME SERIES DATA
|
// -- FOR QUERY TIME SERIES DATA
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ typedef struct {
|
||||||
// if name is empty(name[0] is zero), get the file from index or after, used by master
|
// if name is empty(name[0] is zero), get the file from index or after, used by master
|
||||||
// if name is provided(name[0] is not zero), get the named file at the specified index, used by unsynced node
|
// if name is provided(name[0] is not zero), get the named file at the specified index, used by unsynced node
|
||||||
// it returns the file magic number and size, if file not there, magic shall be 0.
|
// it returns the file magic number and size, if file not there, magic shall be 0.
|
||||||
typedef uint32_t (*FGetFileInfo)(void *ahandle, char *name, uint32_t *index, int32_t *size);
|
typedef uint32_t (*FGetFileInfo)(void *ahandle, char *name, uint32_t *index, int32_t *size, uint64_t *fversion);
|
||||||
|
|
||||||
// get the wal file from index or after
|
// get the wal file from index or after
|
||||||
// return value, -1: error, 1:more wal files, 0:last WAL. if name[0]==0, no WAL file
|
// return value, -1: error, 1:more wal files, 0:last WAL. if name[0]==0, no WAL file
|
||||||
|
@ -73,7 +73,7 @@ typedef void (*FConfirmForward)(void *ahandle, void *mhandle, int32_t code);
|
||||||
typedef void (*FNotifyRole)(void *ahandle, int8_t role);
|
typedef void (*FNotifyRole)(void *ahandle, int8_t role);
|
||||||
|
|
||||||
// when data file is synced successfully, notity app
|
// when data file is synced successfully, notity app
|
||||||
typedef void (*FNotifyFileSynced)(void *ahandle);
|
typedef void (*FNotifyFileSynced)(void *ahandle, uint64_t fversion);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t vgId; // vgroup ID
|
int32_t vgId; // vgroup ID
|
||||||
|
|
|
@ -74,6 +74,7 @@ static int32_t mgmtDnodeActionDelete(SSdbOper *pOper) {
|
||||||
SDnodeObj *pDnode = pOper->pObj;
|
SDnodeObj *pDnode = pOper->pObj;
|
||||||
|
|
||||||
#ifndef _SYNC
|
#ifndef _SYNC
|
||||||
|
//TODO: drop dnode local
|
||||||
mgmtDropAllDnodeVgroups(pDnode);
|
mgmtDropAllDnodeVgroups(pDnode);
|
||||||
#endif
|
#endif
|
||||||
mgmtDropMnodeLocal(pDnode->dnodeId);
|
mgmtDropMnodeLocal(pDnode->dnodeId);
|
||||||
|
|
|
@ -185,7 +185,7 @@ void sdbUpdateMnodeRoles() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t sdbGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size) {
|
static uint32_t sdbGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size, uint64_t *fversion) {
|
||||||
sdbUpdateMnodeRoles();
|
sdbUpdateMnodeRoles();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -546,6 +546,7 @@ static void *mgmtGetSuperTableByUid(uint64_t uid) {
|
||||||
pIter = mgmtGetNextSuperTable(pIter, &pStable);
|
pIter = mgmtGetNextSuperTable(pIter, &pStable);
|
||||||
if (pStable == NULL) break;
|
if (pStable == NULL) break;
|
||||||
if (pStable->uid == uid) {
|
if (pStable->uid == uid) {
|
||||||
|
sdbFreeIter(pIter);
|
||||||
return pStable;
|
return pStable;
|
||||||
}
|
}
|
||||||
mgmtDecTableRef(pStable);
|
mgmtDecTableRef(pStable);
|
||||||
|
@ -1459,15 +1460,15 @@ static void mgmtProcessCreateChildTableMsg(SQueuedMsg *pMsg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t sid = taosAllocateId(pVgroup->idPool);
|
|
||||||
if (sid <= 0) {
|
|
||||||
mTrace("tables:%s, no enough sid in vgId:%d", pCreate->tableId, pVgroup->vgId);
|
|
||||||
mgmtCreateVgroup(mgmtCloneQueuedMsg(pMsg), pMsg->pDb);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pMsg->retry == 0) {
|
if (pMsg->retry == 0) {
|
||||||
if (pMsg->pTable == NULL) {
|
if (pMsg->pTable == NULL) {
|
||||||
|
int32_t sid = taosAllocateId(pVgroup->idPool);
|
||||||
|
if (sid <= 0) {
|
||||||
|
mTrace("tables:%s, no enough sid in vgId:%d", pCreate->tableId, pVgroup->vgId);
|
||||||
|
mgmtCreateVgroup(mgmtCloneQueuedMsg(pMsg), pMsg->pDb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pMsg->pTable = (STableObj *)mgmtDoCreateChildTable(pCreate, pVgroup, sid);
|
pMsg->pTable = (STableObj *)mgmtDoCreateChildTable(pCreate, pVgroup, sid);
|
||||||
mgmtIncTableRef(pMsg->pTable);
|
mgmtIncTableRef(pMsg->pTable);
|
||||||
}
|
}
|
||||||
|
|
|
@ -666,7 +666,6 @@ static SMDDropVnodeMsg *mgmtBuildDropVnodeMsg(int32_t vgId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgmtSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
|
void mgmtSendDropVnodeMsg(int32_t vgId, SRpcIpSet *ipSet, void *ahandle) {
|
||||||
mTrace("vgId:%d, send drop vnode msg, ahandle:%p", vgId, ahandle);
|
|
||||||
SMDDropVnodeMsg *pDrop = mgmtBuildDropVnodeMsg(vgId);
|
SMDDropVnodeMsg *pDrop = mgmtBuildDropVnodeMsg(vgId);
|
||||||
SRpcMsg rpcMsg = {
|
SRpcMsg rpcMsg = {
|
||||||
.handle = ahandle,
|
.handle = ahandle,
|
||||||
|
@ -682,6 +681,7 @@ static void mgmtSendDropVgroupMsg(SVgObj *pVgroup, void *ahandle) {
|
||||||
mTrace("vgId:%d, send drop all vnodes msg, ahandle:%p", pVgroup->vgId, ahandle);
|
mTrace("vgId:%d, send drop all vnodes msg, ahandle:%p", pVgroup->vgId, ahandle);
|
||||||
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
for (int32_t i = 0; i < pVgroup->numOfVnodes; ++i) {
|
||||||
SRpcIpSet ipSet = mgmtGetIpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
SRpcIpSet ipSet = mgmtGetIpSetFromIp(pVgroup->vnodeGid[i].pDnode->dnodeEp);
|
||||||
|
mTrace("vgId:%d, send drop vnode msg to dnode:%d, ahandle:%p", pVgroup->vgId, pVgroup->vnodeGid[i].dnodeId, ahandle);
|
||||||
mgmtSendDropVnodeMsg(pVgroup->vgId, &ipSet, ahandle);
|
mgmtSendDropVnodeMsg(pVgroup->vgId, &ipSet, ahandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -898,9 +898,9 @@ static void rpcNotifyClient(SRpcReqContext *pContext, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
if (pContext->pRsp) {
|
if (pContext->pRsp) {
|
||||||
// for synchronous API
|
// for synchronous API
|
||||||
tsem_post(pContext->pSem);
|
|
||||||
memcpy(pContext->pSet, &pContext->ipSet, sizeof(SRpcIpSet));
|
memcpy(pContext->pSet, &pContext->ipSet, sizeof(SRpcIpSet));
|
||||||
memcpy(pContext->pRsp, pMsg, sizeof(SRpcMsg));
|
memcpy(pContext->pRsp, pMsg, sizeof(SRpcMsg));
|
||||||
|
tsem_post(pContext->pSem);
|
||||||
} else {
|
} else {
|
||||||
// for asynchronous API
|
// for asynchronous API
|
||||||
SRpcIpSet *pIpSet = NULL;
|
SRpcIpSet *pIpSet = NULL;
|
||||||
|
|
|
@ -325,6 +325,13 @@ typedef struct {
|
||||||
int16_t len; // Column length // TODO: int16_t is not enough
|
int16_t len; // Column length // TODO: int16_t is not enough
|
||||||
int32_t type : 8;
|
int32_t type : 8;
|
||||||
int32_t offset : 24;
|
int32_t offset : 24;
|
||||||
|
int64_t sum;
|
||||||
|
int64_t max;
|
||||||
|
int64_t min;
|
||||||
|
int16_t maxIndex;
|
||||||
|
int16_t minIndex;
|
||||||
|
int16_t numOfNull;
|
||||||
|
char padding[2];
|
||||||
} SCompCol;
|
} SCompCol;
|
||||||
|
|
||||||
// TODO: Take recover into account
|
// TODO: Take recover into account
|
||||||
|
|
|
@ -29,7 +29,7 @@ static int32_t tsdbCheckAndSetDefaultCfg(STsdbCfg *pCfg);
|
||||||
static int32_t tsdbSetRepoEnv(STsdbRepo *pRepo);
|
static int32_t tsdbSetRepoEnv(STsdbRepo *pRepo);
|
||||||
static int32_t tsdbDestroyRepoEnv(STsdbRepo *pRepo);
|
static int32_t tsdbDestroyRepoEnv(STsdbRepo *pRepo);
|
||||||
// static int tsdbOpenMetaFile(char *tsdbDir);
|
// static int tsdbOpenMetaFile(char *tsdbDir);
|
||||||
static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now);
|
static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now, int * affectedrows);
|
||||||
static int32_t tsdbRestoreCfg(STsdbRepo *pRepo, STsdbCfg *pCfg);
|
static int32_t tsdbRestoreCfg(STsdbRepo *pRepo, STsdbCfg *pCfg);
|
||||||
static int32_t tsdbGetDataDirName(STsdbRepo *pRepo, char *fname);
|
static int32_t tsdbGetDataDirName(STsdbRepo *pRepo, char *fname);
|
||||||
static void * tsdbCommitData(void *arg);
|
static void * tsdbCommitData(void *arg);
|
||||||
|
@ -258,7 +258,7 @@ TsdbRepoT *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH) {
|
||||||
*
|
*
|
||||||
* @return 0 for success, -1 for failure and the error number is set
|
* @return 0 for success, -1 for failure and the error number is set
|
||||||
*/
|
*/
|
||||||
int32_t tsdbCloseRepo(TsdbRepoT *repo) {
|
int32_t tsdbCloseRepo(TsdbRepoT *repo, int toCommit) {
|
||||||
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
||||||
if (pRepo == NULL) return 0;
|
if (pRepo == NULL) return 0;
|
||||||
int id = pRepo->config.tsdbId;
|
int id = pRepo->config.tsdbId;
|
||||||
|
@ -285,7 +285,7 @@ int32_t tsdbCloseRepo(TsdbRepoT *repo) {
|
||||||
tsdbUnLockRepo(repo);
|
tsdbUnLockRepo(repo);
|
||||||
|
|
||||||
if (pRepo->appH.notifyStatus) pRepo->appH.notifyStatus(pRepo->appH.appH, TSDB_STATUS_COMMIT_START);
|
if (pRepo->appH.notifyStatus) pRepo->appH.notifyStatus(pRepo->appH.appH, TSDB_STATUS_COMMIT_START);
|
||||||
tsdbCommitData((void *)repo);
|
if (toCommit) tsdbCommitData((void *)repo);
|
||||||
|
|
||||||
tsdbCloseFileH(pRepo->tsdbFileH);
|
tsdbCloseFileH(pRepo->tsdbFileH);
|
||||||
|
|
||||||
|
@ -406,22 +406,23 @@ STableInfo *tsdbGetTableInfo(TsdbRepoT *pRepo, STableId tableId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: need to return the number of data inserted
|
// TODO: need to return the number of data inserted
|
||||||
int32_t tsdbInsertData(TsdbRepoT *repo, SSubmitMsg *pMsg) {
|
int32_t tsdbInsertData(TsdbRepoT *repo, SSubmitMsg *pMsg, SShellSubmitRspMsg * pRsp) {
|
||||||
SSubmitMsgIter msgIter;
|
SSubmitMsgIter msgIter;
|
||||||
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
||||||
|
|
||||||
tsdbInitSubmitMsgIter(pMsg, &msgIter);
|
tsdbInitSubmitMsgIter(pMsg, &msgIter);
|
||||||
SSubmitBlk *pBlock = NULL;
|
SSubmitBlk *pBlock = NULL;
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
|
int32_t affectedrows = 0;
|
||||||
|
|
||||||
TSKEY now = taosGetTimestamp(pRepo->config.precision);
|
TSKEY now = taosGetTimestamp(pRepo->config.precision);
|
||||||
|
|
||||||
while ((pBlock = tsdbGetSubmitMsgNext(&msgIter)) != NULL) {
|
while ((pBlock = tsdbGetSubmitMsgNext(&msgIter)) != NULL) {
|
||||||
if ((code = tsdbInsertDataToTable(repo, pBlock, now)) != TSDB_CODE_SUCCESS) {
|
if ((code = tsdbInsertDataToTable(repo, pBlock, now, &affectedrows)) != TSDB_CODE_SUCCESS) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pRsp->affectedRows = htonl(affectedrows);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,13 +841,13 @@ static int32_t tdInsertRowToTable(STsdbRepo *pRepo, SDataRow row, STable *pTable
|
||||||
|
|
||||||
pTable->mem->numOfPoints = tSkipListGetSize(pTable->mem->pData);
|
pTable->mem->numOfPoints = tSkipListGetSize(pTable->mem->pData);
|
||||||
|
|
||||||
tsdbTrace("vgId:%d, tid:%d, uid:" PRId64 ", a row is inserted to table! key:" PRId64,
|
tsdbTrace("vgId:%d, tid:%d, uid:%" PRId64 ", a row is inserted to table! key:%" PRId64,
|
||||||
pRepo->config.tsdbId, pTable->tableId.tid, pTable->tableId.uid, dataRowKey(row));
|
pRepo->config.tsdbId, pTable->tableId.tid, pTable->tableId.uid, dataRowKey(row));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now) {
|
static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now, int32_t *affectedrows) {
|
||||||
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
STsdbRepo *pRepo = (STsdbRepo *)repo;
|
||||||
|
|
||||||
STableId tableId = {.uid = pBlock->uid, .tid = pBlock->tid};
|
STableId tableId = {.uid = pBlock->uid, .tid = pBlock->tid};
|
||||||
|
@ -875,6 +876,7 @@ static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY
|
||||||
if (tdInsertRowToTable(pRepo, row, pTable) < 0) {
|
if (tdInsertRowToTable(pRepo, row, pTable) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
(*affectedrows)++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -1018,10 +1020,16 @@ static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SSkipListIterator **iters
|
||||||
|
|
||||||
// Create and open files for commit
|
// Create and open files for commit
|
||||||
tsdbGetDataDirName(pRepo, dataDir);
|
tsdbGetDataDirName(pRepo, dataDir);
|
||||||
if ((pGroup = tsdbCreateFGroup(pFileH, dataDir, fid, pCfg->maxTables)) == NULL) goto _err;
|
if ((pGroup = tsdbCreateFGroup(pFileH, dataDir, fid, pCfg->maxTables)) == NULL) {
|
||||||
|
tsdbError("vgId:%d, failed to create file group %d", pRepo->config.tsdbId, fid);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
// Open files for write/read
|
// Open files for write/read
|
||||||
if (tsdbSetAndOpenHelperFile(pHelper, pGroup) < 0) goto _err;
|
if (tsdbSetAndOpenHelperFile(pHelper, pGroup) < 0) {
|
||||||
|
tsdbError("vgId:%d, failed to set helper file", pRepo->config.tsdbId);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
// Loop to commit data in each table
|
// Loop to commit data in each table
|
||||||
for (int tid = 1; tid < pCfg->maxTables; tid++) {
|
for (int tid = 1; tid < pCfg->maxTables; tid++) {
|
||||||
|
@ -1058,13 +1066,22 @@ static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SSkipListIterator **iters
|
||||||
ASSERT(pDataCols->numOfPoints == 0);
|
ASSERT(pDataCols->numOfPoints == 0);
|
||||||
|
|
||||||
// Move the last block to the new .l file if neccessary
|
// Move the last block to the new .l file if neccessary
|
||||||
if (tsdbMoveLastBlockIfNeccessary(pHelper) < 0) goto _err;
|
if (tsdbMoveLastBlockIfNeccessary(pHelper) < 0) {
|
||||||
|
tsdbError("vgId:%d, failed to move last block", pRepo->config.tsdbId);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
// Write the SCompBlock part
|
// Write the SCompBlock part
|
||||||
if (tsdbWriteCompInfo(pHelper) < 0) goto _err;
|
if (tsdbWriteCompInfo(pHelper) < 0) {
|
||||||
|
tsdbError("vgId:%d, failed to write compInfo part", pRepo->config.tsdbId);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsdbWriteCompIdx(pHelper) < 0) goto _err;
|
if (tsdbWriteCompIdx(pHelper) < 0) {
|
||||||
|
tsdbError("vgId:%d, failed to write compIdx part", pRepo->config.tsdbId);
|
||||||
|
goto _err;
|
||||||
|
}
|
||||||
|
|
||||||
tsdbCloseHelperFile(pHelper, 0);
|
tsdbCloseHelperFile(pHelper, 0);
|
||||||
// TODO: make it atomic with some methods
|
// TODO: make it atomic with some methods
|
||||||
|
|
|
@ -356,11 +356,11 @@ int tsdbCreateTable(TsdbRepoT *repo, STableCfg *pCfg) {
|
||||||
// Register to meta
|
// Register to meta
|
||||||
if (newSuper) {
|
if (newSuper) {
|
||||||
tsdbAddTableToMeta(pMeta, super, true);
|
tsdbAddTableToMeta(pMeta, super, true);
|
||||||
tsdbTrace("vgId:%d, super table is created! uid:" PRId64, pRepo->config.tsdbId,
|
tsdbTrace("vgId:%d, super table is created! uid:%" PRId64, pRepo->config.tsdbId,
|
||||||
super->tableId.uid);
|
super->tableId.uid);
|
||||||
}
|
}
|
||||||
tsdbAddTableToMeta(pMeta, table, true);
|
tsdbAddTableToMeta(pMeta, table, true);
|
||||||
tsdbTrace("vgId:%d, table is created! tid:%d, uid:" PRId64, pRepo->config.tsdbId, table->tableId.tid,
|
tsdbTrace("vgId:%d, table is created! tid:%d, uid:%" PRId64, pRepo->config.tsdbId, table->tableId.tid,
|
||||||
table->tableId.uid);
|
table->tableId.uid);
|
||||||
|
|
||||||
// Write to meta file
|
// Write to meta file
|
||||||
|
@ -409,7 +409,7 @@ int tsdbDropTable(TsdbRepoT *repo, STableId tableId) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbTrace("vgId:%d, table is dropped! tid:%d, uid:" PRId64, pRepo->config.tsdbId, tableId.tid, tableId.uid);
|
tsdbTrace("vgId:%d, table is dropped! tid:%d, uid:%" PRId64, pRepo->config.tsdbId, tableId.tid, tableId.uid);
|
||||||
if (tsdbRemoveTableFromMeta(pMeta, pTable) < 0) return -1;
|
if (tsdbRemoveTableFromMeta(pMeta, pTable) < 0) return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -703,6 +703,11 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa
|
||||||
|
|
||||||
pCompCol->colId = pDataCol->colId;
|
pCompCol->colId = pDataCol->colId;
|
||||||
pCompCol->type = pDataCol->type;
|
pCompCol->type = pDataCol->type;
|
||||||
|
if (tDataTypeDesc[pDataCol->type].getStatisFunc) {
|
||||||
|
(*tDataTypeDesc[pDataCol->type].getStatisFunc)(
|
||||||
|
(TSKEY *)(pDataCols->cols[0].pData), pDataCol->pData, rowsToWrite, &(pCompCol->min), &(pCompCol->max),
|
||||||
|
&(pCompCol->sum), &(pCompCol->minIndex), &(pCompCol->maxIndex), &(pCompCol->numOfNull));
|
||||||
|
}
|
||||||
nColsNotAllNull++;
|
nColsNotAllNull++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@ typedef struct {
|
||||||
int32_t refCount; // reference count
|
int32_t refCount; // reference count
|
||||||
int status;
|
int status;
|
||||||
int8_t role;
|
int8_t role;
|
||||||
int64_t version;
|
int64_t version; // current version
|
||||||
int64_t savedVersion;
|
int64_t fversion; // version on saved data file
|
||||||
void *wqueue;
|
void *wqueue;
|
||||||
void *rqueue;
|
void *rqueue;
|
||||||
void *wal;
|
void *wal;
|
||||||
|
@ -46,11 +46,11 @@ typedef struct {
|
||||||
void *sync;
|
void *sync;
|
||||||
void *events;
|
void *events;
|
||||||
void *cq; // continuous query
|
void *cq; // continuous query
|
||||||
int32_t cfgVersion;
|
int32_t cfgVersion;
|
||||||
STsdbCfg tsdbCfg;
|
STsdbCfg tsdbCfg;
|
||||||
SSyncCfg syncCfg;
|
SSyncCfg syncCfg;
|
||||||
SWalCfg walCfg;
|
SWalCfg walCfg;
|
||||||
char * rootDir;
|
char *rootDir;
|
||||||
} SVnodeObj;
|
} SVnodeObj;
|
||||||
|
|
||||||
int vnodeWriteToQueue(void *param, void *pHead, int type);
|
int vnodeWriteToQueue(void *param, void *pHead, int type);
|
||||||
|
|
|
@ -37,10 +37,10 @@ static int32_t vnodeReadCfg(SVnodeObj *pVnode);
|
||||||
static int32_t vnodeSaveVersion(SVnodeObj *pVnode);
|
static int32_t vnodeSaveVersion(SVnodeObj *pVnode);
|
||||||
static bool vnodeReadVersion(SVnodeObj *pVnode);
|
static bool vnodeReadVersion(SVnodeObj *pVnode);
|
||||||
static int vnodeProcessTsdbStatus(void *arg, int status);
|
static int vnodeProcessTsdbStatus(void *arg, int status);
|
||||||
static uint32_t vnodeGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size);
|
static uint32_t vnodeGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size, uint64_t *fversion);
|
||||||
static int vnodeGetWalInfo(void *ahandle, char *name, uint32_t *index);
|
static int vnodeGetWalInfo(void *ahandle, char *name, uint32_t *index);
|
||||||
static void vnodeNotifyRole(void *ahandle, int8_t role);
|
static void vnodeNotifyRole(void *ahandle, int8_t role);
|
||||||
static void vnodeNotifyFileSynced(void *ahandle);
|
static void vnodeNotifyFileSynced(void *ahandle, uint64_t fversion);
|
||||||
|
|
||||||
static pthread_once_t vnodeModuleInit = PTHREAD_ONCE_INIT;
|
static pthread_once_t vnodeModuleInit = PTHREAD_ONCE_INIT;
|
||||||
|
|
||||||
|
@ -119,9 +119,14 @@ int32_t vnodeCreate(SMDCreateVnodeMsg *pVnodeCfg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t vnodeDrop(int32_t vgId) {
|
int32_t vnodeDrop(int32_t vgId) {
|
||||||
|
if (tsDnodeVnodesHash == NULL) {
|
||||||
|
vTrace("vgId:%d, failed to drop, vgId not exist", vgId);
|
||||||
|
return TSDB_CODE_INVALID_VGROUP_ID;
|
||||||
|
}
|
||||||
|
|
||||||
SVnodeObj **ppVnode = (SVnodeObj **)taosHashGet(tsDnodeVnodesHash, (const char *)&vgId, sizeof(int32_t));
|
SVnodeObj **ppVnode = (SVnodeObj **)taosHashGet(tsDnodeVnodesHash, (const char *)&vgId, sizeof(int32_t));
|
||||||
if (ppVnode == NULL || *ppVnode == NULL) {
|
if (ppVnode == NULL || *ppVnode == NULL) {
|
||||||
vTrace("vgId:%d, failed to drop, vgId not exist", vgId);
|
vTrace("vgId:%d, failed to drop, vgId not find", vgId);
|
||||||
return TSDB_CODE_INVALID_VGROUP_ID;
|
return TSDB_CODE_INVALID_VGROUP_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,6 +196,7 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
|
||||||
}
|
}
|
||||||
|
|
||||||
vnodeReadVersion(pVnode);
|
vnodeReadVersion(pVnode);
|
||||||
|
pVnode->fversion = pVnode->version;
|
||||||
|
|
||||||
pVnode->wqueue = dnodeAllocateWqueue(pVnode);
|
pVnode->wqueue = dnodeAllocateWqueue(pVnode);
|
||||||
pVnode->rqueue = dnodeAllocateRqueue(pVnode);
|
pVnode->rqueue = dnodeAllocateRqueue(pVnode);
|
||||||
|
@ -359,7 +365,6 @@ void vnodeBuildStatusMsg(void *param) {
|
||||||
if (*pVnode == NULL) continue;
|
if (*pVnode == NULL) continue;
|
||||||
|
|
||||||
vnodeBuildVloadMsg(*pVnode, pStatus);
|
vnodeBuildVloadMsg(*pVnode, pStatus);
|
||||||
pStatus++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
taosHashDestroyIter(pIter);
|
taosHashDestroyIter(pIter);
|
||||||
|
@ -376,7 +381,7 @@ static void vnodeCleanUp(SVnodeObj *pVnode) {
|
||||||
cqClose(pVnode->cq);
|
cqClose(pVnode->cq);
|
||||||
pVnode->cq = NULL;
|
pVnode->cq = NULL;
|
||||||
|
|
||||||
tsdbCloseRepo(pVnode->tsdb);
|
tsdbCloseRepo(pVnode->tsdb, 1);
|
||||||
pVnode->tsdb = NULL;
|
pVnode->tsdb = NULL;
|
||||||
|
|
||||||
walClose(pVnode->wal);
|
walClose(pVnode->wal);
|
||||||
|
@ -390,7 +395,7 @@ static int vnodeProcessTsdbStatus(void *arg, int status) {
|
||||||
SVnodeObj *pVnode = arg;
|
SVnodeObj *pVnode = arg;
|
||||||
|
|
||||||
if (status == TSDB_STATUS_COMMIT_START) {
|
if (status == TSDB_STATUS_COMMIT_START) {
|
||||||
pVnode->savedVersion = pVnode->version;
|
pVnode->fversion = pVnode->version;
|
||||||
return walRenew(pVnode->wal);
|
return walRenew(pVnode->wal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,8 +405,9 @@ static int vnodeProcessTsdbStatus(void *arg, int status) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t vnodeGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size) {
|
static uint32_t vnodeGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size, uint64_t *fversion) {
|
||||||
SVnodeObj *pVnode = ahandle;
|
SVnodeObj *pVnode = ahandle;
|
||||||
|
*fversion = pVnode->fversion;
|
||||||
return tsdbGetFileInfo(pVnode->tsdb, name, index, size);
|
return tsdbGetFileInfo(pVnode->tsdb, name, index, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,6 +418,7 @@ static int vnodeGetWalInfo(void *ahandle, char *name, uint32_t *index) {
|
||||||
|
|
||||||
static void vnodeNotifyRole(void *ahandle, int8_t role) {
|
static void vnodeNotifyRole(void *ahandle, int8_t role) {
|
||||||
SVnodeObj *pVnode = ahandle;
|
SVnodeObj *pVnode = ahandle;
|
||||||
|
vPrint("vgId:%d, sync role changed from %d to %d", pVnode->vgId, pVnode->role, role);
|
||||||
pVnode->role = role;
|
pVnode->role = role;
|
||||||
|
|
||||||
if (pVnode->role == TAOS_SYNC_ROLE_MASTER)
|
if (pVnode->role == TAOS_SYNC_ROLE_MASTER)
|
||||||
|
@ -420,14 +427,18 @@ static void vnodeNotifyRole(void *ahandle, int8_t role) {
|
||||||
cqStop(pVnode->cq);
|
cqStop(pVnode->cq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vnodeNotifyFileSynced(void *ahandle) {
|
static void vnodeNotifyFileSynced(void *ahandle, uint64_t fversion) {
|
||||||
SVnodeObj *pVnode = ahandle;
|
SVnodeObj *pVnode = ahandle;
|
||||||
vTrace("vgId:%d, data file is synced", pVnode->vgId);
|
vTrace("vgId:%d, data file is synced", pVnode->vgId);
|
||||||
|
|
||||||
|
pVnode->fversion = fversion;
|
||||||
|
pVnode->version = fversion;
|
||||||
|
vnodeSaveVersion(pVnode);
|
||||||
|
|
||||||
char rootDir[128] = "\0";
|
char rootDir[128] = "\0";
|
||||||
sprintf(rootDir, "%s/tsdb", pVnode->rootDir);
|
sprintf(rootDir, "%s/tsdb", pVnode->rootDir);
|
||||||
// clsoe tsdb, then open tsdb
|
// clsoe tsdb, then open tsdb
|
||||||
tsdbCloseRepo(pVnode->tsdb);
|
tsdbCloseRepo(pVnode->tsdb, 0);
|
||||||
STsdbAppH appH = {0};
|
STsdbAppH appH = {0};
|
||||||
appH.appH = (void *)pVnode;
|
appH.appH = (void *)pVnode;
|
||||||
appH.notifyStatus = vnodeProcessTsdbStatus;
|
appH.notifyStatus = vnodeProcessTsdbStatus;
|
||||||
|
@ -701,14 +712,14 @@ static int32_t vnodeSaveVersion(SVnodeObj *pVnode) {
|
||||||
char * content = calloc(1, maxLen + 1);
|
char * content = calloc(1, maxLen + 1);
|
||||||
|
|
||||||
len += snprintf(content + len, maxLen - len, "{\n");
|
len += snprintf(content + len, maxLen - len, "{\n");
|
||||||
len += snprintf(content + len, maxLen - len, " \"version\": %" PRId64 "\n", pVnode->savedVersion);
|
len += snprintf(content + len, maxLen - len, " \"version\": %" PRId64 "\n", pVnode->fversion);
|
||||||
len += snprintf(content + len, maxLen - len, "}\n");
|
len += snprintf(content + len, maxLen - len, "}\n");
|
||||||
|
|
||||||
fwrite(content, 1, len, fp);
|
fwrite(content, 1, len, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
free(content);
|
free(content);
|
||||||
|
|
||||||
vPrint("vgId:%d, save vnode version:%" PRId64 " succeed", pVnode->vgId, pVnode->savedVersion);
|
vPrint("vgId:%d, save vnode version:%" PRId64 " succeed", pVnode->vgId, pVnode->fversion);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,17 +91,16 @@ static int32_t vnodeProcessSubmitMsg(SVnodeObj *pVnode, void *pCont, SRspRet *pR
|
||||||
// save insert result into item
|
// save insert result into item
|
||||||
|
|
||||||
vTrace("vgId:%d, submit msg is processed", pVnode->vgId);
|
vTrace("vgId:%d, submit msg is processed", pVnode->vgId);
|
||||||
code = tsdbInsertData(pVnode->tsdb, pCont);
|
|
||||||
|
|
||||||
pRet->len = sizeof(SShellSubmitRspMsg);
|
pRet->len = sizeof(SShellSubmitRspMsg);
|
||||||
pRet->rsp = rpcMallocCont(pRet->len);
|
pRet->rsp = rpcMallocCont(pRet->len);
|
||||||
SShellSubmitRspMsg *pRsp = pRet->rsp;
|
SShellSubmitRspMsg *pRsp = pRet->rsp;
|
||||||
|
code = tsdbInsertData(pVnode->tsdb, pCont, pRsp);
|
||||||
|
pRsp->numOfFailedBlocks = 0; //TODO
|
||||||
|
//pRet->len += pRsp->numOfFailedBlocks * sizeof(SShellSubmitRspBlock); //TODO
|
||||||
pRsp->code = 0;
|
pRsp->code = 0;
|
||||||
pRsp->numOfRows = htonl(1);
|
pRsp->numOfRows = htonl(1);
|
||||||
pRsp->affectedRows = htonl(1);
|
|
||||||
pRsp->numOfFailedBlocks = 0;
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
###################################################################
|
||||||
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is proprietary and confidential to TAOS Technologies.
|
||||||
|
# No part of this file may be reproduced, stored, transmitted,
|
||||||
|
# disclosed or used in any form or by any means other than as
|
||||||
|
# expressly provided by the written permission from Jianhui Tao
|
||||||
|
#
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import taos
|
||||||
|
from util.log import tdLog
|
||||||
|
from util.cases import tdCases
|
||||||
|
from util.sql import tdSql
|
||||||
|
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
def init(self, conn):
|
||||||
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
|
tdSql.init(conn.cursor())
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
tdSql.prepare()
|
||||||
|
|
||||||
|
print("==============step1")
|
||||||
|
tdSql.execute(
|
||||||
|
"create table if not exists st (ts timestamp, tagtype int) tags(dev nchar(50))")
|
||||||
|
tdSql.execute(
|
||||||
|
'CREATE TABLE if not exists dev_001 using st tags("dev_01")')
|
||||||
|
tdSql.execute(
|
||||||
|
'CREATE TABLE if not exists dev_002 using st tags("dev_02")')
|
||||||
|
|
||||||
|
print("==============step2")
|
||||||
|
|
||||||
|
tdSql.execute(
|
||||||
|
"""INSERT INTO dev_001(ts, tagtype) VALUES('2020-05-13 10:00:00.000', 1),
|
||||||
|
('2020-05-13 10:00:00.001', 1)
|
||||||
|
dev_002 VALUES('2020-05-13 10:00:00.001', 1)""")
|
||||||
|
|
||||||
|
tdSql.query("select * from db.st where ts='2020-05-13 10:00:00.000'")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -0,0 +1,56 @@
|
||||||
|
###################################################################
|
||||||
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is proprietary and confidential to TAOS Technologies.
|
||||||
|
# No part of this file may be reproduced, stored, transmitted,
|
||||||
|
# disclosed or used in any form or by any means other than as
|
||||||
|
# expressly provided by the written permission from Jianhui Tao
|
||||||
|
#
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import taos
|
||||||
|
from util.log import tdLog
|
||||||
|
from util.cases import tdCases
|
||||||
|
from util.sql import tdSql
|
||||||
|
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
def init(self, conn):
|
||||||
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
|
tdSql.init(conn.cursor())
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
tdSql.prepare()
|
||||||
|
|
||||||
|
print("==============step1")
|
||||||
|
tdSql.execute(
|
||||||
|
"create table if not exists st (ts timestamp, tagtype int) tags(dev nchar(50))")
|
||||||
|
tdSql.execute(
|
||||||
|
'CREATE TABLE if not exists dev_001 using st tags("dev_01")')
|
||||||
|
tdSql.execute(
|
||||||
|
'CREATE TABLE if not exists dev_002 using st tags("dev_02")')
|
||||||
|
|
||||||
|
print("==============step2")
|
||||||
|
|
||||||
|
tdSql.execute(
|
||||||
|
"""INSERT INTO dev_001(ts, tagtype) VALUES('2020-05-13 10:00:00.000', 1),
|
||||||
|
('2020-05-13 10:00:00.001', 1)
|
||||||
|
dev_002 VALUES('2020-05-13 10:00:00.001', 1)""")
|
||||||
|
|
||||||
|
tdSql.query("select * from db.st where dev='dev_01'")
|
||||||
|
tdSql.checkRows(2)
|
||||||
|
|
||||||
|
tdSql.query("select * from db.st where dev='dev_02'")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -38,9 +38,9 @@ class TDSimClient:
|
||||||
tdLog.exit(cmd)
|
tdLog.exit(cmd)
|
||||||
|
|
||||||
def deploy(self):
|
def deploy(self):
|
||||||
self.logDir = "%s/sim/psim/log" % (self.path,)
|
self.logDir = "%s/pysim/psim/log" % (self.path,)
|
||||||
self.cfgDir = "%s/sim/psim/cfg" % (self.path)
|
self.cfgDir = "%s/pysim/psim/cfg" % (self.path)
|
||||||
self.cfgPath = "%s/sim/psim/cfg/taos.cfg" % (self.path)
|
self.cfgPath = "%s/pysim/psim/cfg/taos.cfg" % (self.path)
|
||||||
|
|
||||||
cmd = "rm -rf " + self.logDir
|
cmd = "rm -rf " + self.logDir
|
||||||
if os.system(cmd) != 0:
|
if os.system(cmd) != 0:
|
||||||
|
@ -100,10 +100,10 @@ class TDDnode:
|
||||||
self.valgrind = value
|
self.valgrind = value
|
||||||
|
|
||||||
def deploy(self):
|
def deploy(self):
|
||||||
self.logDir = "%s/sim/dnode%d/log" % (self.path, self.index)
|
self.logDir = "%s/pysim/dnode%d/log" % (self.path, self.index)
|
||||||
self.dataDir = "%s/sim/dnode%d/data" % (self.path, self.index)
|
self.dataDir = "%s/pysim/dnode%d/data" % (self.path, self.index)
|
||||||
self.cfgDir = "%s/sim/dnode%d/cfg" % (self.path, self.index)
|
self.cfgDir = "%s/pysim/dnode%d/cfg" % (self.path, self.index)
|
||||||
self.cfgPath = "%s/sim/dnode%d/cfg/taos.cfg" % (self.path, self.index)
|
self.cfgPath = "%s/pysim/dnode%d/cfg/taos.cfg" % (self.path, self.index)
|
||||||
|
|
||||||
cmd = "rm -rf " + self.dataDir
|
cmd = "rm -rf " + self.dataDir
|
||||||
if os.system(cmd) != 0:
|
if os.system(cmd) != 0:
|
||||||
|
@ -177,21 +177,42 @@ class TDDnode:
|
||||||
(self.index, self.cfgPath))
|
(self.index, self.cfgPath))
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
binPath = os.path.dirname(os.path.realpath(__file__))
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
binPath = binPath + "/../../../debug/"
|
binPath = ""
|
||||||
binPath = os.path.realpath(binPath)
|
|
||||||
binPath += "/build/bin/"
|
if ("TDinternal" in selfPath):
|
||||||
|
projPath = selfPath + "/../../../../"
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk(projPath):
|
||||||
|
if ("taosd" in files):
|
||||||
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
|
if ("community" not in rootRealPath):
|
||||||
|
binPath = os.path.join(root, "taosd")
|
||||||
|
break;
|
||||||
|
else:
|
||||||
|
projPath = selfPath + "/../../../"
|
||||||
|
for root, dirs, files in os.walk(projPath):
|
||||||
|
if ("taosd" in files):
|
||||||
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
|
if ("packaging" not in rootRealPath):
|
||||||
|
binPath = os.path.join(root, "taosd")
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (binPath == ""):
|
||||||
|
tdLog.exit("taosd not found!s")
|
||||||
|
else:
|
||||||
|
tdLog.notice("taosd found in %s" % rootRealPath)
|
||||||
|
|
||||||
if self.deployed == 0:
|
if self.deployed == 0:
|
||||||
tdLog.exit("dnode:%d is not deployed" % (self.index))
|
tdLog.exit("dnode:%d is not deployed" % (self.index))
|
||||||
|
|
||||||
if self.valgrind == 0:
|
if self.valgrind == 0:
|
||||||
cmd = "nohup %staosd -c %s > /dev/null 2>&1 & " % (
|
cmd = "nohup %s -c %s > /dev/null 2>&1 & " % (
|
||||||
binPath, self.cfgDir)
|
binPath, self.cfgDir)
|
||||||
else:
|
else:
|
||||||
valgrindCmdline = "valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
|
valgrindCmdline = "valgrind --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
|
||||||
|
|
||||||
cmd = "nohup %s %staosd -c %s 2>&1 & " % (
|
cmd = "nohup %s %s -c %s 2>&1 & " % (
|
||||||
valgrindCmdline, binPath, self.cfgDir)
|
valgrindCmdline, binPath, self.cfgDir)
|
||||||
|
|
||||||
print(cmd)
|
print(cmd)
|
||||||
|
@ -268,11 +289,11 @@ class TDDnode:
|
||||||
tdLog.exit(cmd)
|
tdLog.exit(cmd)
|
||||||
|
|
||||||
def getDnodeRootDir(self, index):
|
def getDnodeRootDir(self, index):
|
||||||
dnodeRootDir = "%s/sim/psim/dnode%d" % (self.path, index)
|
dnodeRootDir = "%s/pysim/psim/dnode%d" % (self.path, index)
|
||||||
return dnodeRootDir
|
return dnodeRootDir
|
||||||
|
|
||||||
def getDnodesRootDir(self):
|
def getDnodesRootDir(self):
|
||||||
dnodesRootDir = "%s/sim/psim" % (self.path)
|
dnodesRootDir = "%s/pysim/psim" % (self.path)
|
||||||
return dnodesRootDir
|
return dnodesRootDir
|
||||||
|
|
||||||
|
|
||||||
|
@ -417,7 +438,7 @@ class TDDnodes:
|
||||||
# tdLog.exit(cmd)
|
# tdLog.exit(cmd)
|
||||||
|
|
||||||
def getDnodesRootDir(self):
|
def getDnodesRootDir(self):
|
||||||
dnodesRootDir = "%s/sim" % (self.path)
|
dnodesRootDir = "%s/pysim" % (self.path)
|
||||||
return dnodesRootDir
|
return dnodesRootDir
|
||||||
|
|
||||||
def getSimCfgPath(self):
|
def getSimCfgPath(self):
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/cfg.sh -n dnode1 -c wallevel -v 2
|
||||||
|
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 10
|
||||||
|
|
||||||
|
print ========= start dnodes
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
print ======== step1
|
||||||
|
sql create database db blocks 2 maxtables 1000
|
||||||
|
sql create table db.mt (ts timestamp, tbcol int) TAGS(tgcol int)
|
||||||
|
|
||||||
|
$tbPrefix = db.t
|
||||||
|
$i = 0
|
||||||
|
while $i < 2000
|
||||||
|
$tb = $tbPrefix . $i
|
||||||
|
sql create table $tb using db.mt tags( $i )
|
||||||
|
$i = $i + 1
|
||||||
|
endw
|
||||||
|
|
||||||
|
sql show db.vgroups
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
return
|
||||||
|
print ======== step2
|
||||||
|
sleep 1000
|
||||||
|
sql drop database db
|
||||||
|
sql show databases
|
||||||
|
if $rows != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sleep 1000
|
||||||
|
sql show dnodes
|
||||||
|
print dnode1 openVnodes $data2_1
|
||||||
|
if $data2_1 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ======= step3
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
sleep 1000
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
step3:
|
||||||
|
$x = $x + 1
|
||||||
|
sleep 2000
|
||||||
|
if $x == 30 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show mnodes
|
||||||
|
print dnode1 role $data2_1
|
||||||
|
if $data2_1 != master then
|
||||||
|
goto step3
|
||||||
|
endi
|
||||||
|
|
||||||
|
sleep 1000
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -15,7 +15,7 @@ cd ../../../debug; make
|
||||||
./test.sh -f general/cache/restart_metrics.sim
|
./test.sh -f general/cache/restart_metrics.sim
|
||||||
./test.sh -f general/cache/restart_table.sim
|
./test.sh -f general/cache/restart_table.sim
|
||||||
|
|
||||||
./test.sh -f general/connection/connections.sim
|
./test.sh -f general/connection/connection.sim
|
||||||
|
|
||||||
./test.sh -f general/column/commit.sim
|
./test.sh -f general/column/commit.sim
|
||||||
./test.sh -f general/column/metrics.sim
|
./test.sh -f general/column/metrics.sim
|
||||||
|
@ -49,6 +49,7 @@ cd ../../../debug; make
|
||||||
./test.sh -f general/db/basic3.sim
|
./test.sh -f general/db/basic3.sim
|
||||||
./test.sh -f general/db/basic4.sim
|
./test.sh -f general/db/basic4.sim
|
||||||
./test.sh -f general/db/basic5.sim
|
./test.sh -f general/db/basic5.sim
|
||||||
|
./test.sh -f general/db/delete.sim
|
||||||
./test.sh -f general/db/delete_reuse1.sim
|
./test.sh -f general/db/delete_reuse1.sim
|
||||||
./test.sh -f general/db/delete_reuse2.sim
|
./test.sh -f general/db/delete_reuse2.sim
|
||||||
./test.sh -f general/db/delete_reusevnode.sim
|
./test.sh -f general/db/delete_reusevnode.sim
|
||||||
|
@ -243,15 +244,15 @@ cd ../../../debug; make
|
||||||
#slguan ./test.sh -u -f unique/big/maxvnodes.sim
|
#slguan ./test.sh -u -f unique/big/maxvnodes.sim
|
||||||
./test.sh -u -f unique/big/tcp.sim
|
./test.sh -u -f unique/big/tcp.sim
|
||||||
|
|
||||||
##./test.sh -u -f unique/cluster/balance1.sim
|
#jeff ./test.sh -u -f unique/cluster/balance1.sim
|
||||||
##./test.sh -u -f unique/cluster/balance2.sim
|
#jeff ./test.sh -u -f unique/cluster/balance2.sim
|
||||||
##./test.sh -u -f unique/cluster/balance3.sim
|
#jeff ./test.sh -u -f unique/cluster/balance3.sim
|
||||||
#./test.sh -u -f unique/cluster/cache.sim
|
#./test.sh -u -f unique/cluster/cache.sim
|
||||||
|
|
||||||
./test.sh -u -f unique/column/replica3.sim
|
./test.sh -u -f unique/column/replica3.sim
|
||||||
|
|
||||||
#./test.sh -u -f unique/db/commit.sim
|
#hongze ./test.sh -u -f unique/db/commit.sim
|
||||||
#./test.sh -u -f unique/db/delete.sim
|
./test.sh -u -f unique/db/delete.sim
|
||||||
#./test.sh -u -f unique/db/delete_part.sim
|
#./test.sh -u -f unique/db/delete_part.sim
|
||||||
##./test.sh -u -f unique/db/replica_add12.sim
|
##./test.sh -u -f unique/db/replica_add12.sim
|
||||||
##./test.sh -u -f unique/db/replica_add13.sim
|
##./test.sh -u -f unique/db/replica_add13.sim
|
||||||
|
@ -267,12 +268,12 @@ cd ../../../debug; make
|
||||||
##./test.sh -u -f unique/dnode/balancex.sim
|
##./test.sh -u -f unique/dnode/balancex.sim
|
||||||
##./test.sh -u -f unique/dnode/offline1.sim
|
##./test.sh -u -f unique/dnode/offline1.sim
|
||||||
##./test.sh -u -f unique/dnode/offline2.sim
|
##./test.sh -u -f unique/dnode/offline2.sim
|
||||||
#./test.sh -u -f unique/dnode/remove1.sim
|
./test.sh -u -f unique/dnode/remove1.sim
|
||||||
#./test.sh -u -f unique/dnode/remove2.sim
|
#hongze ./test.sh -u -f unique/dnode/remove2.sim
|
||||||
#./test.sh -u -f unique/dnode/vnode_clean.sim
|
./test.sh -u -f unique/dnode/vnode_clean.sim
|
||||||
|
|
||||||
##./test.sh -u -f unique/http/admin.sim
|
./test.sh -u -f unique/http/admin.sim
|
||||||
##./test.sh -u -f unique/http/opentsdb.sim
|
./test.sh -u -f unique/http/opentsdb.sim
|
||||||
|
|
||||||
#./test.sh -u -f unique/import/replica2.sim
|
#./test.sh -u -f unique/import/replica2.sim
|
||||||
#./test.sh -u -f unique/import/replica3.sim
|
#./test.sh -u -f unique/import/replica3.sim
|
||||||
|
@ -293,8 +294,7 @@ cd ../../../debug; make
|
||||||
./test.sh -u -f unique/mnode/mgmt26.sim
|
./test.sh -u -f unique/mnode/mgmt26.sim
|
||||||
./test.sh -u -f unique/mnode/mgmt33.sim
|
./test.sh -u -f unique/mnode/mgmt33.sim
|
||||||
./test.sh -u -f unique/mnode/mgmt34.sim
|
./test.sh -u -f unique/mnode/mgmt34.sim
|
||||||
#./test.sh -u -f unique/mnode/mgmtr2.sim
|
./test.sh -u -f unique/mnode/mgmtr2.sim
|
||||||
#./test.sh -u -f unique/mnode/secondIp.sim
|
|
||||||
|
|
||||||
##./test.sh -u -f unique/table/delete_part.sim
|
##./test.sh -u -f unique/table/delete_part.sim
|
||||||
|
|
||||||
|
@ -303,6 +303,6 @@ cd ../../../debug; make
|
||||||
#./test.sh -u -f unique/vnode/replica2_basic.sim
|
#./test.sh -u -f unique/vnode/replica2_basic.sim
|
||||||
./test.sh -u -f unique/vnode/replica2_basic2.sim
|
./test.sh -u -f unique/vnode/replica2_basic2.sim
|
||||||
#./test.sh -u -f unique/vnode/replica2_repeat.sim
|
#./test.sh -u -f unique/vnode/replica2_repeat.sim
|
||||||
##./test.sh -u -f unique/vnode/replica3_basic.sim
|
#hongze ./test.sh -u -f unique/vnode/replica3_basic.sim
|
||||||
#./test.sh -u -f unique/vnode/replica3_repeat.sim
|
#./test.sh -u -f unique/vnode/replica3_repeat.sim
|
||||||
#./test.sh -u -f unique/vnode/replica3_vgroup.sim
|
#./test.sh -u -f unique/vnode/replica3_vgroup.sim
|
||||||
|
|
|
@ -72,8 +72,8 @@ sql import into tb values (now - 10d , -10 )
|
||||||
sql import into tb values (now - 11d , -11 )
|
sql import into tb values (now - 11d , -11 )
|
||||||
|
|
||||||
sql select * from tb order by ts desc
|
sql select * from tb order by ts desc
|
||||||
print ===> rows $rows
|
print ===> rows $rows expect $num
|
||||||
print ===> last $data01
|
print ===> last $data01 expect $data01
|
||||||
|
|
||||||
if $rows != $num then
|
if $rows != $num then
|
||||||
return -1
|
return -1
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/deploy.sh -n dnode2 -i 2
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
system sh/deploy.sh -n dnode3 -i 3
|
system sh/deploy.sh -n dnode3 -i 3
|
||||||
|
@ -18,25 +15,30 @@ system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 10
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
sql create dnode $hostname2
|
sql create dnode $hostname2
|
||||||
system sh/exec_up.sh -n dnode2 -s start
|
system sh/exec_up.sh -n dnode2 -s start
|
||||||
sql create dnode $hostname3
|
sql create dnode $hostname3
|
||||||
system sh/exec_up.sh -n dnode3 -s start
|
system sh/exec_up.sh -n dnode3 -s start
|
||||||
sleep 3000
|
|
||||||
|
|
||||||
print ======== step1
|
print ======== step1
|
||||||
sql create database db replica 3 ablocks 2 tblocks 5 maxtables 10000
|
sql create database db replica 3 blocks 2 maxtables 1000
|
||||||
sql create table db.mt (ts timestamp, tbcol int) TAGS(tgcol int)
|
sql create table db.mt (ts timestamp, tbcol int) TAGS(tgcol int)
|
||||||
|
|
||||||
$tbPrefix = db.t
|
$tbPrefix = db.t
|
||||||
$i = 0
|
$i = 0
|
||||||
while $i < 100000
|
while $i < 2000
|
||||||
$tb = $tbPrefix . $i
|
$tb = $tbPrefix . $i
|
||||||
sql create table $tb using db.mt tags( $i )
|
sql create table $tb using db.mt tags( $i )
|
||||||
$i = $i + 1
|
$i = $i + 1
|
||||||
endw
|
endw
|
||||||
|
|
||||||
|
sql show db.vgroups
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
print ======== step2
|
print ======== step2
|
||||||
sleep 1000
|
sleep 1000
|
||||||
sql drop database db
|
sql drop database db
|
||||||
|
@ -45,6 +47,48 @@ if $rows != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
sleep 3000
|
||||||
|
sql show dnodes
|
||||||
|
print dnode1 openVnodes $data2_1
|
||||||
|
print dnode2 openVnodes $data2_2
|
||||||
|
print dnode3 openVnodes $data2_3
|
||||||
|
if $data2_1 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data2_2 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data2_3 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ======== step3
|
||||||
|
|
||||||
|
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||||
|
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||||
|
|
||||||
|
sleep 1000
|
||||||
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
|
system sh/exec_up.sh -n dnode2 -s start
|
||||||
|
system sh/exec_up.sh -n dnode3 -s start
|
||||||
|
|
||||||
|
$x = 0
|
||||||
|
step3:
|
||||||
|
$x = $x + 1
|
||||||
|
sleep 2000
|
||||||
|
if $x == 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql show mnodes
|
||||||
|
print dnode1 role $data2_1
|
||||||
|
if $data2_1 != master then
|
||||||
|
goto step3
|
||||||
|
endi
|
||||||
|
|
||||||
|
sleep 1000
|
||||||
|
|
||||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
||||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||||
|
|
|
@ -31,17 +31,17 @@ system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
|
||||||
|
|
||||||
print ========= start dnodes
|
print ========= start dnodes
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
|
sleep 3000
|
||||||
sql connect
|
sql connect
|
||||||
sql create dnode $hostname2
|
sql create dnode $hostname2
|
||||||
system sh/exec_up.sh -n dnode2 -s start
|
system sh/exec_up.sh -n dnode2 -s start
|
||||||
sleep 3000
|
|
||||||
|
|
||||||
$loop = 0
|
$loop = 0
|
||||||
begin:
|
begin:
|
||||||
|
|
||||||
$db = db . $loop
|
$db = db . $loop
|
||||||
|
|
||||||
print ======== step1
|
print ======== step1 $loop
|
||||||
sql create database $db
|
sql create database $db
|
||||||
sql use $db
|
sql use $db
|
||||||
|
|
||||||
|
@ -53,15 +53,16 @@ begin:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
endw
|
endw
|
||||||
|
|
||||||
print ======== step2
|
print ======== step2 $loop
|
||||||
system sh/exec_up.sh -n dnode2 -s stop
|
system sh/exec_up.sh -n dnode2 -s stop
|
||||||
|
sleep 1000
|
||||||
sql drop database $db
|
sql drop database $db
|
||||||
|
|
||||||
|
|
||||||
print ======== step3
|
print ======== step3 $loop
|
||||||
sleep 3000
|
sleep 3000
|
||||||
system sh/exec_up.sh -n dnode2 -s start
|
system sh/exec_up.sh -n dnode2 -s start
|
||||||
sleep 20000
|
sleep 5000
|
||||||
|
|
||||||
print ===> test times : $loop
|
print ===> test times : $loop
|
||||||
if $loop > 5 then
|
if $loop > 5 then
|
||||||
|
@ -69,6 +70,9 @@ begin:
|
||||||
endi
|
endi
|
||||||
|
|
||||||
$loop = $loop + 1
|
$loop = $loop + 1
|
||||||
|
|
||||||
|
sql reset query cache
|
||||||
|
sleep 1000
|
||||||
|
|
||||||
goto begin
|
goto begin
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ system sh/cfg.sh -n dnode4 -c wallevel -v 1
|
||||||
|
|
||||||
print ========== step1
|
print ========== step1
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
sql create database d1 maxTables 4
|
sql create database d1 maxTables 4
|
||||||
sql create table d1.t1 (t timestamp, i int)
|
sql create table d1.t1 (t timestamp, i int)
|
||||||
|
@ -59,17 +59,17 @@ $x = 0
|
||||||
show2:
|
show2:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
if $data2_1 != 3 then
|
if $data2_1 != 1 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 1 then
|
if $data2_2 != 3 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ $x = 0
|
||||||
show3:
|
show3:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ $x = 0
|
||||||
show4:
|
show4:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_2 != NULL then
|
if $data2_2 != null then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -118,8 +118,8 @@ system sh/exec_up.sh -n dnode4 -s start
|
||||||
$x = 0
|
$x = 0
|
||||||
show5:
|
show5:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 3000
|
sleep 2000
|
||||||
if $x == 20 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
|
@ -127,10 +127,10 @@ print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
print dnode4 openVnodes $data2_4
|
print dnode4 openVnodes $data2_4
|
||||||
if $data2_1 != 4 then
|
if $data2_1 != 0 then
|
||||||
goto show5
|
goto show5
|
||||||
endi
|
endi
|
||||||
if $data2_2 != NULL then
|
if $data2_2 != null then
|
||||||
goto show5
|
goto show5
|
||||||
endi
|
endi
|
||||||
if $data2_3 != 2 then
|
if $data2_3 != 2 then
|
||||||
|
|
|
@ -10,15 +10,15 @@ system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4
|
||||||
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 4
|
system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 4
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 1
|
system sh/cfg.sh -n dnode1 -c wallevel -v 2
|
||||||
system sh/cfg.sh -n dnode2 -c wallevel -v 1
|
system sh/cfg.sh -n dnode2 -c wallevel -v 2
|
||||||
system sh/cfg.sh -n dnode3 -c wallevel -v 1
|
system sh/cfg.sh -n dnode3 -c wallevel -v 2
|
||||||
system sh/cfg.sh -n dnode4 -c wallevel -v 1
|
system sh/cfg.sh -n dnode4 -c wallevel -v 2
|
||||||
|
|
||||||
print ========== step1
|
print ========== step1
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
sql create database d1 maxTables 4
|
sql create database d1 maxTables 4
|
||||||
sql create table d1.t1 (t timestamp, i int)
|
sql create table d1.t1 (t timestamp, i int)
|
||||||
|
@ -59,46 +59,51 @@ $x = 0
|
||||||
show2:
|
show2:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
if $data2_1 != 3 then
|
if $data2_1 != 1 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 1 then
|
if $data2_2 != 3 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ========== step3
|
print ========== step3
|
||||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||||
sql drop dnode $hostname2
|
sql drop dnode $hostname2
|
||||||
sleep 7001
|
sleep 4000
|
||||||
|
|
||||||
$x = 0
|
|
||||||
show3:
|
|
||||||
$x = $x + 1
|
|
||||||
sleep 2000
|
|
||||||
if $x == 30 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2 $data5_192.168.0.2
|
print dnode2 openVnodes $data2_2
|
||||||
|
|
||||||
print ========== step4
|
print ========== step4
|
||||||
sql create dnode $hostname3
|
sql create dnode $hostname3
|
||||||
system sh/exec_up.sh -n dnode3 -s start
|
system sh/exec_up.sh -n dnode3 -s start
|
||||||
|
|
||||||
|
sleep 5000
|
||||||
|
|
||||||
|
sql show dnodes
|
||||||
|
print dnode1 openVnodes $data2_1
|
||||||
|
print dnode2 openVnodes $data2_2
|
||||||
|
print dnode3 openVnodes $data2_3
|
||||||
|
if $data2_3 != 0 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ============ step 4.1
|
||||||
|
system sh/exec_up.sh -n dnode2 -s start
|
||||||
|
|
||||||
$x = 0
|
$x = 0
|
||||||
show4:
|
show4:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -106,13 +111,13 @@ sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_2 != NULL then
|
if $data2_2 != null then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
if $data2_1 != 3 then
|
if $data2_1 != 1 then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
if $data2_3 != 1 then
|
if $data2_3 != 3 then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ sql insert into d1.t1 values(now+5s, 11)
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
if $data2_1 != 3 then
|
if $data2_1 != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -41,16 +41,16 @@ $x = 0
|
||||||
show2:
|
show2:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
if $data2_1 != 4 then
|
if $data2_1 != 0 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 3 then
|
if $data2_2 != 1 then
|
||||||
goto show2
|
goto show2
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ $x = 0
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_2
|
||||||
if $data2_1 != 4 then
|
if $data2_1 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 2 then
|
if $data2_2 != 2 then
|
||||||
|
@ -82,7 +82,7 @@ $x = 0
|
||||||
show4:
|
show4:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
|
@ -91,7 +91,7 @@ print dnode2 openVnodes $data2_2
|
||||||
if $data2_1 != 2 then
|
if $data2_1 != 2 then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
if $data2_2 != NULL then
|
if $data2_2 != null then
|
||||||
goto show4
|
goto show4
|
||||||
endi
|
endi
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
|
@ -102,13 +102,8 @@ system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
||||||
|
|
||||||
print ========== step5
|
print ========== step5
|
||||||
sleep 2000
|
sleep 2000
|
||||||
sql create dnode $hostname2
|
sql create dnode $hostname3
|
||||||
system sh/deploy.sh -n dnode2 -i 2
|
system sh/exec_up.sh -n dnode3 -s start
|
||||||
system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1
|
|
||||||
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
|
|
||||||
system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4
|
|
||||||
system sh/cfg.sh -n dnode2 -c wallevel -v 1
|
|
||||||
system sh/exec_up.sh -n dnode2 -s start
|
|
||||||
|
|
||||||
$x = 0
|
$x = 0
|
||||||
show5:
|
show5:
|
||||||
|
@ -119,11 +114,11 @@ show5:
|
||||||
endi
|
endi
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_1 != 4 then
|
if $data2_1 != 0 then
|
||||||
goto show5
|
goto show5
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 2 then
|
if $data2_3 != 2 then
|
||||||
goto show5
|
goto show5
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -138,17 +133,17 @@ sql insert into d3.t3 values(now+5s, 31)
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
print dnode2 openVnodes $data2_3
|
||||||
if $data2_1 != 4 then
|
if $data2_1 != 0 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 1 then
|
if $data2_3 != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ========== step7
|
print ========== step7
|
||||||
sql create dnode $hostname3
|
sql create dnode $hostname4
|
||||||
system sh/exec_up.sh -n dnode3 -s start
|
system sh/exec_up.sh -n dnode4 -s start
|
||||||
|
|
||||||
$x = 0
|
$x = 0
|
||||||
show7:
|
show7:
|
||||||
|
@ -160,15 +155,15 @@ show7:
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_1 != 4 then
|
print dnode4 openVnodes $data2_4
|
||||||
|
if $data2_1 != 0 then
|
||||||
goto show7
|
goto show7
|
||||||
endi
|
endi
|
||||||
if $data2_2 != 2 then
|
if $data2_3 != 2 then
|
||||||
goto show7
|
goto show7
|
||||||
endi
|
endi
|
||||||
if $data2_3 != 3 then
|
if $data2_4 != 1 then
|
||||||
goto show7
|
goto show7
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -185,49 +180,49 @@ $x = 0
|
||||||
show8:
|
show8:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_1 != 4 then
|
print dnode4 openVnodes $data2_4
|
||||||
goto show8
|
if $data2_1 != 0 then
|
||||||
endi
|
|
||||||
if $data2_2 != 2 then
|
|
||||||
goto show8
|
goto show8
|
||||||
endi
|
endi
|
||||||
if $data2_3 != 2 then
|
if $data2_3 != 2 then
|
||||||
goto show8
|
goto show8
|
||||||
endi
|
endi
|
||||||
|
if $data2_4 != 2 then
|
||||||
|
goto show8
|
||||||
|
endi
|
||||||
|
|
||||||
print ========== step9
|
print ========== step9
|
||||||
sql drop dnode $hostname2
|
sql drop dnode $hostname3
|
||||||
|
|
||||||
$x = 0
|
$x = 0
|
||||||
show9:
|
show9:
|
||||||
$x = $x + 1
|
$x = $x + 1
|
||||||
sleep 2000
|
sleep 2000
|
||||||
if $x == 30 then
|
if $x == 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql show dnodes
|
sql show dnodes
|
||||||
print dnode1 openVnodes $data2_1
|
print dnode1 openVnodes $data2_1
|
||||||
print dnode2 openVnodes $data2_2
|
|
||||||
print dnode3 openVnodes $data2_3
|
print dnode3 openVnodes $data2_3
|
||||||
if $data2_1 != 4 then
|
print dnode4 openVnodes $data2_4
|
||||||
|
if $data2_1 != 0 then
|
||||||
goto show9
|
goto show9
|
||||||
endi
|
endi
|
||||||
if $data2_2 != NULL then
|
if $data2_3 != null then
|
||||||
goto show9
|
goto show9
|
||||||
endi
|
endi
|
||||||
if $data2_3 != 0 then
|
if $data2_4 != 4 then
|
||||||
goto show9
|
goto show9
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
||||||
|
|
||||||
print ========== step10
|
print ========== step10
|
||||||
sql select * from d1.t1 order by t desc
|
sql select * from d1.t1 order by t desc
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||||
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
system sh/cfg.sh -n dnode1 -c wallevel -v 0
|
||||||
|
system sh/cfg.sh -n dnode1 -c httpDebugFlag -v 135
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
@ -12,7 +14,7 @@ print ============================ dnode1 start
|
||||||
print =============== step1 - parse
|
print =============== step1 - parse
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/
|
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1057,"desc":"database name can not be NULL"}@ then
|
if $system_content != @{"status":"error","code":1057,"desc":"database name can not be null"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -24,7 +26,7 @@ endi
|
||||||
|
|
||||||
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/
|
system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1057,"desc":"database name can not be NULL"}@ then
|
if $system_content != @{"status":"error","code":1057,"desc":"database name can not be null"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -73,7 +75,7 @@ endi
|
||||||
|
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "ab1234567890123456789012345678ab1234567890123456789012345678","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
system_content curl -u root:taosdata -d '[{"metric": "ab1234567890123456789012345678ab1234567890123456789012345678","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1065,"desc":"metric name length can not more than 22"}@ then
|
if $system_content != @{"errors":[{"datapoint":{"metric":"ab1234567890123456789012345678ab1234567890123456789012345678","stable":"ab1234567890123456789012345678ab1234567890123456789012345678_d_bbb","table":"ab1234567890123456789012345678ab1234567890123456789012345678_d_bbb_lga_1_web01","timestamp":1346846400,"value":18.000000,"tags":{"dc":"lga","group1":"1","host":"web01"},"status":"error","code":-2147483389}}],"failed":1,"success":0,"affected_rows":0}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -123,13 +125,13 @@ endi
|
||||||
|
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","group1": "1","group1": "1","group1": "1","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": "web01","group1": "1","group1": "1","group1": "1","group1": "1","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1071,"desc":"tags size too long"}@ then
|
if $system_content != @{"errors":[{"datapoint":{"metric":"sys_cpu","stable":"sys_cpu_d_bbbbbbb","table":"sys_cpu_d_bbbbbbb_lga_1_1_1_1_1_web01","timestamp":1346846400,"value":18.000000,"tags":{"dc":"lga","group1":"1","group1":"1","group1":"1","group1":"1","group1":"1","host":"web01"},"status":"error","code":-2147483445}}],"failed":1,"success":0,"affected_rows":0}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"": "web01"}}]' 127.0.0.1:6020/opentsdb/db/put
|
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"": "web01"}}]' 127.0.0.1:6020/opentsdb/db/put
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1073,"desc":"tag name is NULL"}@ then
|
if $system_content != @{"status":"error","code":1073,"desc":"tag name is null"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -147,7 +149,7 @@ endi
|
||||||
|
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": ""}}]' 127.0.0.1:6020/opentsdb/db/put
|
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400,"value": 18,"tags": {"host": ""}}]' 127.0.0.1:6020/opentsdb/db/put
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"status":"error","code":1076,"desc":"tag value is NULL"}@ then
|
if $system_content != @{"status":"error","code":1076,"desc":"tag value is null"}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -162,7 +164,7 @@ endi
|
||||||
|
|
||||||
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400000,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
system_content curl -u root:taosdata -d '[{"metric": "sys_cpu","timestamp": 1346846400000,"value": 18,"tags": {"host": "web01","group1": "1","dc": "lga"}}]' 127.0.0.1:6020/opentsdb/db/put
|
||||||
print $system_content
|
print $system_content
|
||||||
if $system_content != @{"errors":[{"datapoint":{"metric":"sys_cpu","stable":"sys_cpu_d_bbb","table":"sys_cpu_d_bbb_lga_1_web01","timestamp":1346846400000,"value":18.000000,"tags":{"dc":"lga","group1":"1","host":"web01"},"affected_rows":0,"status":"succ"}}],"failed":0,"success":1,"affected_rows":0}@ then
|
if $system_content != @{"errors":[{"datapoint":{"metric":"sys_cpu","stable":"sys_cpu_d_bbb","table":"sys_cpu_d_bbb_lga_1_web01","timestamp":1346846400000,"value":18.000000,"tags":{"dc":"lga","group1":"1","host":"web01"},"affected_rows":1,"status":"succ"}}],"failed":0,"success":1,"affected_rows":1}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -202,7 +204,7 @@ system_content curl -u root:taosdata -d '[{"metric": "sys_mem","timestamp": 134
|
||||||
|
|
||||||
print $system_content
|
print $system_content
|
||||||
|
|
||||||
if $system_content != @{"failed":0,"success":2}@ then
|
if $system_content != @{"failed":1,"success":1}@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ system sh/cfg.sh -n dnode3 -c numOfMPeers -v 2
|
||||||
|
|
||||||
print ============== step1
|
print ============== step1
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
system sh/exec_up.sh -n dnode1 -s start
|
||||||
sql connect
|
|
||||||
sleep 3000
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
sql show mnodes
|
sql show mnodes
|
||||||
$dnode1Role = $data2_1
|
$dnode1Role = $data2_1
|
||||||
|
@ -23,16 +23,15 @@ print dnode3 ==> $dnode3Role
|
||||||
if $dnode1Role != master then
|
if $dnode1Role != master then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $dnode2Role != NULL then
|
if $dnode2Role != null then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $dnode3Role != NULL then
|
if $dnode3Role != null then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ============== step2
|
print ============== step2
|
||||||
sql create dnode $hostname2
|
sql create dnode $hostname2
|
||||||
sleep 1700
|
|
||||||
sql create dnode $hostname3
|
sql create dnode $hostname3
|
||||||
|
|
||||||
print ============== step3
|
print ============== step3
|
||||||
|
@ -68,10 +67,10 @@ print dnode3 ==> $dnode3Role
|
||||||
if $dnode1Role != master then
|
if $dnode1Role != master then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $rows != 2 then
|
if $dnode2Role != slave then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $dnode3Role != NULL then
|
if $dnode3Role != null then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
system sh/stop_dnodes.sh
|
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
|
||||||
system sh/deploy.sh -n dnode2 -i 2
|
|
||||||
|
|
||||||
print ========== step1 dnode2 start
|
|
||||||
system sh/exec_up.sh -n dnode2 -s start
|
|
||||||
sql connect
|
|
||||||
|
|
||||||
print ========== step2 connect to dnode2
|
|
||||||
sql create dnode $hostname1
|
|
||||||
system sh/exec_up.sh -n dnode1 -s start
|
|
||||||
sleep 3000
|
|
||||||
|
|
||||||
print ========== step3
|
|
||||||
sql show dnodes
|
|
||||||
print dnode1 openvnodes $data3_1
|
|
||||||
print dnode2 openvnodes $data3_2
|
|
||||||
print dnode1 totalvnodes $data4_1
|
|
||||||
print dnode2 totalvnodes $data4_2
|
|
||||||
|
|
||||||
if $rows != 2 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data3_1 != 0 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data3_2 != 0 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data4_1 != 4 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
if $data4_2 != 4 then
|
|
||||||
return -1
|
|
||||||
endi
|
|
||||||
|
|
||||||
system sh/exec_up.sh -n dnode1 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode2 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode3 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode4 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode5 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode6 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode7 -s stop -x SIGINT
|
|
||||||
system sh/exec_up.sh -n dnode8 -s stop -x SIGINT
|
|
|
@ -5,5 +5,4 @@ run unique/mnode/mgmt25.sim
|
||||||
run unique/mnode/mgmt26.sim
|
run unique/mnode/mgmt26.sim
|
||||||
run unique/mnode/mgmt33.sim
|
run unique/mnode/mgmt33.sim
|
||||||
run unique/mnode/mgmt34.sim
|
run unique/mnode/mgmt34.sim
|
||||||
#run unique/mnode/mgmtr2.sim
|
run unique/mnode/mgmtr2.sim
|
||||||
#run unique/mnode/secondIp.sim
|
|
||||||
|
|
Loading…
Reference in New Issue