提交 12f716b3 编写于 作者: A Alex Duan

[TS-238-D]<fix>(tsdb): deal block readonly modify delete status

上级 6185cef9
...@@ -3331,7 +3331,7 @@ int buildTableDelDataMsg(SSqlObj* pSql, SSqlCmd* pCmd, SQueryInfo* pQueryInfo, S ...@@ -3331,7 +3331,7 @@ int buildTableDelDataMsg(SSqlObj* pSql, SSqlCmd* pCmd, SQueryInfo* pQueryInfo, S
tscDebug("0x%"PRIx64" table deldata submit msg built, numberOfEP:%d", pSql->self, pSql->epSet.numOfEps); tscDebug("0x%"PRIx64" table deldata submit msg built, numberOfEP:%d", pSql->self, pSql->epSet.numOfEps);
// set payload // set payload
size_t payloadLen = sizeof(SMsgDesc) + sizeof(SSubmitMsg) + sizeof(SSubmitBlk) + sizeof(SControlData); size_t payloadLen = sizeof(SMsgDesc) + sizeof(SSubmitMsg) + sizeof(SSubmitBlk) + sizeof(SControlData) + sizeof(int32_t);
int32_t ret = tscAllocPayload(pCmd, payloadLen); int32_t ret = tscAllocPayload(pCmd, payloadLen);
if (ret != TSDB_CODE_SUCCESS) { if (ret != TSDB_CODE_SUCCESS) {
return ret; return ret;
...@@ -3351,22 +3351,24 @@ int buildTableDelDataMsg(SSqlObj* pSql, SSqlCmd* pCmd, SQueryInfo* pQueryInfo, S ...@@ -3351,22 +3351,24 @@ int buildTableDelDataMsg(SSqlObj* pSql, SSqlCmd* pCmd, SQueryInfo* pQueryInfo, S
pMsgDesc->numOfVnodes = htonl(1); pMsgDesc->numOfVnodes = htonl(1);
// SSubmitMsg // SSubmitMsg
int32_t size = pCmd->payloadLen - sizeof(SMsgDesc); int32_t size = pCmd->payloadLen - sizeof(SMsgDesc);
pSubmitMsg->header.vgId = htonl(pTableMeta->vgId); pSubmitMsg->header.vgId = htonl(pTableMeta->vgId);
pSubmitMsg->header.contLen = htonl(size); pSubmitMsg->header.contLen = htonl(size);
pSubmitMsg->length = pSubmitMsg->header.contLen; pSubmitMsg->length = pSubmitMsg->header.contLen;
pSubmitMsg->numOfBlocks = htonl(1); pSubmitMsg->numOfBlocks = htonl(1);
// SSubmitBlk // SSubmitBlk
pSubmitBlk->flag = FLAG_BLK_CONTROL; // this is control block pSubmitBlk->flag = FLAG_BLK_CONTROL; // this is control block
pSubmitBlk->tid = htonl(pTableMeta->id.tid); pSubmitBlk->tid = htonl(pTableMeta->id.tid);
pSubmitBlk->uid = htobe64(pTableMeta->id.uid); pSubmitBlk->uid = htobe64(pTableMeta->id.uid);
pSubmitBlk->numOfRows = htons(1); pSubmitBlk->numOfRows = htons(1);
pSubmitBlk->schemaLen = 0; // only server return TSDB_CODE_TDB_TABLE_RECONFIGURE need schema attached pSubmitBlk->schemaLen = 0; // only server return TSDB_CODE_TDB_TABLE_RECONFIGURE need schema attached
pSubmitBlk->sversion = htonl(pTableMeta->sversion); pSubmitBlk->sversion = htonl(pTableMeta->sversion);
pSubmitBlk->dataLen = htonl(sizeof(SControlData)); pSubmitBlk->dataLen = htonl(sizeof(SControlData) + sizeof(int32_t));
// SControlData // SControlData
pControlData->command = htonl(CMD_DELETE_DATA); pControlData->command = htonl(CMD_DELETE_DATA);
pControlData->win.skey = htobe64(pQueryInfo->window.skey); pControlData->win.skey = htobe64(pQueryInfo->window.skey);
pControlData->win.ekey = htobe64(pQueryInfo->window.ekey); pControlData->win.ekey = htobe64(pQueryInfo->window.ekey);
pControlData->tnum = htonl(1);
pControlData->tids[0] = htonl(pTableMeta->id.tid);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
...@@ -1005,9 +1005,13 @@ typedef struct { ...@@ -1005,9 +1005,13 @@ typedef struct {
#define CMD_DELETE_DATA 0x00000001 #define CMD_DELETE_DATA 0x00000001
#define CMD_TRUNCATE 0x00000002 #define CMD_TRUNCATE 0x00000002
#define GET_CTLDATA_SIZE(p) (sizeof(SControlData) + p->tnum * sizeof(int32_t))
typedef struct SControlData{ typedef struct SControlData{
uint32_t command; // see define CMD_??? uint32_t command; // see define CMD_???
STimeWindow win; STimeWindow win;
int32_t tnum; // tids nums
int32_t tids[]; // delete table tid
} SControlData; } SControlData;
enum { enum {
......
...@@ -20,16 +20,13 @@ extern "C" { ...@@ -20,16 +20,13 @@ extern "C" {
#endif #endif
// SControlData addition information // SControlData addition information
#define GET_CTLINFO_SIZE(p) (sizeof(SControlDataInfo) + p.ctlData.tnum * sizeof(int32_t))
typedef struct { typedef struct {
SControlData ctlData;
// addition info // addition info
uint64_t uid; // table unique id
int32_t tid; // table id
tsem_t* pSem; tsem_t* pSem;
bool memNull; // pRepo->mem is NULL, this is true bool memNull; // pRepo->mem is NULL, this is true
uint64_t* uids; // delete table
int32_t uidCount;
SShellSubmitRspMsg *pRsp; SShellSubmitRspMsg *pRsp;
SControlData ctlData;
} SControlDataInfo; } SControlDataInfo;
// -------- interface --------- // -------- interface ---------
......
...@@ -240,7 +240,8 @@ int tsdbWriteBlockIdx(SDFile *pHeadf, SArray *pIdxA, void **ppBuf) { ...@@ -240,7 +240,8 @@ int tsdbWriteBlockIdx(SDFile *pHeadf, SArray *pIdxA, void **ppBuf) {
pBlkIdx = (SBlockIdx *)taosArrayGet(pIdxA, i); pBlkIdx = (SBlockIdx *)taosArrayGet(pIdxA, i);
size = tsdbEncodeSBlockIdx(NULL, pBlkIdx); size = tsdbEncodeSBlockIdx(NULL, pBlkIdx);
if (tsdbMakeRoom(ppBuf, tlen + size) < 0) return -1; if (tsdbMakeRoom(ppBuf, tlen + size) < 0)
return -1;
void *ptr = POINTER_SHIFT(*ppBuf, tlen); void *ptr = POINTER_SHIFT(*ppBuf, tlen);
tsdbEncodeSBlockIdx(&ptr, pBlkIdx); tsdbEncodeSBlockIdx(&ptr, pBlkIdx);
...@@ -249,7 +250,8 @@ int tsdbWriteBlockIdx(SDFile *pHeadf, SArray *pIdxA, void **ppBuf) { ...@@ -249,7 +250,8 @@ int tsdbWriteBlockIdx(SDFile *pHeadf, SArray *pIdxA, void **ppBuf) {
} }
tlen += sizeof(TSCKSUM); tlen += sizeof(TSCKSUM);
if (tsdbMakeRoom(ppBuf, tlen) < 0) return -1; if (tsdbMakeRoom(ppBuf, tlen) < 0)
return -1;
taosCalcChecksumAppend(0, (uint8_t *)(*ppBuf), tlen); taosCalcChecksumAppend(0, (uint8_t *)(*ppBuf), tlen);
if (tsdbAppendDFile(pHeadf, *ppBuf, tlen, &offset) < tlen) { if (tsdbAppendDFile(pHeadf, *ppBuf, tlen, &offset) < tlen) {
......
...@@ -1122,7 +1122,6 @@ static int tsdbUpdateTableLatestInfo(STsdbRepo *pRepo, STable *pTable, SMemRow r ...@@ -1122,7 +1122,6 @@ static int tsdbUpdateTableLatestInfo(STsdbRepo *pRepo, STable *pTable, SMemRow r
// Control Data // Control Data
int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmitRspMsg *pRsp, tsem_t** ppSem) { int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmitRspMsg *pRsp, tsem_t** ppSem) {
int32_t ret = TSDB_CODE_SUCCESS; int32_t ret = TSDB_CODE_SUCCESS;
assert(pBlock->dataLen == sizeof(SControlData));
SControlData* pCtlData = (SControlData* )pBlock->data; SControlData* pCtlData = (SControlData* )pBlock->data;
// INIT SEM FOR ASYNC WAIT COMMIT RESULT // INIT SEM FOR ASYNC WAIT COMMIT RESULT
...@@ -1136,15 +1135,18 @@ int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmit ...@@ -1136,15 +1135,18 @@ int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmit
// anti-serialize // anti-serialize
pCtlData->command = htonl(pCtlData->command); pCtlData->command = htonl(pCtlData->command);
pCtlData->tnum = htonl(pCtlData->tnum);
pCtlData->win.skey = htobe64(pCtlData->win.skey); pCtlData->win.skey = htobe64(pCtlData->win.skey);
pCtlData->win.ekey = htobe64(pCtlData->win.ekey); pCtlData->win.ekey = htobe64(pCtlData->win.ekey);
for (int32_t i=0; i < pCtlData->tnum; i++) {
pCtlData->tids[i] = htonl(pCtlData->tids[i]);
}
// server data set // server data set
SControlDataInfo* pNew = (SControlDataInfo* )tmalloc(sizeof(SControlDataInfo)); size_t nsize = sizeof(SControlDataInfo) + pCtlData->tnum * sizeof(int32_t);
memset(pNew, 0, sizeof(SControlDataInfo)); SControlDataInfo* pNew = (SControlDataInfo* )tmalloc(nsize);
pNew->ctlData = *pCtlData; memset(pNew, 0, nsize);
pNew->uid = pBlock->uid; memcpy(&pNew->ctlData, pCtlData, GET_CTLDATA_SIZE(pCtlData));
pNew->tid = pBlock->tid;
pNew->pRsp = pRsp; pNew->pRsp = pRsp;
if (ppSem) if (ppSem)
pNew->pSem = *ppSem; pNew->pSem = *ppSem;
...@@ -1155,9 +1157,12 @@ int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmit ...@@ -1155,9 +1157,12 @@ int32_t tsdbInsertControlData(STsdbRepo* pRepo, SSubmitBlk* pBlock, SShellSubmit
} }
// if async post failed , must set wait event ppSem NULL // if async post failed , must set wait event ppSem NULL
if(ret != TSDB_CODE_SUCCESS && ppSem) { if(ret != TSDB_CODE_SUCCESS) {
tsem_destroy(*ppSem); if(*ppSem) {
*ppSem = NULL; tsem_destroy(*ppSem);
*ppSem = NULL;
}
tfree(pNew);
} }
return ret; return ret;
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册