From 971b59ad9b867b3e933fbc225fee45aeea7b0952 Mon Sep 17 00:00:00 2001 From: deffpuzzl Date: Wed, 8 Aug 2018 13:43:48 +0800 Subject: [PATCH 1/2] fix some bugs --- demo/create_table.c | 2 +- demo/makefile | 5 ++++- src/detvm.c | 28 ++++++++++++++-------------- src/makefile | 2 +- src/stvm.c | 35 +++++++++++++++++++++++++++-------- src/tcp.c | 14 +++++++++----- src/tree.c | 3 +++ tbl_user_info.def | 2 +- 8 files changed, 60 insertions(+), 31 deletions(-) diff --git a/demo/create_table.c b/demo/create_table.c index e2c7759..907dcba 100644 --- a/demo/create_table.c +++ b/demo/create_table.c @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { SATvm *pstSavm = (SATvm *)pGetSATvm(); - if(RC_SUCC != lCreateTable(pstSavm, TBL_USER_INFO, 1000, lCreateUserInfo)) + if(RC_SUCC != lCreateTable(pstSavm, TBL_USER_INFO, 100000, lCreateUserInfo)) { fprintf(stderr, "create table %d failed, err: %s\n", TBL_USER_INFO, sGetTError(pstSavm->m_lErrno)); return RC_FAIL; diff --git a/demo/makefile b/demo/makefile index 85a6ce8..18189ad 100755 --- a/demo/makefile +++ b/demo/makefile @@ -28,12 +28,15 @@ REPLACE=replace POPUP=popup PRESSURE=press_demo TVMPUSH=tvmpush +TVMINSERT=tvminsert ASYPUSH=asypush THREAD=thread_demo -all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) $(TVMPUSH) $(ASYPUSH) $(TVMPOP) $(TVMREPLACE) $(THREAD) clean +all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) $(TVMPUSH) $(ASYPUSH) $(TVMPOP) $(TVMREPLACE) $(THREAD) $(TVMINSERT) clean $(CREATE): create_table.o $(CC) -o $@ $< $(LIBDIR) +$(TVMINSERT): tvminsert.o + $(CC) -o $@ $< $(LIBDIR) $(TVMREPLACE): tvmreplace.o $(CC) -o $@ $< $(LIBDIR) $(TVMPOP): tvmpop.o diff --git a/src/detvm.c b/src/detvm.c index d46c3c0..b54f615 100644 --- a/src/detvm.c +++ b/src/detvm.c @@ -152,13 +152,13 @@ void vDebugTable(TABLE t, long eType) } } - if(eType & DEBUG_UNIQ_IDEX) + if(eType & DEBUG_UNIQ_IDEX && (((TblDef *)pstRun->m_pvAddr)->m_lIType & UNQIUE)) { fprintf(stdout, "\n===================================UNIQUE_INDEX=====================" "==============lValid(%ld)=========================\n", lGetTblValid(t)); if(eType & DEBUG_IDEX_DALL) { - for(i = 0; i < lGetTblRow(t); i ++) + for(i = 0; i < lGetTblRow(t) < 3 ? 3 : lGetTblRow(t); i ++) { pstTree = (SHTree *)(pstRun->m_pvAddr + lGetIdxPos(t) + i * sizeof(SHTree)); vPrintHex(pstTree->m_szIdx, pstTree->m_lIdx, 0); @@ -170,11 +170,11 @@ void vDebugTable(TABLE t, long eType) } else { - for(i = 0; i < lGetTblValid(t); i ++) + for(i = 0; i < (lGetTblValid(t) < 3 ? 3 : lGetTblValid(t)); i ++) { pstTree = (SHTree *)(pstRun->m_pvAddr + lGetIdxPos(t) + i * sizeof(SHTree)); - if(SELF_POS_UNUSE == pstTree->m_lSePos || NODE_NULL == pstTree->m_lSePos) - continue; +// if(SELF_POS_UNUSE == pstTree->m_lSePos || NODE_NULL == pstTree->m_lSePos) +// continue; vPrintHex(pstTree->m_szIdx, pstTree->m_lIdx, 0); fprintf(stdout, "NODE:[%6ld]->(%02ld), Idx:[%15s](%6ld), Color[%ld], lSePos:[%4ld], " @@ -185,7 +185,7 @@ void vDebugTable(TABLE t, long eType) } } - if(eType & DEBUG_GROP_IDEX) + if(eType & DEBUG_GROP_IDEX && (((TblDef *)pstRun->m_pvAddr)->m_lIType & NORMAL)) { fprintf(stdout, "\n===================================INDEX_GROUP=====================" "==============Valid:%ld, Group:%ld================\n", lGetTblValid(t), lGetTblGroup(t)); @@ -203,11 +203,11 @@ void vDebugTable(TABLE t, long eType) } else { - for(i = 0; i < lGetTblValid(t); i ++) + for(i = 0; i < (lGetTblValid(t) < 3 ? 3 : lGetTblValid(t)); i ++) { pstTree = (SHTree *)(pstRun->m_pvAddr + lGetGrpPos(t) + i * sizeof(SHTree)); - if(SELF_POS_UNUSE == pstTree->m_lSePos || NODE_NULL == pstTree->m_lSePos) - continue; +// if(SELF_POS_UNUSE == pstTree->m_lSePos || NODE_NULL == pstTree->m_lSePos) +// continue; vPrintHex(pstTree->m_szIdx, pstTree->m_lIdx, 0); fprintf(stdout, "NODE:[%ld](%02ld), Idx:[%4s](%ld)(%2ld), Color[%ld], lSePos:[%4ld]," @@ -218,7 +218,7 @@ void vDebugTable(TABLE t, long eType) } } - if(eType & DEBUG_GROP_LIST) + if(eType & DEBUG_GROP_LIST && (((TblDef *)pstRun->m_pvAddr)->m_lIType & NORMAL)) { fprintf(stdout, "\n=================================INDEX_LIST========================" "==============Valid(%ld)=============\n", lGetTblValid(t)); @@ -235,11 +235,11 @@ void vDebugTable(TABLE t, long eType) } else { - for(i = 0, j = lGetListOfs(t); i < lGetTblValid(t); i ++) + for(i = 0, j = lGetListOfs(t); i < (lGetTblValid(t) < 3 ? 3 : lGetTblValid(t)); i ++) { pstList = (SHList *)(pstRun->m_pvAddr + j + i * sizeof(SHList)); - if(SELF_POS_UNUSE == pstList->m_lPos) - continue; +// if(SELF_POS_UNUSE == pstList->m_lPos) +// continue; fprintf(stdout, "LIST:[%8ld][%02ld], lSePos:[%4ld], lData[%8ld], Node[%8ld], " "Next[%8ld], Last[%8ld]\n" , (void *)pstList - pstRun->m_pvAddr, i, @@ -263,7 +263,7 @@ void vDebugTable(TABLE t, long eType) for(i = 0; i < lGetTblRow(t); i ++) { pstTruck = (void *)(pstRun->m_pvAddr + lGetTblData(t) + i * lGetRowTruck(t)); - fprintf(stdout, "SePos[%ld]\n", (void *)pstTruck - pstRun->m_pvAddr); + fprintf(stdout, "SePos[%ld][%X]\n", (void *)pstTruck - pstRun->m_pvAddr, pstTruck->m_chTag); vPrintHex(pstTruck->m_pvData, lGetRowSize(t), 0); } } diff --git a/src/makefile b/src/makefile index 23fb5cf..a8e4b47 100755 --- a/src/makefile +++ b/src/makefile @@ -13,7 +13,7 @@ OUTBIN=../bin OBJFILE=tree.o sem.o msg.o tcp.o str.o list.o conf.o queue.o func.o TARGET=$(OUTLIB)/libstvm.a -#TARDLL=$(OUTLIB)/libstvm.so +TARDLL=$(OUTLIB)/libstvm.so TARVER=$(OUTLIB)/libstvm.so.1.2 STVM=$(OUTBIN)/stvm DETVM=$(OUTBIN)/detvm diff --git a/src/stvm.c b/src/stvm.c index 01f2648..6bc1f5c 100644 --- a/src/stvm.c +++ b/src/stvm.c @@ -195,7 +195,7 @@ int getpack() case 32: return 8; default: - fprintf(stdout, "当前环境对齐数值(%d)过大\n", pack); + fprintf(stdout, "number(%d) of alignment is too large\n", pack); fflush(stdout); return -1; } @@ -213,7 +213,7 @@ int getpack() case 24: return 8; default: - fprintf(stdout, "当前环境对齐数值(%d)过大\n", pack); + fprintf(stdout, "number(%d) of alignment is too large\n", pack); fflush(stdout); return -1; } @@ -568,7 +568,10 @@ long lIndexField(char *s, TblDef *ps, Uenum em) strimcrlf(szField); strimall(szField); if(NULL == (pstKey = pFindField(ps->m_stKey, ps->m_lIdxNum, szField))) + { + fprintf(stderr, "field %s not define\n", szField); return RC_FAIL; + } strcpy(ps->m_stIdxUp[ps->m_lIdxUp].m_szField, szField); ps->m_stIdxUp[ps->m_lIdxUp].m_lFrom = pstKey->m_lFrom; @@ -577,8 +580,11 @@ long lIndexField(char *s, TblDef *ps, Uenum em) ps->m_lIdxLen += pstKey->m_lLen; ps->m_lIdxUp ++; } - if(0 == ps->m_lIdxUp) + if(0 == ps->m_lIdxUp || ps->m_lIdxLen > MAX_INDEX_LEN) + { + fprintf(stderr, "index is too long or index field lost\n"); return RC_FAIL; + } return RC_SUCC; } else if(NORMAL == em) @@ -590,7 +596,10 @@ long lIndexField(char *s, TblDef *ps, Uenum em) strimcrlf(szField); strimall(szField); if(NULL == (pstKey = pFindField(ps->m_stKey, ps->m_lIdxNum, szField))) + { + fprintf(stderr, "field %s not define\n", szField); return RC_FAIL; + } strcpy(ps->m_stGrpUp[ps->m_lGrpUp].m_szField, szField); ps->m_stGrpUp[ps->m_lGrpUp].m_lFrom = pstKey->m_lFrom; @@ -600,8 +609,11 @@ long lIndexField(char *s, TblDef *ps, Uenum em) ps->m_lGrpUp ++; } - if(0 == ps->m_lGrpUp) + if(0 == ps->m_lGrpUp || ps->m_lGrpLen > MAX_INDEX_LEN) + { + fprintf(stderr, "index is too long or index field lost\n"); return RC_FAIL; + } return RC_SUCC; } else if(HASHID == em) @@ -613,7 +625,11 @@ long lIndexField(char *s, TblDef *ps, Uenum em) strimcrlf(szField); strimall(szField); if(NULL == (pstKey = pFindField(ps->m_stKey, ps->m_lIdxNum, szField))) + { + fprintf(stderr, "field %s not define\n", szField); return RC_FAIL; + } + strcpy(ps->m_stGrpUp[ps->m_lGrpUp].m_szField, szField); ps->m_stGrpUp[ps->m_lGrpUp].m_lFrom = pstKey->m_lFrom; ps->m_stGrpUp[ps->m_lGrpUp].m_lLen = pstKey->m_lLen; @@ -622,11 +638,15 @@ long lIndexField(char *s, TblDef *ps, Uenum em) ps->m_lGrpUp ++; } - if(0 == ps->m_lGrpUp) + if(0 == ps->m_lGrpUp || ps->m_lGrpLen > MAX_INDEX_LEN) + { + fprintf(stderr, "index is too long or index field lost\n"); return RC_FAIL; + } return RC_SUCC; } + fprintf(stderr, "create index syntax error\n"); return RC_FAIL; } @@ -788,10 +808,7 @@ long lAnalysIndex(char *s, long len, TblDef *ps, bool bQueue) } if(RC_SUCC != lRet) - { - fprintf(stderr, "parse create syntax error\n"); return RC_FAIL; - } } return RC_SUCC; @@ -2629,6 +2646,8 @@ long lParseAdorn(SATvm *pstSavm, char *pszAdorn, long lCount, TField *pstFiel long lNumber, i, j; char szWord[64], szField[512], szOrder[512]; + sltrim(pszAdorn); + srtrim(pszAdorn); if(0 == strlen(pszAdorn)) return RC_SUCC; diff --git a/src/tcp.c b/src/tcp.c index 72927e2..8e221dd 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -158,7 +158,7 @@ void vTraceLog(const char *pszFile, int nLine, const char *fmt, ...) pszFile, nLine, getpid(), syscall(SYS_gettid), ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, tb.millitm, szMsg); #else - fprintf(fp, "P=%d|T=%-7ld|D=%04d%02d%02d %02d%02d%02d:%03d %s\n", + fprintf(fp, "P=%d|T=%d|D=%04d%02d%02d %02d%02d%02d:%03d %s\n", getpid(), syscall(SYS_gettid), ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, tb.millitm, szMsg); #endif @@ -4281,9 +4281,15 @@ void* pParsePacket(SATvm *pstSavm, void *pstVoid, TFace *pstFace, void *pvBuf pstCond = &pstSavm->stUpdt; memcpy(&pstCond->uFldcmp, pvData, sizeof(uint)); - if(0 == pstCond->uFldcmp) return pvBuffer; + if(0 == pstCond->uFldcmp) + { + memset(pvBuffer, 0, pstFace->m_lDLen); + return pvBuffer; + } - for(i = 0, pvData += sizeof(uint), pstVoid += pstFace->m_lDLen; i < pstCond->uFldcmp; i ++) + pstVoid += pstFace->m_lDLen; + memset(pstVoid, 0, pstFace->m_lDLen); + for(i = 0, pvData += sizeof(uint); i < pstCond->uFldcmp; i ++) { pstFld = &pstCond->stFdKey[i]; memcpy(pstFld, pvData, sizeof(FdKey)); @@ -5026,8 +5032,6 @@ long lTvmInsert(SATvm *pstSavm) checkbuffer(pstSavm, pstRun, 1); memcpy(pstRun->pstVoid + sizeof(TFace), pstSavm->pstVoid, pstSavm->lSize); -fprintf(stderr, "Benum:%d, Uenum:%d, TABLE:%d, uint:%d, uint:%d, size_t:%d\n", pstFace->m_enum, - pstFace->m_lFind, pstFace->m_table, pstFace->m_lDLen, pstFace->m_lErrno, pstFace->m_lRows); if(lWrite != lSendBuffer(pstSavm->m_skSock, (void *)pstRun->pstVoid, lWrite)) { pstSavm->m_lErrno = SOCK_COM_EXCP; diff --git a/src/tree.c b/src/tree.c index 5e78b96..d513c15 100644 --- a/src/tree.c +++ b/src/tree.c @@ -180,6 +180,8 @@ void vPrintHex(char *s, long lIdx, bool bf) { int i = 0; FILE *fp = NULL; + + if(lIdx <= 0) return ; if(!bf) { @@ -3375,6 +3377,7 @@ SHTree* pInsertGroup(SATvm *pstSavm, void *pvAddr, SHTree *pstRoot, void *psvIdx return NULL; } + *ppstTruck = pstTruck; return pstRoot; } } diff --git a/tbl_user_info.def b/tbl_user_info.def index 1c3e145..675b87a 100644 --- a/tbl_user_info.def +++ b/tbl_user_info.def @@ -1,5 +1,5 @@ set TABLE=20 -set TABLESPACE=50000 +set TABLESPACE=1000 create table TBL_USER_INFO ( From 7aa2bb87d1b535cb557c587730cf84980ceb69a8 Mon Sep 17 00:00:00 2001 From: deffpuzzl Date: Wed, 8 Aug 2018 13:47:54 +0800 Subject: [PATCH 2/2] fix some bugs --- demo/makefile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/demo/makefile b/demo/makefile index 18189ad..85a6ce8 100755 --- a/demo/makefile +++ b/demo/makefile @@ -28,15 +28,12 @@ REPLACE=replace POPUP=popup PRESSURE=press_demo TVMPUSH=tvmpush -TVMINSERT=tvminsert ASYPUSH=asypush THREAD=thread_demo -all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) $(TVMPUSH) $(ASYPUSH) $(TVMPOP) $(TVMREPLACE) $(THREAD) $(TVMINSERT) clean +all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) $(TVMPUSH) $(ASYPUSH) $(TVMPOP) $(TVMREPLACE) $(THREAD) clean $(CREATE): create_table.o $(CC) -o $@ $< $(LIBDIR) -$(TVMINSERT): tvminsert.o - $(CC) -o $@ $< $(LIBDIR) $(TVMREPLACE): tvmreplace.o $(CC) -o $@ $< $(LIBDIR) $(TVMPOP): tvmpop.o