提交 824ee2ac 编写于 作者: H Hongze Cheng

try to solve fnc problem

上级 1e638278
...@@ -232,26 +232,35 @@ int vnodeImportPoints(SMeterObj *pObj, char *cont, int contLen, char source, voi ...@@ -232,26 +232,35 @@ int vnodeImportPoints(SMeterObj *pObj, char *cont, int contLen, char source, voi
import.rows = rows; import.rows = rows;
// FIXME: mutex here seems meaningless and num here still can be changed // FIXME: mutex here seems meaningless and num here still can be changed
int32_t num = 0; // int32_t num = 0;
pthread_mutex_lock(&pVnode->vmutex); // pthread_mutex_lock(&pVnode->vmutex);
num = pObj->numOfQueries; // num = pObj->numOfQueries;
pthread_mutex_unlock(&pVnode->vmutex); // pthread_mutex_unlock(&pVnode->vmutex);
int32_t commitInProcess = 0; int32_t commitInProcess = 0;
pthread_mutex_lock(&pPool->vmutex); pthread_mutex_lock(&pPool->vmutex);
if (((commitInProcess = pPool->commitInProcess) == 1) || num > 0) { if ((commitInProcess = pPool->commitInProcess) == 1) {
// mutual exclusion with read (need to change here) // mutual exclusion with read (need to change here)
pthread_mutex_unlock(&pPool->vmutex); pthread_mutex_unlock(&pPool->vmutex);
vnodeClearMeterState(pObj, TSDB_METER_STATE_IMPORTING); vnodeClearMeterState(pObj, TSDB_METER_STATE_IMPORTING);
return TSDB_CODE_ACTION_IN_PROGRESS; return TSDB_CODE_ACTION_IN_PROGRESS;
}
} else {
pPool->commitInProcess = 1; int loop = 0;
pthread_mutex_unlock(&pPool->vmutex); while (pObj->numOfQueries > 0) {
code = vnodeImportData(pObj, &import); loop++;
*pNumOfPoints = import.importedRows; if (loop > 1000) {
sched_yield();
loop = 0;
}
} }
pPool->commitInProcess = 1;
pthread_mutex_unlock(&pPool->vmutex);
code = vnodeImportData(pObj, &import);
*pNumOfPoints = import.importedRows;
pVnode->version++; pVnode->version++;
vnodeClearMeterState(pObj, TSDB_METER_STATE_IMPORTING); vnodeClearMeterState(pObj, TSDB_METER_STATE_IMPORTING);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册