Merge pull request #16743 from taosdata/fix/mnode
enh: add table_prefix and table_suffix options to database
This commit is contained in:
commit
45f352114d
|
@ -69,7 +69,18 @@ static FORCE_INLINE void taosEncryptPass_c(uint8_t *inBuf, size_t len, char *tar
|
|||
memcpy(target, buf, TSDB_PASSWORD_LEN);
|
||||
}
|
||||
|
||||
#define taosGetTbHashVal(tbname, tblen, method, prefix, suffix) MurmurHash3_32((tbname), (tblen))
|
||||
static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, int32_t method, int32_t prefix,
|
||||
int32_t suffix) {
|
||||
if (prefix == 0 && suffix == 0) {
|
||||
return MurmurHash3_32(tbname, tblen);
|
||||
} else {
|
||||
if (tblen <= (prefix + suffix)) {
|
||||
return MurmurHash3_32(tbname, tblen);
|
||||
} else {
|
||||
return MurmurHash3_32(tbname + prefix, tblen - prefix - suffix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -103,6 +103,8 @@ static const SSysDbTableSchema userDBSchema[] = {
|
|||
{.name = "wal_roll_period", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||
{.name = "wal_segment_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = true},
|
||||
{.name = "sst_trigger", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||
{.name = "table_prefix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||
{.name = "table_suffix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||
};
|
||||
|
||||
static const SSysDbTableSchema userFuncSchema[] = {
|
||||
|
|
|
@ -513,6 +513,12 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (dbObj.cfg.hashPrefix > 0) {
|
||||
int32_t dbLen = strlen(dbObj.name) + 1;
|
||||
mInfo("db:%s, hashPrefix adjust from %d to %d", dbObj.name, dbObj.cfg.hashPrefix, dbObj.cfg.hashPrefix + dbLen);
|
||||
dbObj.cfg.hashPrefix += dbLen;
|
||||
}
|
||||
|
||||
SVgObj *pVgroups = NULL;
|
||||
if (mndAllocVgroup(pMnode, &dbObj, &pVgroups) != 0) {
|
||||
mError("db:%s, failed to create since %s", pCreate->db, terrstr());
|
||||
|
@ -1710,6 +1716,16 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
|||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, rows, (const char *)&pDb->cfg.sstTrigger, false);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
int16_t hashPrefix = pDb->cfg.hashPrefix;
|
||||
if (hashPrefix > 0) {
|
||||
hashPrefix = pDb->cfg.hashPrefix - strlen(pDb->name) - 1;
|
||||
}
|
||||
colDataAppend(pColInfo, rows, (const char *)&hashPrefix, false);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, rows, (const char *)&pDb->cfg.hashSuffix, false);
|
||||
}
|
||||
|
||||
taosMemoryFree(buf);
|
||||
|
|
|
@ -221,6 +221,7 @@
|
|||
./test.sh -f tsim/table/describe.sim
|
||||
./test.sh -f tsim/table/double.sim
|
||||
./test.sh -f tsim/table/float.sim
|
||||
./test.sh -f tsim/table/hash.sim
|
||||
./test.sh -f tsim/table/int.sim
|
||||
./test.sh -f tsim/table/limit.sim
|
||||
./test.sh -f tsim/table/smallint.sim
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
system sh/stop_dnodes.sh
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sql connect
|
||||
|
||||
#=========== prepare
|
||||
#sql create database d1 vgroups 2
|
||||
sql create database d1 vgroups 2 table_prefix 3 table_suffix 2
|
||||
sql select * from information_schema.ins_databases
|
||||
print $data(d1)[27] $data(d1)[28]
|
||||
if $data(d1)[27] != 3 then
|
||||
return -1
|
||||
endi
|
||||
if $data(d1)[28] != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql use d1;
|
||||
sql create table st (ts timestamp, i int) tags (j int);
|
||||
sql create table st_ct_1 using st tags(3) st_ct_2 using st tags(4) st_ct_3 using st tags(5) st_ct_4 using st tags(6) st_ct_5 using st tags(7)
|
||||
sql insert into st_ct_1 values(now+1s, 1)
|
||||
sql insert into st_ct_1 values(now+2s, 2)
|
||||
sql insert into st_ct_1 values(now+3s, 3)
|
||||
sql insert into st_ct_2 values(now+1s, 1)
|
||||
sql insert into st_ct_2 values(now+2s, 2)
|
||||
sql insert into st_ct_2 values(now+3s, 3)
|
||||
sql insert into st_ct_3 values(now+1s, 1)
|
||||
sql insert into st_ct_3 values(now+2s, 2)
|
||||
sql insert into st_ct_3 values(now+3s, 2)
|
||||
sql insert into st_ct_4 values(now+1s, 1)
|
||||
sql insert into st_ct_4 values(now+2s, 2)
|
||||
sql insert into st_ct_4 values(now+3s, 2)
|
||||
sql insert into st_ct_5 values(now+1s, 1)
|
||||
sql insert into st_ct_5 values(now+2s, 2)
|
||||
sql insert into st_ct_5 values(now+3s, 2)
|
||||
|
||||
# check query
|
||||
sql select * from st
|
||||
if $rows != 15 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# check table vgroup
|
||||
sql select * from information_schema.ins_tables where db_name = 'd1'
|
||||
if $data(st_ct_1)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(st_ct_2)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(st_ct_3)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(st_ct_4)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(st_ct_5)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# check invalid table name
|
||||
sql create table c1 using st tags(3)
|
||||
sql create table c12 using st tags(3)
|
||||
sql create table c123 using st tags(3)
|
||||
sql create table c1234 using st tags(3)
|
||||
sql create table c12345 using st tags(3)
|
||||
sql select * from information_schema.ins_tables where db_name = 'd1'
|
||||
if $data(c1)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(c12)[6] != 3 then
|
||||
return -1
|
||||
endi
|
||||
if $data(c123)[6] != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data(c1234)[6] != 3 then
|
||||
return -1
|
||||
endi
|
||||
if $data(c12345)[6] != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
Loading…
Reference in New Issue