提交 84d15a7e 编写于 作者: S shenglian zhou

fix bug on show vnodes with dnode ep

上级 e45b047e
...@@ -87,7 +87,6 @@ static uint8_t convertRelationalOperator(SStrToken *pToken); ...@@ -87,7 +87,6 @@ static uint8_t convertRelationalOperator(SStrToken *pToken);
static int32_t validateSelectNodeList(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SArray* pSelNodeList, bool isSTable, bool joinQuery, bool timeWindowQuery); static int32_t validateSelectNodeList(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SArray* pSelNodeList, bool isSTable, bool joinQuery, bool timeWindowQuery);
static bool validateIpAddress(const char* ip, size_t size);
static bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo); static bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo);
static bool functionCompatibleCheck(SQueryInfo* pQueryInfo, bool joinQuery, bool twQuery); static bool functionCompatibleCheck(SQueryInfo* pQueryInfo, bool joinQuery, bool twQuery);
...@@ -3220,7 +3219,6 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -3220,7 +3219,6 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
const char* msg1 = "invalid name"; const char* msg1 = "invalid name";
const char* msg2 = "pattern filter string too long"; const char* msg2 = "pattern filter string too long";
const char* msg3 = "database name too long"; const char* msg3 = "database name too long";
const char* msg4 = "invalid ip address";
const char* msg5 = "database name is empty"; const char* msg5 = "database name is empty";
const char* msg6 = "pattern string is empty"; const char* msg6 = "pattern string is empty";
...@@ -3268,17 +3266,11 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -3268,17 +3266,11 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
} }
} else if (showType == TSDB_MGMT_TABLE_VNODES) { } else if (showType == TSDB_MGMT_TABLE_VNODES) {
if (pShowInfo->prefix.type == 0) { if (pShowInfo->prefix.type == 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), "No specified ip of dnode"); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), "No specified dnode ep");
} }
// show vnodes may be ip addr of dnode in payload if (pShowInfo->prefix.type == TK_STRING) {
SStrToken* pDnodeIp = &pShowInfo->prefix; pShowInfo->prefix.n = strdequote(pShowInfo->prefix.z);
if (pDnodeIp->n >= TSDB_IPv4ADDR_LEN) { // ip addr is too long
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (!validateIpAddress(pDnodeIp->z, pDnodeIp->n)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
} }
} }
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
...@@ -3331,16 +3323,6 @@ static int32_t setCompactVnodeInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -3331,16 +3323,6 @@ static int32_t setCompactVnodeInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
bool validateIpAddress(const char* ip, size_t size) {
char tmp[128] = {0}; // buffer to build null-terminated string
assert(size < 128);
strncpy(tmp, ip, size);
in_addr_t epAddr = taosInetAddr(tmp);
return epAddr != INADDR_NONE;
}
int32_t tscTansformFuncForSTableQuery(SQueryInfo* pQueryInfo) { int32_t tscTansformFuncForSTableQuery(SQueryInfo* pQueryInfo) {
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
......
...@@ -75,131 +75,131 @@ ...@@ -75,131 +75,131 @@
#define TK_SCORES 57 #define TK_SCORES 57
#define TK_GRANTS 58 #define TK_GRANTS 58
#define TK_VNODES 59 #define TK_VNODES 59
#define TK_IPTOKEN 60 #define TK_DOT 60
#define TK_DOT 61 #define TK_CREATE 61
#define TK_CREATE 62 #define TK_TABLE 62
#define TK_TABLE 63 #define TK_STABLE 63
#define TK_STABLE 64 #define TK_DATABASE 64
#define TK_DATABASE 65 #define TK_TABLES 65
#define TK_TABLES 66 #define TK_STABLES 66
#define TK_STABLES 67 #define TK_VGROUPS 67
#define TK_VGROUPS 68 #define TK_DROP 68
#define TK_DROP 69 #define TK_TOPIC 69
#define TK_TOPIC 70 #define TK_FUNCTION 70
#define TK_FUNCTION 71 #define TK_DNODE 71
#define TK_DNODE 72 #define TK_USER 72
#define TK_USER 73 #define TK_ACCOUNT 73
#define TK_ACCOUNT 74 #define TK_USE 74
#define TK_USE 75 #define TK_DESCRIBE 75
#define TK_DESCRIBE 76 #define TK_ALTER 76
#define TK_ALTER 77 #define TK_PASS 77
#define TK_PASS 78 #define TK_PRIVILEGE 78
#define TK_PRIVILEGE 79 #define TK_LOCAL 79
#define TK_LOCAL 80 #define TK_COMPACT 80
#define TK_COMPACT 81 #define TK_LP 81
#define TK_LP 82 #define TK_RP 82
#define TK_RP 83 #define TK_IF 83
#define TK_IF 84 #define TK_EXISTS 84
#define TK_EXISTS 85 #define TK_AS 85
#define TK_AS 86 #define TK_OUTPUTTYPE 86
#define TK_OUTPUTTYPE 87 #define TK_AGGREGATE 87
#define TK_AGGREGATE 88 #define TK_BUFSIZE 88
#define TK_BUFSIZE 89 #define TK_PPS 89
#define TK_PPS 90 #define TK_TSERIES 90
#define TK_TSERIES 91 #define TK_DBS 91
#define TK_DBS 92 #define TK_STORAGE 92
#define TK_STORAGE 93 #define TK_QTIME 93
#define TK_QTIME 94 #define TK_CONNS 94
#define TK_CONNS 95 #define TK_STATE 95
#define TK_STATE 96 #define TK_COMMA 96
#define TK_COMMA 97 #define TK_KEEP 97
#define TK_KEEP 98 #define TK_CACHE 98
#define TK_CACHE 99 #define TK_REPLICA 99
#define TK_REPLICA 100 #define TK_QUORUM 100
#define TK_QUORUM 101 #define TK_DAYS 101
#define TK_DAYS 102 #define TK_MINROWS 102
#define TK_MINROWS 103 #define TK_MAXROWS 103
#define TK_MAXROWS 104 #define TK_BLOCKS 104
#define TK_BLOCKS 105 #define TK_CTIME 105
#define TK_CTIME 106 #define TK_WAL 106
#define TK_WAL 107 #define TK_FSYNC 107
#define TK_FSYNC 108 #define TK_COMP 108
#define TK_COMP 109 #define TK_PRECISION 109
#define TK_PRECISION 110 #define TK_UPDATE 110
#define TK_UPDATE 111 #define TK_CACHELAST 111
#define TK_CACHELAST 112 #define TK_PARTITIONS 112
#define TK_PARTITIONS 113 #define TK_UNSIGNED 113
#define TK_UNSIGNED 114 #define TK_TAGS 114
#define TK_TAGS 115 #define TK_USING 115
#define TK_USING 116 #define TK_NULL 116
#define TK_NULL 117 #define TK_NOW 117
#define TK_NOW 118 #define TK_SELECT 118
#define TK_SELECT 119 #define TK_UNION 119
#define TK_UNION 120 #define TK_ALL 120
#define TK_ALL 121 #define TK_DISTINCT 121
#define TK_DISTINCT 122 #define TK_FROM 122
#define TK_FROM 123 #define TK_VARIABLE 123
#define TK_VARIABLE 124 #define TK_INTERVAL 124
#define TK_INTERVAL 125 #define TK_SESSION 125
#define TK_SESSION 126 #define TK_STATE_WINDOW 126
#define TK_STATE_WINDOW 127 #define TK_FILL 127
#define TK_FILL 128 #define TK_SLIDING 128
#define TK_SLIDING 129 #define TK_ORDER 129
#define TK_ORDER 130 #define TK_BY 130
#define TK_BY 131 #define TK_ASC 131
#define TK_ASC 132 #define TK_DESC 132
#define TK_DESC 133 #define TK_GROUP 133
#define TK_GROUP 134 #define TK_HAVING 134
#define TK_HAVING 135 #define TK_LIMIT 135
#define TK_LIMIT 136 #define TK_OFFSET 136
#define TK_OFFSET 137 #define TK_SLIMIT 137
#define TK_SLIMIT 138 #define TK_SOFFSET 138
#define TK_SOFFSET 139 #define TK_WHERE 139
#define TK_WHERE 140 #define TK_RESET 140
#define TK_RESET 141 #define TK_QUERY 141
#define TK_QUERY 142 #define TK_SYNCDB 142
#define TK_SYNCDB 143 #define TK_ADD 143
#define TK_ADD 144 #define TK_COLUMN 144
#define TK_COLUMN 145 #define TK_MODIFY 145
#define TK_MODIFY 146 #define TK_TAG 146
#define TK_TAG 147 #define TK_CHANGE 147
#define TK_CHANGE 148 #define TK_SET 148
#define TK_SET 149 #define TK_KILL 149
#define TK_KILL 150 #define TK_CONNECTION 150
#define TK_CONNECTION 151 #define TK_STREAM 151
#define TK_STREAM 152 #define TK_COLON 152
#define TK_COLON 153 #define TK_ABORT 153
#define TK_ABORT 154 #define TK_AFTER 154
#define TK_AFTER 155 #define TK_ATTACH 155
#define TK_ATTACH 156 #define TK_BEFORE 156
#define TK_BEFORE 157 #define TK_BEGIN 157
#define TK_BEGIN 158 #define TK_CASCADE 158
#define TK_CASCADE 159 #define TK_CLUSTER 159
#define TK_CLUSTER 160 #define TK_CONFLICT 160
#define TK_CONFLICT 161 #define TK_COPY 161
#define TK_COPY 162 #define TK_DEFERRED 162
#define TK_DEFERRED 163 #define TK_DELIMITERS 163
#define TK_DELIMITERS 164 #define TK_DETACH 164
#define TK_DETACH 165 #define TK_EACH 165
#define TK_EACH 166 #define TK_END 166
#define TK_END 167 #define TK_EXPLAIN 167
#define TK_EXPLAIN 168 #define TK_FAIL 168
#define TK_FAIL 169 #define TK_FOR 169
#define TK_FOR 170 #define TK_IGNORE 170
#define TK_IGNORE 171 #define TK_IMMEDIATE 171
#define TK_IMMEDIATE 172 #define TK_INITIALLY 172
#define TK_INITIALLY 173 #define TK_INSTEAD 173
#define TK_INSTEAD 174 #define TK_MATCH 174
#define TK_MATCH 175 #define TK_KEY 175
#define TK_KEY 176 #define TK_OF 176
#define TK_OF 177 #define TK_RAISE 177
#define TK_RAISE 178 #define TK_REPLACE 178
#define TK_REPLACE 179 #define TK_RESTRICT 179
#define TK_RESTRICT 180 #define TK_ROW 180
#define TK_ROW 181 #define TK_STATEMENT 181
#define TK_STATEMENT 182 #define TK_TRIGGER 182
#define TK_TRIGGER 183 #define TK_VIEW 183
#define TK_VIEW 184 #define TK_IPTOKEN 184
#define TK_SEMI 185 #define TK_SEMI 185
#define TK_NONE 186 #define TK_NONE 186
#define TK_PREV 187 #define TK_PREV 187
......
...@@ -1181,7 +1181,7 @@ static int32_t mnodeGetVnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC ...@@ -1181,7 +1181,7 @@ static int32_t mnodeGetVnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
pShow->bytes[cols] = 4; pShow->bytes[cols] = 4;
pSchema[cols].type = TSDB_DATA_TYPE_INT; pSchema[cols].type = TSDB_DATA_TYPE_INT;
strcpy(pSchema[cols].name, "vnode"); strcpy(pSchema[cols].name, "vgId");
pSchema[cols].bytes = htons(pShow->bytes[cols]); pSchema[cols].bytes = htons(pShow->bytes[cols]);
cols++; cols++;
...@@ -1243,8 +1243,10 @@ static int32_t mnodeRetrieveVnodes(SShowObj *pShow, char *data, int32_t rows, vo ...@@ -1243,8 +1243,10 @@ static int32_t mnodeRetrieveVnodes(SShowObj *pShow, char *data, int32_t rows, vo
cols++; cols++;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
strcpy(pWrite, syncRole[pVgid->role]); STR_TO_VARSTR(pWrite, syncRole[pVgid->role]);
cols++; cols++;
numOfRows++;
} }
} }
......
...@@ -80,7 +80,7 @@ cmd ::= SHOW SCORES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_SCORES, 0, 0); ...@@ -80,7 +80,7 @@ cmd ::= SHOW SCORES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_SCORES, 0, 0);
cmd ::= SHOW GRANTS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_GRANTS, 0, 0); } cmd ::= SHOW GRANTS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_GRANTS, 0, 0); }
cmd ::= SHOW VNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, 0, 0); } cmd ::= SHOW VNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, 0, 0); }
cmd ::= SHOW VNODES IPTOKEN(X). { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, &X, 0); } cmd ::= SHOW VNODES ids(X). { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, &X, 0); }
%type dbPrefix {SStrToken} %type dbPrefix {SStrToken}
......
此差异已折叠。
...@@ -36,8 +36,12 @@ class TDTestCase: ...@@ -36,8 +36,12 @@ class TDTestCase:
ret = tdSql.query('show dnodes') ret = tdSql.query('show dnodes')
ret = tdSql.execute('alter dnode "%s" debugFlag 135' % tdSql.getData(0,0)) dnodeId = tdSql.getData(0, 0);
tdLog.info('alter dnode "%s" debugFlag 135 -> ret: %d' % (tdSql.getData(0, 0), ret)) dnodeEndpoint = tdSql.getData(0, 1);
ret = tdSql.execute('alter dnode "%s" debugFlag 135' % dnodeId)
tdLog.info('alter dnode "%s" debugFlag 135 -> ret: %d' % (dnodeId, ret))
ret = tdSql.query('show mnodes') ret = tdSql.query('show mnodes')
tdSql.checkRows(1) tdSql.checkRows(1)
...@@ -45,6 +49,13 @@ class TDTestCase: ...@@ -45,6 +49,13 @@ class TDTestCase:
ret = tdSql.query('show vgroups') ret = tdSql.query('show vgroups')
tdSql.checkRows(0) tdSql.checkRows(0)
tdSql.execute('create stable st (ts timestamp, f int) tags(t int)')
tdSql.execute('create table ct1 using st tags(1)');
tdSql.execute('create table ct2 using st tags(2)');
ret = tdSql.query('show vnodes "{}"'.format(dnodeEndpoint))
tdSql.checkRows(1)
tdSql.checkData(0, 0, 2)
tdSql.checkData(0, 1, "master")
def stop(self): def stop(self):
tdSql.close() tdSql.close()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册