From 644bfa408599d0260b53335b4db926c05d52df6a Mon Sep 17 00:00:00 2001 From: slguan Date: Thu, 23 Apr 2020 14:02:10 +0800 Subject: [PATCH] [TD-189] fix bug while drop user --- src/mnode/src/mgmtAcct.c | 4 +++- src/mnode/src/mgmtDb.c | 13 ++++++++++--- src/mnode/src/mgmtSdb.c | 19 ++++++++++--------- src/vnode/src/vnodeMain.c | 18 +++++++++--------- tests/script/general/account/testSuite.sim | 5 ----- tests/script/general/user/basic1.sim | 5 +++++ .../script/unique/account/account_create.sim | 5 ++--- .../script/unique/account/account_delete.sim | 6 +++--- tests/script/unique/account/account_len.sim | 4 ++-- tests/script/unique/account/authority.sim | 4 ++-- tests/script/unique/account/basic.sim | 2 +- tests/script/unique/account/monitor.sim | 2 +- tests/script/unique/account/paras.sim | 2 +- tests/script/unique/account/pass_alter.sim | 4 ++-- tests/script/unique/account/pass_len.sim | 4 ++-- tests/script/unique/account/testSuite.sim | 4 ++-- tests/script/unique/account/usage.sim | 2 +- tests/script/unique/account/user_create.sim | 4 ++-- tests/script/unique/account/user_len.sim | 4 ++-- 19 files changed, 60 insertions(+), 51 deletions(-) delete mode 100644 tests/script/general/account/testSuite.sim diff --git a/src/mnode/src/mgmtAcct.c b/src/mnode/src/mgmtAcct.c index cd5b849ccc..f9e2c8b105 100644 --- a/src/mnode/src/mgmtAcct.c +++ b/src/mnode/src/mgmtAcct.c @@ -82,6 +82,8 @@ static int32_t mgmtActionAcctRestored() { if (dnodeIsFirstDeploy()) { mgmtCreateRootAcct(); } + + acctInit(); return TSDB_CODE_SUCCESS; } @@ -112,7 +114,7 @@ int32_t mgmtInitAccts() { } mTrace("table:%s, hash is created", tableDesc.tableName); - return acctInit(); + return TSDB_CODE_SUCCESS; } void mgmtCleanUpAccts() { diff --git a/src/mnode/src/mgmtDb.c b/src/mnode/src/mgmtDb.c index 35b57094fd..d57b75501a 100644 --- a/src/mnode/src/mgmtDb.c +++ b/src/mnode/src/mgmtDb.c @@ -882,18 +882,25 @@ static void mgmtProcessDropDbMsg(SQueuedMsg *pMsg) { void mgmtDropAllDbs(SAcctObj *pAcct) { int32_t numOfDbs = 0; SDbObj *pDb = NULL; - void *pNode = NULL; + void * pNode = NULL; while (1) { pNode = sdbFetchRow(tsDbSdb, pNode, (void **)&pDb); if (pDb == NULL) break; if (pDb->pAcct == pAcct) { - mgmtSetDbDropping(pDb); + mPrint("db:%s, drop db from sdb for acct:%s is dropped", pDb->name, pAcct->user); + SSdbOper oper = { + .type = SDB_OPER_LOCAL, + .table = tsDbSdb, + .pObj = pDb + }; + + sdbDeleteRow(&oper); numOfDbs++; } mgmtDecDbRef(pDb); } - mTrace("acct:%s, all dbs is is set dirty", pAcct->user, numOfDbs); + mTrace("acct:%s, all dbs is is dropped from sdb", pAcct->user, numOfDbs); } diff --git a/src/mnode/src/mgmtSdb.c b/src/mnode/src/mgmtSdb.c index 5ed0c46031..9e4bfb453b 100644 --- a/src/mnode/src/mgmtSdb.c +++ b/src/mnode/src/mgmtSdb.c @@ -333,7 +333,7 @@ void sdbIncRef(void *handle, void *pRow) { SSdbTable *pTable = handle; int32_t * pRefCount = (int32_t *)(pRow + pTable->refCountPos); atomic_add_fetch_32(pRefCount, 1); - if (0 && strcmp(pTable->tableName, "dnodes") == 0) { + if (0 && strcmp(pTable->tableName, "accounts") == 0) { sdbTrace("table:%s, add ref to record:%s:%s:%d", pTable->tableName, pTable->tableName, sdbGetkeyStr(pTable, pRow), *pRefCount); } @@ -345,7 +345,7 @@ void sdbDecRef(void *handle, void *pRow) { SSdbTable *pTable = handle; int32_t * pRefCount = (int32_t *)(pRow + pTable->refCountPos); int32_t refCount = atomic_sub_fetch_32(pRefCount, 1); - if (0 && strcmp(pTable->tableName, "dnodes") == 0) { + if (0 && strcmp(pTable->tableName, "accounts") == 0) { sdbTrace("table:%s, def ref of record:%s:%s:%d", pTable->tableName, pTable->tableName, sdbGetkeyStr(pTable, pRow), *pRefCount); } @@ -404,23 +404,24 @@ static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) { pthread_mutex_unlock(&pTable->mutex); - sdbTrace("table:%s, insert record:%s to hash, numOfRows:%d", pTable->tableName, sdbGetkeyStr(pTable, pOper->pObj), - pTable->numOfRows); + sdbTrace("table:%s, insert record:%s to hash, numOfRows:%d version:%" PRIu64, pTable->tableName, + sdbGetkeyStr(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion()); (*pTable->insertFp)(pOper); return TSDB_CODE_SUCCESS; } static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) { + (*pTable->deleteFp)(pOper); + pthread_mutex_lock(&pTable->mutex); (*sdbDeleteIndexFp[pTable->keyType])(pTable->iHandle, pOper->pObj); pTable->numOfRows--; pthread_mutex_unlock(&pTable->mutex); - sdbTrace("table:%s, delete record:%s from hash, numOfRows:%d", pTable->tableName, sdbGetkeyStr(pTable, pOper->pObj), - pTable->numOfRows); + sdbTrace("table:%s, delete record:%s from hash, numOfRows:%d version:%" PRIu64, pTable->tableName, + sdbGetkeyStr(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion()); - (*pTable->deleteFp)(pOper); int8_t *updateEnd = pOper->pObj + pTable->refCountPos - 1; *updateEnd = 1; sdbDecRef(pTable, pOper->pObj); @@ -429,8 +430,8 @@ static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) { } static int32_t sdbUpdateHash(SSdbTable *pTable, SSdbOper *pOper) { - sdbTrace("table:%s, update record:%s in hash, numOfRows:%d", pTable->tableName, sdbGetkeyStr(pTable, pOper->pObj), - pTable->numOfRows); + sdbTrace("table:%s, update record:%s in hash, numOfRows:%d version:%" PRIu64, pTable->tableName, + sdbGetkeyStr(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion()); (*pTable->updateFp)(pOper); return TSDB_CODE_SUCCESS; diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index 5c5b6ff272..6936dc0345 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -39,7 +39,7 @@ static int vnodeWalCallback(void *arg); static int32_t vnodeSaveCfg(SMDCreateVnodeMsg *pVnodeCfg); static int32_t vnodeReadCfg(SVnodeObj *pVnode); static int32_t vnodeSaveVersion(SVnodeObj *pVnode); -static int32_t vnodeReadVersion(SVnodeObj *pVnode); +static bool vnodeReadVersion(SVnodeObj *pVnode); static int vnodeWalCallback(void *arg); static uint32_t vnodeGetFileInfo(void *ahandle, char *name, uint32_t *index, int32_t *size); static int vnodeGetWalInfo(void *ahandle, char *name, uint32_t *index); @@ -287,7 +287,7 @@ void *vnodeGetVnode(int32_t vgId) { SVnodeObj **ppVnode = (SVnodeObj **)taosGetIntHashData(tsDnodeVnodesHash, vgId); if (ppVnode == NULL || *ppVnode == NULL) { terrno = TSDB_CODE_INVALID_VGROUP_ID; - dError("vgId:%d not exist"); + dError("vgId:%d not exist", vgId); return NULL; } @@ -611,7 +611,7 @@ static int32_t vnodeSaveVersion(SVnodeObj *pVnode) { sprintf(versionFile, "%s/vnode%d/version.json", tsVnodeDir, pVnode->vgId); FILE *fp = fopen(versionFile, "w"); if (!fp) { - dError("pVnode:%p vgId:%d, failed to open vnode version file for write, error:%s", pVnode, pVnode->vgId); + dError("pVnode:%p vgId:%d, failed to open vnode version file for write, error:%s", pVnode, pVnode->vgId, strerror(errno)); return errno; } @@ -632,23 +632,23 @@ static int32_t vnodeSaveVersion(SVnodeObj *pVnode) { return 0; } -static int32_t vnodeReadVersion(SVnodeObj *pVnode) { +static bool vnodeReadVersion(SVnodeObj *pVnode) { char versionFile[TSDB_FILENAME_LEN + 30] = {0}; sprintf(versionFile, "%s/vnode%d/version.json", tsVnodeDir, pVnode->vgId); FILE *fp = fopen(versionFile, "w"); if (!fp) { - dError("pVnode:%p vgId:%d, failed to open vnode version file for write, error:%s", pVnode, pVnode->vgId); - return errno; + dError("pVnode:%p vgId:%d, failed to open vnode version file for write, error:%s", pVnode, pVnode->vgId, strerror(errno)); + return false; } - int ret = TSDB_CODE_OTHERS; + bool ret = false; int maxLen = 100; char *content = calloc(1, maxLen + 1); int len = fread(content, 1, maxLen, fp); if (len <= 0) { free(content); fclose(fp); - dError("pVnode:%p vgId:%d, failed to read vnode version, content is null", pVnode, pVnode->vgId); + dPrint("pVnode:%p vgId:%d, failed to read vnode version, content is null", pVnode, pVnode->vgId); return false; } @@ -665,7 +665,7 @@ static int32_t vnodeReadVersion(SVnodeObj *pVnode) { } pVnode->version = version->valueint; - ret = 0; + ret = true; dPrint("pVnode:%p vgId:%d, read vnode version successed, version:%%" PRId64, pVnode, pVnode->vgId, pVnode->version); diff --git a/tests/script/general/account/testSuite.sim b/tests/script/general/account/testSuite.sim deleted file mode 100644 index 08fd03665f..0000000000 --- a/tests/script/general/account/testSuite.sim +++ /dev/null @@ -1,5 +0,0 @@ -run general/account/pass_alter.sim -run general/account/pass_len.sim -run general/account/user_create.sim -run general/account/user_len.sim -run general/account/monitor.sim \ No newline at end of file diff --git a/tests/script/general/user/basic1.sim b/tests/script/general/user/basic1.sim index f02a4d0e27..4bc7deae83 100644 --- a/tests/script/general/user/basic1.sim +++ b/tests/script/general/user/basic1.sim @@ -13,6 +13,11 @@ print $data00 $data01 $data02 print $data10 $data11 $data22 print $data20 $data11 $data22 +sql_error show accounts; +sql_error create account a pass "a" +sql_error drop account a +sql_error drop account root + print =============== create user1 sql create user user1 PASS 'user1' sql show users diff --git a/tests/script/unique/account/account_create.sim b/tests/script/unique/account/account_create.sim index 0963739ec9..ca7e91e892 100644 --- a/tests/script/unique/account/account_create.sim +++ b/tests/script/unique/account/account_create.sim @@ -2,11 +2,10 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect -sleep 3000 print ============================ dnode1 start diff --git a/tests/script/unique/account/account_delete.sim b/tests/script/unique/account/account_delete.sim index 2a140961bb..35cdcabfc7 100644 --- a/tests/script/unique/account/account_delete.sim +++ b/tests/script/unique/account/account_delete.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 @@ -53,7 +53,7 @@ if $rows != 0 then return -1 endi sql show dnodes -if $data02 != 2 then +if $data03 != 2 then return -1 endi sql drop account oroot diff --git a/tests/script/unique/account/account_len.sim b/tests/script/unique/account/account_len.sim index 759e469aa8..80d1a56a09 100644 --- a/tests/script/unique/account/account_len.sim +++ b/tests/script/unique/account/account_len.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/authority.sim b/tests/script/unique/account/authority.sim index c37b4e39b6..352e9797e3 100644 --- a/tests/script/unique/account/authority.sim +++ b/tests/script/unique/account/authority.sim @@ -2,9 +2,9 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 +system sh/cfg.sh -n dnode1 -c clog -v 0 system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 8 -system sh/exec.sh -n dnode1 -s start +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/basic.sim b/tests/script/unique/account/basic.sim index 6f64975ac2..7e386bb04f 100644 --- a/tests/script/unique/account/basic.sim +++ b/tests/script/unique/account/basic.sim @@ -1,6 +1,6 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/exec_up.sh -n dnode1 -s start +system sh/exec_up_up.sh -n dnode1 -s start sql connect print =============== show accounts diff --git a/tests/script/unique/account/monitor.sim b/tests/script/unique/account/monitor.sim index ea5155afbc..ce71fb766e 100644 --- a/tests/script/unique/account/monitor.sim +++ b/tests/script/unique/account/monitor.sim @@ -7,7 +7,7 @@ system sh/cfg.sh -n dnode1 -c monitor -v 0 print ========== step1 system sh/cfg.sh -n dnode1 -c monitor -v 1 system sh/cfg.sh -n dnode1 -c monitorInterval -v 1 -system sh/exec.sh -n dnode1 -s start +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/paras.sim b/tests/script/unique/account/paras.sim index 14ee2f6c85..f312a30c14 100644 --- a/tests/script/unique/account/paras.sim +++ b/tests/script/unique/account/paras.sim @@ -1,6 +1,6 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/exec_up.sh -n dnode1 -s start +system sh/exec_up_up.sh -n dnode1 -s start sql connect print =============== show accounts diff --git a/tests/script/unique/account/pass_alter.sim b/tests/script/unique/account/pass_alter.sim index 3314eda56f..d327d3d4e2 100644 --- a/tests/script/unique/account/pass_alter.sim +++ b/tests/script/unique/account/pass_alter.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/pass_len.sim b/tests/script/unique/account/pass_len.sim index 45d27d40c3..426c18adf7 100644 --- a/tests/script/unique/account/pass_len.sim +++ b/tests/script/unique/account/pass_len.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/testSuite.sim b/tests/script/unique/account/testSuite.sim index 95bdeeb760..b48ebd9354 100644 --- a/tests/script/unique/account/testSuite.sim +++ b/tests/script/unique/account/testSuite.sim @@ -1,9 +1,9 @@ run unique/account/account_create.sim run unique/account/account_len.sim +run unique/account/account_delete.sim run unique/account/pass_alter.sim run unique/account/pass_len.sim -run unique/account/authority.sim -run unique/account/account_delete.sim run unique/account/user_create.sim run unique/account/user_len.sim +run unique/account/authority.sim run unique/account/monitor.sim diff --git a/tests/script/unique/account/usage.sim b/tests/script/unique/account/usage.sim index 5b334374c9..4f32e0047b 100644 --- a/tests/script/unique/account/usage.sim +++ b/tests/script/unique/account/usage.sim @@ -1,6 +1,6 @@ system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/exec_up.sh -n dnode1 -s start +system sh/exec_up_up.sh -n dnode1 -s start sql connect print =============== show accounts diff --git a/tests/script/unique/account/user_create.sim b/tests/script/unique/account/user_create.sim index 09a86fb2e0..97a48cf8f6 100644 --- a/tests/script/unique/account/user_create.sim +++ b/tests/script/unique/account/user_create.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 diff --git a/tests/script/unique/account/user_len.sim b/tests/script/unique/account/user_len.sim index 0da5209a2c..260a0c78b5 100644 --- a/tests/script/unique/account/user_len.sim +++ b/tests/script/unique/account/user_len.sim @@ -2,8 +2,8 @@ system sh/stop_dnodes.sh system sh/ip.sh -i 1 -s up system sh/deploy.sh -n dnode1 -m 192.168.0.1 -i 192.168.0.1 -system sh/cfg.sh -n dnode1 -c commitLog -v 0 -system sh/exec.sh -n dnode1 -s start +system sh/cfg.sh -n dnode1 -c clog -v 0 +system sh/exec_up.sh -n dnode1 -s start sql connect sleep 3000 -- GitLab