enh: adjust the implementation of random selection
This commit is contained in:
parent
21f8d6b7c1
commit
c3b1e267b9
|
@ -947,34 +947,6 @@ _exit:
|
|||
TAOS_RETURN(code);
|
||||
}
|
||||
|
||||
static int32_t s3InitEpIndexArray(SArray **pIndexArray) {
|
||||
SArray *indexArray = taosArrayInit(tsS3EpNum, sizeof(int8_t));
|
||||
if (!indexArray) {
|
||||
uError("%s: %s", __func__, "out of memory");
|
||||
TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
if (taosArrayPush(indexArray, &i) == NULL) {
|
||||
taosArrayDestroy(indexArray);
|
||||
uError("%s: %s", __func__, "out of memory");
|
||||
TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY);
|
||||
}
|
||||
}
|
||||
|
||||
if (tsS3EpNum > 1) {
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t j = taosRand() % tsS3EpNum;
|
||||
int8_t tmp = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
taosArraySet(indexArray, i, taosArrayGet(indexArray, j));
|
||||
taosArraySet(indexArray, j, &tmp);
|
||||
}
|
||||
}
|
||||
|
||||
*pIndexArray = indexArray;
|
||||
TAOS_RETURN(TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
int32_t s3PutObjectFromFile2ByEp(const char *file, const char *object_name, int8_t withcp, int8_t epIndex) {
|
||||
int32_t code = 0;
|
||||
int32_t lmtime = 0;
|
||||
|
@ -1039,19 +1011,15 @@ int32_t s3PutObjectFromFile2ByEp(const char *file, const char *object_name, int8
|
|||
int32_t s3PutObjectFromFile2(const char *file, const char *object_name, int8_t withcp) {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
code = s3PutObjectFromFile2ByEp(file, object_name, withcp, epIndex);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1122,19 +1090,15 @@ static int32_t s3PutObjectFromFileOffsetByEp(const char *file, const char *objec
|
|||
int32_t s3PutObjectFromFileOffset(const char *file, const char *object_name, int64_t offset, int64_t size) {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
code = s3PutObjectFromFileOffsetByEp(file, object_name, offset, size, epIndex);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1242,21 +1206,15 @@ static SArray *getListByPrefixByEp(const char *prefix, int8_t epIndex) {
|
|||
|
||||
static SArray *getListByPrefix(const char *prefix) {
|
||||
SArray *objectArray = NULL;
|
||||
SArray *indexArray = NULL;
|
||||
if (s3InitEpIndexArray(&indexArray) != TSDB_CODE_SUCCESS) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
objectArray = getListByPrefixByEp(prefix, epIndex);
|
||||
if (objectArray) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return objectArray;
|
||||
}
|
||||
|
||||
|
@ -1291,19 +1249,15 @@ static int32_t s3DeleteObjectsByEp(const char *object_name[], int nobject, int8_
|
|||
int32_t s3DeleteObjects(const char *object_name[], int nobject) {
|
||||
int32_t code = 0;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
code = s3DeleteObjectsByEp(object_name, nobject, epIndex);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1394,19 +1348,15 @@ _retry:
|
|||
int32_t s3GetObjectBlock(const char *object_name, int64_t offset, int64_t size, bool check, uint8_t **ppBlock) {
|
||||
int32_t code = 0;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
code = s3GetObjectBlockByEp(object_name, offset, size, check, ppBlock, epIndex);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1458,19 +1408,15 @@ static int32_t s3GetObjectToFileByEp(const char *object_name, const char *fileNa
|
|||
int32_t s3GetObjectToFile(const char *object_name, const char *fileName) {
|
||||
int32_t code = 0;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
code = s3GetObjectToFileByEp(object_name, fileName, epIndex);
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -1531,19 +1477,15 @@ static long s3SizeByEp(const char *object_name, int8_t epIndex) {
|
|||
long s3Size(const char *object_name) {
|
||||
long size = 0;
|
||||
|
||||
SArray *indexArray = NULL;
|
||||
TAOS_CHECK_RETURN(s3InitEpIndexArray(&indexArray));
|
||||
|
||||
int8_t startIndex = taosRand() % tsS3EpNum;
|
||||
for (int8_t i = 0; i < tsS3EpNum; ++i) {
|
||||
int8_t epIndex = *(int8_t *)taosArrayGet(indexArray, i);
|
||||
int8_t epIndex = (startIndex + i) % tsS3EpNum;
|
||||
size = s3SizeByEp(object_name, epIndex);
|
||||
if (size > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
taosArrayDestroy(indexArray);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue