Coverage Report

Created: 2026-10-22 06:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/tdengine/source/common/src/msg/xnode.c
Line
Count
Source
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * SPDX-License-Identifier: AGPL-3.0-or-later
5
 *
6
 * This program is free software: you can use, redistribute, and/or modify
7
 * it under the terms of the GNU Affero General Public License, version 3
8
 * or later ("AGPL"), as published by the Free Software Foundation.
9
 *
10
 * This program is distributed in the hope that it will be useful, but WITHOUT
11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
 * FITNESS FOR A PARTICULAR PURPOSE.
13
 *
14
 * You should have received a copy of the GNU Affero General Public License
15
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16
 */
17
18
#define _DEFAULT_SOURCE
19
20
#include <stdint.h>
21
#include <stdio.h>
22
#include "osMemPool.h"
23
#include "osMemory.h"
24
#include "taoserror.h"
25
#include "tencode.h"
26
#include "tmsg.h"
27
#include "tutil.h"
28
29
0
CowStr xCreateCowStr(int32_t len, const char *ptr, bool shouldClone) {
30
0
  CowStr cow = {0};
31
0
  if (NULL == ptr) {
32
0
    return cow;
33
0
  }
34
0
  if (shouldClone) {
35
0
    cow.len = len;
36
0
    cow.ptr = taosMemoryCalloc(1, len + 1);
37
0
    if (cow.ptr == NULL) {
38
0
      cow.len = 0;
39
0
      return cow;
40
0
    }
41
0
    (void)memcpy((void*)cow.ptr, ptr, len);
42
0
    ((char*)cow.ptr)[len] = '\0';
43
0
    cow.shouldFree = true;
44
0
  } else {
45
0
    cow.len = len;
46
0
    cow.ptr = ptr;
47
0
    cow.shouldFree = false;
48
0
  }
49
0
  return cow;
50
0
}
51
0
void xSetCowStr(CowStr *cow, int32_t len, const char *ptr, bool shouldFree) {
52
0
  if (cow == NULL) {
53
0
    return;
54
0
  }
55
0
  if (NULL == ptr) {
56
0
    xFreeCowStr(cow);
57
0
    return;
58
0
  }
59
0
  cow->len = len;
60
0
  cow->ptr = taosMemoryCalloc(1, len + 1);
61
0
  if (cow->ptr == NULL) {
62
0
    cow->len = 0;
63
0
    return;
64
0
  }
65
0
  (void)memcpy((void*)cow->ptr, ptr, len);
66
0
  ((char*)cow->ptr)[len] = '\0';
67
0
  cow->shouldFree = shouldFree;
68
0
}
69
0
CowStr xCloneRefCowStr(CowStr *cow) {
70
0
  CowStr ref = {0};
71
0
  if (cow == NULL) {
72
0
    return ref;
73
0
  }
74
0
  ref.len = cow->len;
75
0
  ref.ptr = cow->ptr;
76
0
  ref.shouldFree = false;
77
0
  return ref;
78
0
}
79
80
0
char *xCowStrToStr(CowStr *cow) { return taosStrndupi(cow->ptr, (int64_t)cow->len); }
81
0
void xFreeCowStr(CowStr *cow) {
82
  // printf("Free CowStr: cow=%p, ptr=%p, len=%d, shouldFree=%d\n", cow, cow->ptr, cow->len, cow->shouldFree);
83
0
  if (cow == NULL) {
84
0
    return;
85
0
  }
86
0
  if (cow->shouldFree && cow->ptr != NULL) {
87
0
    taosMemoryFreeClear(cow->ptr);
88
0
    cow->ptr = NULL;
89
0
  }
90
0
  cow->len = 0;
91
0
  cow->ptr = NULL;
92
0
  cow->shouldFree = false;
93
0
}
94
0
int32_t xEncodeCowStr(SEncoder *encoder, CowStr *cow) {
95
0
  if (cow->ptr == NULL) {
96
0
    return tEncodeU32v(encoder, 0);
97
0
  }
98
0
  return tEncodeBinary(encoder, (uint8_t*)cow->ptr, cow->len + 1);
99
0
}
100
0
int32_t xDecodeCowStr(SDecoder *decoder, CowStr *cow, bool shouldClone) {
101
0
  if (decoder == NULL || cow == NULL) {
102
0
    return TSDB_CODE_MND_XNODE_INVALID_MSG;
103
0
  }
104
0
  int32_t code = 0;
105
0
  int32_t  lino = 0;
106
107
0
  if (shouldClone) {
108
0
    uint64_t len = 0;
109
0
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(decoder, (void**)&cow->ptr, &len));
110
0
    if (len == 0) {
111
0
      cow->ptr = NULL;
112
0
      cow->len = 0;
113
0
      cow->shouldFree = false;
114
0
    } else {
115
0
      cow->shouldFree = true;
116
0
      if (((const char *)cow->ptr)[len - 1] != '\0') {
117
0
        TAOS_CHECK_EXIT(TSDB_CODE_MND_XNODE_INVALID_MSG);
118
0
      }
119
0
      cow->len = (int32_t)len - 1;
120
0
    }
121
0
  } else {
122
0
    uint32_t len = 0;
123
0
    TAOS_CHECK_EXIT(tDecodeBinary(decoder, (uint8_t**)&cow->ptr, &len));
124
0
    if (len == 0) {
125
0
      cow->ptr = NULL;
126
0
      cow->len = 0;
127
0
    } else if (((const char *)cow->ptr)[len - 1] != '\0') {
128
0
      TAOS_CHECK_EXIT(TSDB_CODE_MND_XNODE_INVALID_MSG);
129
0
    } else {
130
0
      cow->len = (int32_t)len - 1;
131
0
    }
132
0
    cow->shouldFree = false;
133
0
  }
134
0
_exit:
135
0
  return code;
136
0
}
137
// #define DECODESQL()                                                               \
138
//   do {                                                                            \
139
//     if (!tDecodeIsEnd(&decoder)) {                                                \
140
//       TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->sqlLen));                       \
141
//       if (pReq->sqlLen > 0) {                                                     \
142
//         TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void **)&pReq->sql, NULL)); \
143
//       }                                                                           \
144
//     }                                                                             \
145
//   } while (0)
146
147
// #define ENCODESQL()                                                                       \
148
//   do {                                                                                    \
149
//     TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->sqlLen));                                  \
150
//     if (pReq->sqlLen > 0) {                                                               \
151
//       TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->sql, pReq->sqlLen)); \
152
//     }                                                                                     \
153
//   } while (0)
154
155
// #define FREESQL()                \
156
//   do {                           \
157
//     if (pReq->sql != NULL) {     \
158
//       taosMemoryFree(pReq->sql); \
159
//     }                            \
160
//     pReq->sql = NULL;            \
161
//   } while (0)
162
163
0
int32_t tSerializeSMCreateXnodeReq(void *buf, int32_t bufLen, SMCreateXnodeReq *pReq) {
164
0
  SEncoder encoder = {0};
165
0
  int32_t  code = 0;
166
0
  int32_t  lino = 0;
167
0
  int32_t  tlen = 0;
168
0
  tEncoderInit(&encoder, buf, bufLen);
169
170
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
171
0
  ENCODESQL();
172
173
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->urlLen));
174
0
  if (pReq->urlLen > 0) {
175
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->url, pReq->urlLen));
176
0
  }
177
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->userLen));
178
0
  if (pReq->userLen > 0) {
179
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->user, pReq->userLen));
180
0
  }
181
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->passLen));
182
0
  if (pReq->passLen > 0) {
183
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->pass, pReq->passLen));
184
0
  }
185
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->passIsMd5));
186
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->token));
187
188
0
  tEndEncode(&encoder);
189
190
0
_exit:
191
0
  if (code) {
192
0
    tlen = code;
193
0
  } else {
194
0
    tlen = encoder.pos;
195
0
  }
196
0
  tEncoderClear(&encoder);
197
0
  return tlen;
198
0
}
199
200
0
int32_t tDeserializeSMCreateXnodeReq(void *buf, int32_t bufLen, SMCreateXnodeReq *pReq) {
201
0
  SDecoder decoder = {0};
202
0
  int32_t  code = 0;
203
0
  int32_t  lino = 0;
204
205
0
  tDecoderInit(&decoder, buf, bufLen);
206
207
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
208
0
  DECODESQL();
209
210
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->urlLen));
211
0
  if (pReq->urlLen > 0) {
212
0
    uint64_t binLen = 0;
213
0
    TAOS_CHECK_EXIT(tDecodeCStrAllocChecked(&decoder, (void **)&pReq->url, &binLen));
214
0
    if (binLen != (uint64_t)pReq->urlLen) {
215
0
      TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
216
0
    }
217
0
  } else if (pReq->urlLen < 0) {
218
0
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
219
0
  }
220
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->userLen));
221
0
  if (pReq->userLen > 0) {
222
0
    uint64_t binLen = 0;
223
0
    TAOS_CHECK_EXIT(tDecodeCStrAllocChecked(&decoder, (void **)&pReq->user, &binLen));
224
0
    if (binLen != (uint64_t)pReq->userLen) {
225
0
      TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
226
0
    }
227
0
  } else if (pReq->userLen < 0) {
228
0
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
229
0
  }
230
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->passLen));
231
0
  if (pReq->passLen > 0) {
232
0
    uint64_t binLen = 0;
233
0
    TAOS_CHECK_EXIT(tDecodeCStrAllocChecked(&decoder, (void **)&pReq->pass, &binLen));
234
0
    if (binLen != (uint64_t)pReq->passLen) {
235
0
      TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
236
0
    }
237
0
  } else if (pReq->passLen < 0) {
238
0
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
239
0
  }
240
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->passIsMd5));
241
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->token, true));
242
243
0
  tEndDecode(&decoder);
244
245
0
_exit:
246
0
  tDecoderClear(&decoder);
247
0
  if (code != 0) {
248
0
    tFreeSMCreateXnodeReq(pReq);
249
0
  }
250
0
  return code;
251
0
}
252
253
0
void tFreeSMCreateXnodeReq(SMCreateXnodeReq *pReq) {
254
0
  taosMemoryFreeClear(pReq->url);
255
0
  taosMemoryFreeClear(pReq->user);
256
0
  taosMemoryFreeClear(pReq->pass);
257
0
  xFreeCowStr(&pReq->token);
258
0
  FREESQL();
259
0
}
260
0
void xFreeTaskSource(xTaskSource *source) {
261
0
  if (source == NULL) {
262
0
    return;
263
0
  }
264
0
  xFreeCowStr(&source->cstr);
265
0
}
266
0
xTaskSource xCreateClonedTaskSource(ENodeXTaskSourceType sourceType, int32_t len, char *source) {
267
  // printf("clone task source from %p\n", source);
268
0
  xTaskSource taskSource = {0};
269
0
  taskSource.type = sourceType;
270
0
  taskSource.cstr = xCreateCowStr(len, source, true);
271
0
  return taskSource;
272
0
}
273
0
xTaskSource xCreateTaskSource(ENodeXTaskSourceType sourceType, int32_t len, char *ptr) {
274
0
   xTaskSource taskSource = {0};
275
0
  taskSource.type = sourceType;
276
0
  taskSource.cstr = xCreateCowStr(len, ptr, false);
277
0
   return taskSource;
278
0
}
279
0
xTaskSource xCloneTaskSourceRef(xTaskSource *source) {
280
0
  xTaskSource taskSource = {0};
281
0
  if (source == NULL) {
282
0
    return taskSource;
283
0
  }
284
0
  taskSource.type = source->type;
285
0
  taskSource.cstr = xCloneRefCowStr(&source->cstr);
286
0
  return taskSource;
287
0
}
288
289
0
const char *xGetTaskSourceTypeAsStr(xTaskSource *source) {
290
0
  switch (source->type) {
291
0
    case XNODE_TASK_SOURCE_DATABASE:
292
0
      return "database";
293
0
    case XNODE_TASK_SOURCE_TOPIC:
294
0
      return "topic";
295
0
    case XNODE_TASK_SOURCE_DSN:
296
0
      return "dsn";
297
0
    default:
298
0
      return "unknown";
299
0
  }
300
0
}
301
0
const char *xGetTaskSourceStr(xTaskSource *source) { return source->cstr.ptr; }
302
0
int32_t     xSerializeTaskSource(SEncoder *encoder, xTaskSource *source) {
303
0
  int32_t code = 0;
304
0
  int32_t  lino = 0;
305
0
  TAOS_CHECK_EXIT(tEncodeI32(encoder, source->type));
306
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &source->cstr));
307
0
_exit:
308
0
  return code;
309
0
}
310
0
int32_t xDeserializeTaskSource(SDecoder *decoder, xTaskSource *source) {
311
0
  if (decoder == NULL || source == NULL) {
312
0
    return TSDB_CODE_MND_XNODE_INVALID_MSG;
313
0
  }
314
0
  int32_t code = 0;
315
0
  int32_t lino = 0;
316
0
  int32_t type = 0;
317
0
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &type));
318
0
  source->type = type;
319
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &source->cstr, true));
320
0
_exit:
321
0
  return code;
322
0
}
323
324
0
void xFreeTaskSink(xTaskSink *sink) {
325
0
  if (sink == NULL) {
326
0
    return;
327
0
  }
328
0
  xFreeCowStr(&sink->cstr);
329
0
}
330
0
xTaskSink xCreateClonedTaskSink(ENodeXTaskSinkType sinkType, int32_t len, char *sink) {
331
0
  xTaskSink taskSink = {0};
332
0
  taskSink.type = sinkType;
333
0
  taskSink.cstr = xCreateCowStr(len, sink, false);
334
0
  return taskSink;
335
0
}
336
0
xTaskSink xCreateTaskSink(ENodeXTaskSinkType sinkType, int32_t len, char *ptr) {
337
0
  xTaskSink taskSink = {0};
338
0
  taskSink.type = sinkType;
339
0
  taskSink.cstr = xCreateCowStr(len, ptr, false);
340
0
  return taskSink;
341
0
}
342
0
xTaskSink   xCloneTaskSinkRef(xTaskSink* sink) {
343
0
  xTaskSink taskSink = {0};
344
0
  if (sink == NULL) {
345
0
    return taskSink;
346
0
  }
347
0
  taskSink.type = sink->type;
348
0
  taskSink.cstr = xCloneRefCowStr(&sink->cstr);
349
0
  return taskSink;
350
0
}
351
0
const char *xGetTaskSinkTypeAsStr(xTaskSink *sink) {
352
0
  switch (sink->type) {
353
0
    case XNODE_TASK_SINK_DATABASE:
354
0
      return "database";
355
0
    case XNODE_TASK_SINK_DSN:
356
0
      return "dsn";
357
0
    default:
358
0
      return "unknown";
359
0
  }
360
0
}
361
0
const char *xGetTaskSinkStr(xTaskSink *sink) { return sink->cstr.ptr; }
362
363
0
int32_t xSerializeTaskSink(SEncoder *encoder, xTaskSink *sink) {
364
0
  int32_t code = 0;
365
0
  int32_t lino = 0;
366
0
  TAOS_CHECK_EXIT(tEncodeI32(encoder, sink->type));
367
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &sink->cstr));
368
0
_exit:
369
0
  return code;
370
0
}
371
0
int32_t xDeserializeTaskSink(SDecoder *decoder, xTaskSink *sink) {
372
0
  if (decoder == NULL || sink == NULL) {
373
0
    return TSDB_CODE_MND_XNODE_INVALID_MSG;
374
0
  }
375
0
  int32_t code = 0;
376
0
  int32_t lino = 0;
377
0
  int32_t type = 0;
378
0
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &type));
379
0
  sink->type = type;
380
  // switch (type) {
381
  //   case XNODE_TASK_SINK_DSN:
382
  //   case XNODE_TASK_SINK_DATABASE:
383
  //     sink->type = type;
384
  //     break;
385
  //   default:
386
  //     TAOS_RETURN(TSDB_CODE_MND_XNODE_INVALID_MSG);
387
  // }
388
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &sink->cstr, true));
389
0
_exit:
390
0
  return code;
391
0
}
392
393
0
void xFreeTaskOptions(xTaskOptions *options) {
394
0
  if (options == NULL) {
395
0
    return;
396
0
  }
397
0
  xFreeCowStr(&options->trigger);
398
0
  xFreeCowStr(&options->parser);
399
0
  xFreeCowStr(&options->health);
400
  // xFreeCowStr(&options->reason);
401
0
  for (int i = 0; i < TSDB_XNODE_TASK_OPTIONS_MAX_NUM; i++) {
402
0
    xFreeCowStr(&options->options[i]);
403
0
  }
404
0
}
405
0
void printXnodeTaskOptions(xTaskOptions *options) {
406
0
  printf("Xnode Task Options:\n");
407
0
  printf("  trigger: %s\n", options->trigger.ptr);
408
0
  printf("  parser: %s\n", options->parser.ptr);
409
0
  printf("  health: %s\n", options->health.ptr);
410
  // printf("  reason: %s\n", options->reason.ptr);
411
0
  if (options->via > 0) {
412
0
    printf("  via: %d\n", options->via);
413
0
  } else {
414
0
    printf("  via: nil\n");
415
0
  }
416
0
  for (int i = 0; i < options->optionsNum; ++i) {
417
0
    printf("  option[%d]: %s\n", i, options->options[i].ptr);
418
0
  }
419
0
}
420
0
int32_t xSerializeTaskOptions(SEncoder *encoder, xTaskOptions *options) {
421
0
  int32_t code = 0;
422
0
  int32_t lino = 0;
423
0
  TAOS_CHECK_EXIT(tEncodeI32(encoder, options->via));
424
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &options->parser));
425
  // TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &options->reason));
426
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &options->trigger));
427
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &options->health));
428
0
  TAOS_CHECK_EXIT(tEncodeI32(encoder, options->optionsNum));
429
0
  for (int i = 0; i < options->optionsNum && i < TSDB_XNODE_TASK_OPTIONS_MAX_NUM; i++) {
430
0
    TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &options->options[i]));
431
0
  }
432
0
_exit:
433
0
  return code;
434
0
}
435
0
int32_t xDeserializeTaskOptions(SDecoder *decoder, xTaskOptions *options) {
436
0
  if (decoder == NULL || options == NULL) {
437
0
    return TSDB_CODE_MND_XNODE_INVALID_MSG;
438
0
  }
439
0
  int32_t code = 0;
440
0
  int32_t  lino = 0;
441
442
0
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &options->via));
443
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &options->parser, true));
444
  // TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &options->reason, true));
445
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &options->trigger, true));
446
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &options->health, true));
447
0
  TAOS_CHECK_EXIT(tDecodeI32(decoder, &options->optionsNum));
448
0
  for (int i = 0; i < options->optionsNum && i < TSDB_XNODE_TASK_OPTIONS_MAX_NUM; i++) {
449
0
    TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &options->options[i], true));
450
0
  }
451
0
_exit:
452
0
  return code;
453
0
}
454
0
int32_t tSerializeXnodeTaskSource(SEncoder *encoder, xTaskSource *source) {
455
0
  int32_t code = 0;
456
0
  int32_t lino = 0;
457
0
  int32_t tlen = 0;
458
0
  TAOS_CHECK_EXIT(tEncodeI32(encoder, source->type));
459
0
  TAOS_CHECK_EXIT(xEncodeCowStr(encoder, &source->cstr));
460
0
_exit:
461
0
  return code;
462
0
}
463
464
0
int32_t tDeserializeXnodeTaskSource(SDecoder *decoder, xTaskSource *source) {
465
0
  int32_t code = 0;
466
0
  int32_t lino = 0;
467
468
0
  TAOS_CHECK_EXIT(tDecodeI32(decoder, (int32_t *)&source->type));
469
0
  TAOS_CHECK_EXIT(xDecodeCowStr(decoder, &source->cstr, true));
470
0
_exit:
471
0
  return code;
472
0
}
473
0
int32_t tSerializeSMCreateXnodeTaskReq(void *buf, int32_t bufLen, SMCreateXnodeTaskReq *pReq) {
474
0
  SEncoder encoder = {0};
475
0
  int32_t  code = 0;
476
0
  int32_t  lino = 0;
477
0
  int32_t  tlen = 0;
478
0
  tEncoderInit(&encoder, buf, bufLen);
479
480
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
481
0
  ENCODESQL();
482
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
483
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
484
0
  TAOS_CHECK_EXIT(xSerializeTaskSource(&encoder, &pReq->source));
485
0
  TAOS_CHECK_EXIT(xSerializeTaskSink(&encoder, &pReq->sink));
486
0
  TAOS_CHECK_EXIT(xSerializeTaskOptions(&encoder, &pReq->options));
487
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->desiredState));
488
0
  tEndEncode(&encoder);
489
490
0
_exit:
491
0
  if (code) {
492
0
    tlen = code;
493
0
  } else {
494
0
    tlen = encoder.pos;
495
0
  }
496
0
  tEncoderClear(&encoder);
497
0
  return tlen;
498
0
}
499
0
int32_t tDeserializeSMCreateXnodeTaskReq(void *buf, int32_t bufLen, SMCreateXnodeTaskReq *pReq) {
500
0
  SDecoder decoder = {0};
501
0
  int32_t  code = 0;
502
0
  int32_t  lino = 0;
503
504
0
  tDecoderInit(&decoder, buf, bufLen);
505
506
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
507
0
  DECODESQL();
508
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
509
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
510
0
  TAOS_CHECK_EXIT(xDeserializeTaskSource(&decoder, &pReq->source));
511
0
  TAOS_CHECK_EXIT(xDeserializeTaskSink(&decoder, &pReq->sink));
512
0
  if (pReq->name.ptr == NULL || pReq->source.cstr.ptr == NULL || pReq->sink.cstr.ptr == NULL) {
513
0
    TAOS_CHECK_EXIT(TSDB_CODE_MND_XNODE_INVALID_MSG);
514
0
  }
515
0
  TAOS_CHECK_EXIT(xDeserializeTaskOptions(&decoder, &pReq->options));
516
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->desiredState, true));
517
0
  tEndDecode(&decoder);
518
519
0
_exit:
520
0
  tDecoderClear(&decoder);
521
0
  if (code != 0) {
522
0
    tFreeSMCreateXnodeTaskReq(pReq);
523
0
  }
524
0
  return code;
525
0
}
526
0
void tFreeSMCreateXnodeTaskReq(SMCreateXnodeTaskReq *pReq) {
527
  // printf("freeCreateXnodeTask: %s\n", pReq->name.ptr);
528
0
  FREESQL();
529
0
  xFreeCowStr(&pReq->name);
530
0
  xFreeTaskSource(&pReq->source);
531
0
  xFreeTaskSink(&pReq->sink);
532
0
  xFreeTaskOptions(&pReq->options);
533
0
  xFreeCowStr(&pReq->desiredState);
534
0
}
535
0
int32_t tSerializeSMDropXnodeTaskReq(void *buf, int32_t bufLen, SMDropXnodeTaskReq *pReq) {
536
  // printf("serializeDropXnodeTask: %d\n", pReq->tid);
537
0
  SEncoder encoder = {0};
538
0
  int32_t  code = 0;
539
0
  int32_t  lino = 0;
540
0
  int32_t  tlen = 0;
541
542
0
  tEncoderInit(&encoder, buf, bufLen);
543
544
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
545
0
  ENCODESQL();
546
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->id));
547
0
  TAOS_CHECK_EXIT(tEncodeBool(&encoder, pReq->force));
548
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
549
0
  tEndEncode(&encoder);
550
551
0
_exit:
552
0
  if (code) {
553
0
    tlen = code;
554
0
  } else {
555
0
    tlen = encoder.pos;
556
0
  }
557
0
  tEncoderClear(&encoder);
558
0
  return tlen;
559
0
}
560
0
int32_t tDeserializeSMDropXnodeTaskReq(void *buf, int32_t bufLen, SMDropXnodeTaskReq *pReq) {
561
  // printf("deserializeDropXnodeTask: %d\n", pReq->tid);
562
0
  SDecoder decoder = {0};
563
0
  int32_t  code = 0;
564
0
  int32_t  lino = 0;
565
0
  tDecoderInit(&decoder, buf, bufLen);
566
567
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
568
0
  DECODESQL();
569
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->id));
570
0
  TAOS_CHECK_EXIT(tDecodeBool(&decoder, &pReq->force));
571
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
572
0
  tEndDecode(&decoder);
573
574
0
_exit:
575
0
  tDecoderClear(&decoder);
576
0
  return code;
577
0
}
578
0
void tFreeSMDropXnodeTaskReq(SMDropXnodeTaskReq *pReq) {
579
0
  FREESQL();
580
0
  xFreeCowStr(&pReq->name);
581
0
}
582
583
0
int32_t tSerializeSMStartXnodeTaskReq(void *buf, int32_t bufLen, SMStartXnodeTaskReq *pReq) {
584
0
  SEncoder encoder = {0};
585
0
  int32_t  code = 0;
586
0
  int32_t  lino = 0;
587
0
  int32_t  tlen = 0;
588
589
0
  tEncoderInit(&encoder, buf, bufLen);
590
591
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
592
0
  ENCODESQL();
593
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->tid));
594
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
595
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->sqlLen));
596
0
  tEndEncode(&encoder);
597
598
0
_exit:
599
0
  if (code) {
600
0
    tlen = code;
601
0
  } else {
602
0
    tlen = encoder.pos;
603
0
  }
604
0
  tEncoderClear(&encoder);
605
0
  return tlen;
606
0
}
607
0
int32_t tDeserializeSMStartXnodeTaskReq(void *buf, int32_t bufLen, SMStartXnodeTaskReq *pReq) {
608
0
  SDecoder decoder = {0};
609
0
  int32_t  code = 0;
610
0
  int32_t  lino = 0;
611
0
  tDecoderInit(&decoder, buf, bufLen);
612
613
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
614
0
  DECODESQL();
615
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->tid));
616
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
617
0
  tEndDecode(&decoder);
618
619
0
_exit:
620
0
  tDecoderClear(&decoder);
621
0
  return code;
622
0
}
623
0
void tFreeSMStartXnodeTaskReq(SMStartXnodeTaskReq *pReq) {
624
0
  FREESQL();
625
0
  xFreeCowStr(&pReq->name);
626
0
}
627
628
0
int32_t tSerializeSMStopXnodeTaskReq(void *buf, int32_t bufLen, SMStopXnodeTaskReq *pReq) {
629
0
  return tSerializeSMStartXnodeTaskReq(buf, bufLen, pReq);
630
0
}
631
0
int32_t tDeserializeSMStopXnodeTaskReq(void *buf, int32_t bufLen, SMStopXnodeTaskReq *pReq) {
632
0
  return tDeserializeSMStartXnodeTaskReq(buf, bufLen, pReq);
633
0
}
634
0
void tFreeSMStopXnodeTaskReq(SMStopXnodeTaskReq *pReq) { tFreeSMStartXnodeTaskReq(pReq); }
635
636
0
int32_t tSerializeSMUpdateXnodeTaskReq(void *buf, int32_t bufLen, SMUpdateXnodeTaskReq *pReq) {
637
0
  SEncoder encoder = {0};
638
0
  int32_t  code = 0;
639
0
  int32_t  lino = 0;
640
0
  int32_t  tlen = 0;
641
0
  tEncoderInit(&encoder, buf, bufLen);
642
643
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
644
0
  ENCODESQL();
645
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->tid));
646
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
647
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->via));
648
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
649
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->status));
650
0
  TAOS_CHECK_EXIT(xSerializeTaskSource(&encoder, &pReq->source));
651
0
  TAOS_CHECK_EXIT(xSerializeTaskSink(&encoder, &pReq->sink));
652
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->parser));
653
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->reason));
654
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->desiredState));
655
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->labels));
656
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->updateName));
657
0
  tEndEncode(&encoder);
658
659
0
_exit:
660
0
  if (code) {
661
0
    tlen = code;
662
0
  } else {
663
0
    tlen = encoder.pos;
664
0
  }
665
0
  tEncoderClear(&encoder);
666
0
  return tlen;
667
0
}
668
669
0
int32_t tDeserializeSMUpdateXnodeTaskReq(void *buf, int32_t bufLen, SMUpdateXnodeTaskReq *pReq) {
670
0
  SDecoder decoder = {0};
671
0
  int32_t  code = 0;
672
0
  int32_t  lino = 0;
673
674
0
  tDecoderInit(&decoder, buf, bufLen);
675
676
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
677
0
  DECODESQL();
678
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->tid));
679
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
680
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->via));
681
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
682
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->status, true));
683
0
  TAOS_CHECK_EXIT(xDeserializeTaskSource(&decoder, &pReq->source));
684
0
  TAOS_CHECK_EXIT(xDeserializeTaskSink(&decoder, &pReq->sink));
685
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->parser, true));
686
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->reason, true));
687
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->desiredState, true));
688
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->labels, true));
689
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->updateName, true));
690
0
  tEndDecode(&decoder);
691
692
0
_exit:
693
0
  tDecoderClear(&decoder);
694
0
  return code;
695
0
}
696
697
0
void tFreeSMUpdateXnodeTaskReq(SMUpdateXnodeTaskReq *pReq) {
698
  // printf("freeUpdateXnodeTask: %d\n", pReq->tid);
699
0
  xFreeCowStr(&pReq->name);
700
0
  xFreeTaskSource(&pReq->source);
701
0
  xFreeTaskSink(&pReq->sink);
702
0
  xFreeCowStr(&pReq->parser);
703
0
  xFreeCowStr(&pReq->reason);
704
0
  xFreeCowStr(&pReq->desiredState);
705
0
  xFreeCowStr(&pReq->status);
706
0
  xFreeCowStr(&pReq->labels);
707
0
  xFreeCowStr(&pReq->updateName);
708
0
  FREESQL();
709
0
}
710
711
0
int32_t tSerializeSMDropXnodeReq(void *buf, int32_t bufLen, SMDropXnodeReq *pReq) {
712
0
  SEncoder encoder = {0};
713
0
  int32_t  code = 0;
714
0
  int32_t  lino = 0;
715
0
  int32_t  tlen = 0;
716
0
  tEncoderInit(&encoder, buf, bufLen);
717
718
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
719
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
720
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->force));
721
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->urlLen));
722
0
  if (pReq->urlLen > 0) {
723
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->url, pReq->urlLen));
724
0
  }
725
0
  ENCODESQL();
726
0
  tEndEncode(&encoder);
727
728
0
_exit:
729
0
  if (code) {
730
0
    tlen = code;
731
0
  } else {
732
0
    tlen = encoder.pos;
733
0
  }
734
0
  tEncoderClear(&encoder);
735
0
  return tlen;
736
0
}
737
738
0
int32_t tDeserializeSMDropXnodeReq(void *buf, int32_t bufLen, SMDropXnodeReq *pReq) {
739
0
  SDecoder decoder = {0};
740
0
  int32_t  code = 0;
741
0
  int32_t  lino = 0;
742
743
0
  tDecoderInit(&decoder, buf, bufLen);
744
745
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
746
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
747
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->force));
748
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->urlLen));
749
0
  if (pReq->urlLen > 0) {
750
0
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void **)&pReq->url, NULL));
751
0
  }
752
0
  DECODESQL();
753
0
  tEndDecode(&decoder);
754
755
0
_exit:
756
0
  tDecoderClear(&decoder);
757
0
  return code;
758
0
}
759
760
0
void tFreeSMDropXnodeReq(SMDropXnodeReq *pReq) {
761
0
  FREESQL();
762
0
  if (pReq->urlLen > 0 && pReq->url != NULL) {
763
0
    taosMemoryFree(pReq->url);
764
0
  }
765
0
}
766
767
0
int32_t tSerializeSMDrainXnodeReq(void *buf, int32_t bufLen, SMDrainXnodeReq *pReq) {
768
0
  SEncoder encoder = {0};
769
0
  int32_t  code = 0;
770
0
  int32_t  lino = 0;
771
0
  int32_t  tlen = 0;
772
0
  tEncoderInit(&encoder, buf, bufLen);
773
774
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
775
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
776
0
  ENCODESQL();
777
0
  tEndEncode(&encoder);
778
779
0
_exit:
780
0
  if (code) {
781
0
    tlen = code;
782
0
  } else {
783
0
    tlen = encoder.pos;
784
0
  }
785
0
  tEncoderClear(&encoder);
786
0
  return tlen;
787
0
}
788
789
0
int32_t tDeserializeSMDrainXnodeReq(void *buf, int32_t bufLen, SMDrainXnodeReq *pReq) {
790
0
  SDecoder decoder = {0};
791
0
  int32_t  code = 0;
792
0
  int32_t  lino = 0;
793
794
0
  tDecoderInit(&decoder, buf, bufLen);
795
796
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
797
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
798
0
  DECODESQL();
799
0
  tEndDecode(&decoder);
800
801
0
_exit:
802
0
  tDecoderClear(&decoder);
803
0
  return code;
804
0
}
805
806
0
void tFreeSMDrainXnodeReq(SMDrainXnodeReq *pReq) { FREESQL(); }
807
808
0
int32_t tSerializeSMRestartXnodeReq(void *buf, int32_t bufLen, SMRestartXnodeReq *pReq) {
809
0
  SEncoder encoder = {0};
810
0
  int32_t  code = 0;
811
0
  int32_t  lino = 0;
812
0
  int32_t  tlen = 0;
813
0
  tEncoderInit(&encoder, buf, bufLen);
814
815
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
816
0
  ENCODESQL();
817
0
  tEndEncode(&encoder);
818
819
0
_exit:
820
0
  if (code) {
821
0
    tlen = code;
822
0
  } else {
823
0
    tlen = encoder.pos;
824
0
  }
825
0
  tEncoderClear(&encoder);
826
0
  return tlen;
827
0
}
828
829
0
int32_t tDeserializeSMRestartXnodeReq(void *buf, int32_t bufLen, SMRestartXnodeReq *pReq) {
830
0
  SDecoder decoder = {0};
831
0
  int32_t  code = 0;
832
0
  int32_t  lino = 0;
833
834
0
  tDecoderInit(&decoder, buf, bufLen);
835
836
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
837
0
  DECODESQL();
838
0
  tEndDecode(&decoder);
839
840
0
_exit:
841
0
  tDecoderClear(&decoder);
842
0
  return code;
843
0
}
844
845
0
void tFreeSMRestartXnodeReq(SMRestartXnodeReq *pReq) { FREESQL(); }
846
847
0
int32_t tSerializeSMUpdateXnodeReq(void *buf, int32_t bufLen, SMUpdateXnodeReq *pReq) {
848
0
  SEncoder encoder = {0};
849
0
  int32_t  code = 0;
850
0
  int32_t  lino = 0;
851
0
  int32_t  tlen = 0;
852
0
  tEncoderInit(&encoder, buf, bufLen);
853
854
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
855
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->id));
856
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->token));
857
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->user));
858
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->pass));
859
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->urlLen));
860
0
  if (pReq->urlLen > 0) {
861
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->url, pReq->urlLen));
862
0
  }
863
0
  ENCODESQL();
864
0
  tEndEncode(&encoder);
865
866
0
_exit:
867
0
  if (code) {
868
0
    tlen = code;
869
0
  } else {
870
0
    tlen = encoder.pos;
871
0
  }
872
0
  tEncoderClear(&encoder);
873
0
  return tlen;
874
0
}
875
876
0
int32_t tDeserializeSMUpdateXnodeReq(void *buf, int32_t bufLen, SMUpdateXnodeReq *pReq) {
877
0
  SDecoder decoder = {0};
878
0
  int32_t  code = 0;
879
0
  int32_t  lino = 0;
880
881
0
  tDecoderInit(&decoder, buf, bufLen);
882
883
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
884
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->id));
885
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->token, true));
886
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->user, true));
887
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->pass, true));
888
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->urlLen));
889
0
  if (pReq->urlLen > 0) {
890
0
    TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void **)&pReq->url, NULL));
891
0
  }
892
0
  DECODESQL();
893
0
  tEndDecode(&decoder);
894
895
0
_exit:
896
0
  tDecoderClear(&decoder);
897
0
  return code;
898
0
}
899
900
0
void tFreeSMUpdateXnodeReq(SMUpdateXnodeReq *pReq) {
901
0
  FREESQL();
902
0
  if (pReq->urlLen > 0 && pReq->url != NULL) {
903
0
    taosMemoryFree(pReq->url);
904
0
  }
905
0
  xFreeCowStr(&pReq->token);
906
0
  xFreeCowStr(&pReq->user);
907
0
  xFreeCowStr(&pReq->pass);
908
0
}
909
910
0
int32_t tSerializeSMCreateXnodeJobReq(void *buf, int32_t bufLen, SMCreateXnodeJobReq *pReq) {
911
0
  SEncoder encoder = {0};
912
0
  int32_t  code = 0;
913
0
  int32_t  lino = 0;
914
0
  int32_t  tlen = 0;
915
916
0
  tEncoderInit(&encoder, buf, bufLen);
917
918
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
919
  // 0. sql
920
0
  ENCODESQL();
921
922
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->tid));
923
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->via));
924
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
925
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->status));
926
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->desiredState));
927
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->config));
928
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->reason));
929
0
  tEndEncode(&encoder);
930
931
0
_exit:
932
0
  if (code) {
933
0
    tlen = code;
934
0
  } else {
935
0
    tlen = encoder.pos;
936
0
  }
937
0
  tEncoderClear(&encoder);
938
0
  return tlen;
939
0
}
940
941
0
int32_t tDeserializeSMCreateXnodeJobReq(void *buf, int32_t bufLen, SMCreateXnodeJobReq *pReq) {
942
  // printf("deserializeCreateXnodeTaskJob: %d\n", pReq->tid);
943
0
  SDecoder decoder = {0};
944
0
  int32_t  code = 0;
945
0
  int32_t  lino = 0;
946
947
0
  tDecoderInit(&decoder, buf, bufLen);
948
949
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
950
0
  DECODESQL();
951
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->tid));
952
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->via));
953
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
954
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->status, true));
955
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->desiredState, true));
956
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->config, true));
957
0
  if (pReq->config.ptr == NULL) {
958
0
    TAOS_CHECK_EXIT(TSDB_CODE_MND_XNODE_INVALID_MSG);
959
0
  }
960
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->reason, true));
961
0
  tEndDecode(&decoder);
962
963
0
_exit:
964
0
  tDecoderClear(&decoder);
965
0
  if (code != 0) {
966
0
    tFreeSMCreateXnodeJobReq(pReq);
967
0
  }
968
0
  return code;
969
0
}
970
0
void tFreeSMCreateXnodeJobReq(SMCreateXnodeJobReq *pReq) {
971
0
  FREESQL();
972
0
  xFreeCowStr(&pReq->config);
973
0
  xFreeCowStr(&pReq->reason);
974
0
  xFreeCowStr(&pReq->status);
975
0
  xFreeCowStr(&pReq->desiredState);
976
0
}
977
978
0
int32_t tSerializeSMUpdateXnodeJobReq(void *buf, int32_t bufLen, SMUpdateXnodeJobReq *pReq) {
979
0
  SEncoder encoder = {0};
980
0
  int32_t  code = 0;
981
0
  int32_t  lino = 0;
982
0
  int32_t  tlen = 0;
983
984
0
  tEncoderInit(&encoder, buf, bufLen);
985
986
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
987
  // 0. sql
988
0
  ENCODESQL();
989
990
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->jid));
991
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->via));
992
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
993
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->status));
994
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->desiredState));
995
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->configLen));
996
0
  if (pReq->config != NULL) {
997
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->config, pReq->configLen + 1));
998
0
  } else {
999
0
    TAOS_CHECK_EXIT(tEncodeU32v(&encoder, 0));
1000
0
  }
1001
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->reasonLen));
1002
0
  if (pReq->reason != NULL) {
1003
0
    TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->reason, pReq->reasonLen + 1));
1004
0
  } else {
1005
0
    TAOS_CHECK_EXIT(tEncodeU32v(&encoder, 0));
1006
0
  }
1007
0
  tEndEncode(&encoder);
1008
1009
0
_exit:
1010
0
  if (code) {
1011
0
    tlen = code;
1012
0
  } else {
1013
0
    tlen = encoder.pos;
1014
0
  }
1015
0
  tEncoderClear(&encoder);
1016
0
  return tlen;
1017
0
}
1018
1019
0
int32_t tDeserializeSMUpdateXnodeJobReq(void *buf, int32_t bufLen, SMUpdateXnodeJobReq *pReq) {
1020
0
  SDecoder decoder = {0};
1021
0
  int32_t  code = 0;
1022
0
  int32_t  lino = 0;
1023
1024
0
  tDecoderInit(&decoder, buf, bufLen);
1025
1026
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1027
0
  DECODESQL();
1028
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->jid));
1029
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->via));
1030
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
1031
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->status, true));
1032
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->desiredState, true));
1033
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->configLen));
1034
0
  uint64_t cfgLen = 0;
1035
0
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void **)&pReq->config, &cfgLen));
1036
0
  if (cfgLen != (uint64_t)pReq->configLen && cfgLen != (uint64_t)pReq->configLen + 1) {
1037
0
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
1038
0
  }
1039
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->reasonLen));
1040
0
  uint64_t rsnLen = 0;
1041
0
  TAOS_CHECK_EXIT(tDecodeBinaryAlloc(&decoder, (void **)&pReq->reason, &rsnLen));
1042
0
  if (rsnLen != (uint64_t)pReq->reasonLen && rsnLen != (uint64_t)pReq->reasonLen + 1) {
1043
0
    TAOS_CHECK_EXIT(TSDB_CODE_INVALID_MSG);
1044
0
  }
1045
0
  tEndDecode(&decoder);
1046
1047
0
_exit:
1048
0
  tDecoderClear(&decoder);
1049
0
  if (code != 0) {
1050
0
    tFreeSMUpdateXnodeJobReq(pReq);
1051
0
  }
1052
0
  return code;
1053
0
}
1054
1055
0
void tFreeSMUpdateXnodeJobReq(SMUpdateXnodeJobReq *pReq) {
1056
0
  FREESQL();
1057
0
  if (pReq->config != NULL) {
1058
0
    pReq->configLen = 0;
1059
0
    taosMemoryFreeClear(pReq->config);
1060
0
  }
1061
0
  if (pReq->reason != NULL) {
1062
0
    pReq->reasonLen = 0;
1063
0
    taosMemoryFreeClear(pReq->reason);
1064
0
  }
1065
0
  xFreeCowStr(&pReq->status);
1066
0
  xFreeCowStr(&pReq->desiredState);
1067
0
}
1068
1069
0
int32_t tSerializeSMRebalanceXnodeJobReq(void *buf, int32_t bufLen, SMRebalanceXnodeJobReq *pReq) {
1070
0
  SEncoder encoder = {0};
1071
0
  int32_t  code = 0;
1072
0
  int32_t  lino = 0;
1073
0
  int32_t  tlen = 0;
1074
1075
0
  tEncoderInit(&encoder, buf, bufLen);
1076
1077
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1078
0
  ENCODESQL();
1079
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->jid));
1080
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->xnodeId));
1081
1082
0
  tEndEncode(&encoder);
1083
0
_exit:
1084
0
  if (code) {
1085
0
    tlen = code;
1086
0
  } else {
1087
0
    tlen = encoder.pos;
1088
0
  }
1089
0
  tEncoderClear(&encoder);
1090
0
  return tlen;
1091
0
}
1092
0
int32_t tDeserializeSMRebalanceXnodeJobReq(void *buf, int32_t bufLen, SMRebalanceXnodeJobReq *pReq) {
1093
0
  SDecoder decoder = {0};
1094
0
  int32_t  code = 0;
1095
0
  int32_t  lino = 0;
1096
1097
0
  tDecoderInit(&decoder, buf, bufLen);
1098
1099
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1100
0
  DECODESQL();
1101
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->jid));
1102
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->xnodeId));
1103
1104
0
  tEndDecode(&decoder);
1105
0
_exit:
1106
0
  tDecoderClear(&decoder);
1107
0
  return code;
1108
0
}
1109
1110
0
void tFreeSMRebalanceXnodeJobReq(SMRebalanceXnodeJobReq *pReq) { FREESQL(); }
1111
1112
0
int32_t tSerializeSMRebalanceXnodeJobsWhereReq(void *buf, int32_t bufLen, SMRebalanceXnodeJobsWhereReq *pReq) {
1113
0
  SEncoder encoder = {0};
1114
0
  int32_t  code = 0;
1115
0
  int32_t  lino = 0;
1116
0
  int32_t  tlen = 0;
1117
1118
0
  tEncoderInit(&encoder, buf, bufLen);
1119
1120
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1121
0
  ENCODESQL();
1122
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->ast));
1123
0
  tEndEncode(&encoder);
1124
0
_exit:
1125
0
  if (code) {
1126
0
    tlen = code;
1127
0
  } else {
1128
0
    tlen = encoder.pos;
1129
0
  }
1130
0
  tEncoderClear(&encoder);
1131
0
  return tlen;
1132
0
}
1133
0
int32_t tDeserializeSMRebalanceXnodeJobsWhereReq(void *buf, int32_t bufLen, SMRebalanceXnodeJobsWhereReq *pReq) {
1134
0
  SDecoder decoder = {0};
1135
0
  int32_t  code = 0;
1136
0
  int32_t  lino = 0;
1137
1138
0
  tDecoderInit(&decoder, buf, bufLen);
1139
1140
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1141
0
  DECODESQL();
1142
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->ast, true));
1143
1144
0
  tEndDecode(&decoder);
1145
0
_exit:
1146
0
  tDecoderClear(&decoder);
1147
0
  return code;
1148
0
}
1149
1150
0
void tFreeSMRebalanceXnodeJobsWhereReq(SMRebalanceXnodeJobsWhereReq *pReq) {
1151
0
  FREESQL();
1152
0
  xFreeCowStr(&pReq->ast);
1153
0
}
1154
1155
0
int32_t tSerializeSMDropXnodeJobReq(void *buf, int32_t bufLen, SMDropXnodeJobReq *pReq) {
1156
0
  SEncoder encoder = {0};
1157
0
  int32_t  code = 0;
1158
0
  int32_t  lino = 0;
1159
0
  int32_t  tlen = 0;
1160
1161
0
  tEncoderInit(&encoder, buf, bufLen);
1162
1163
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1164
0
  ENCODESQL();
1165
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->jid));
1166
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->ast));
1167
1168
0
  tEndEncode(&encoder);
1169
0
_exit:
1170
0
  if (code) {
1171
0
    tlen = code;
1172
0
  } else {
1173
0
    tlen = encoder.pos;
1174
0
  }
1175
0
  tEncoderClear(&encoder);
1176
0
  return tlen;
1177
0
}
1178
0
int32_t tDeserializeSMDropXnodeJobReq(void *buf, int32_t bufLen, SMDropXnodeJobReq *pReq) {
1179
0
  SDecoder decoder = {0};
1180
0
  int32_t  code = 0;
1181
0
  int32_t  lino = 0;
1182
1183
0
  tDecoderInit(&decoder, buf, bufLen);
1184
1185
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1186
0
  DECODESQL();
1187
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->jid));
1188
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->ast, true));
1189
1190
0
  tEndDecode(&decoder);
1191
0
_exit:
1192
0
  tDecoderClear(&decoder);
1193
0
  return code;
1194
0
}
1195
0
void tFreeSMDropXnodeJobReq(SMDropXnodeJobReq *pReq) {
1196
0
  FREESQL();
1197
0
  xFreeCowStr(&pReq->ast);
1198
0
}
1199
1200
0
int32_t tSerializeSMCreateXnodeAgentReq(void *buf, int32_t bufLen, SMCreateXnodeAgentReq *pReq) {
1201
0
  SEncoder encoder = {0};
1202
0
  int32_t  code = 0;
1203
0
  int32_t  lino = 0;
1204
0
  int32_t  tlen = 0;
1205
0
  tEncoderInit(&encoder, buf, bufLen);
1206
1207
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1208
0
  ENCODESQL();
1209
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
1210
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->status));
1211
0
  TAOS_CHECK_EXIT(xSerializeTaskOptions(&encoder, &pReq->options));
1212
0
  tEndEncode(&encoder);
1213
1214
0
_exit:
1215
0
  if (code) {
1216
0
    tlen = code;
1217
0
  } else {
1218
0
    tlen = encoder.pos;
1219
0
  }
1220
0
  tEncoderClear(&encoder);
1221
0
  return tlen;
1222
0
}
1223
1224
0
int32_t tDeserializeSMCreateXnodeAgentReq(void *buf, int32_t bufLen, SMCreateXnodeAgentReq *pReq) {
1225
0
  SDecoder decoder = {0};
1226
0
  int32_t  code = 0;
1227
0
  int32_t  lino = 0;
1228
1229
0
  tDecoderInit(&decoder, buf, bufLen);
1230
1231
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1232
0
  DECODESQL();
1233
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
1234
0
  if (pReq->name.ptr == NULL) {
1235
0
    TAOS_CHECK_EXIT(TSDB_CODE_MND_XNODE_INVALID_MSG);
1236
0
  }
1237
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->status, true));
1238
0
  TAOS_CHECK_EXIT(xDeserializeTaskOptions(&decoder, &pReq->options));
1239
1240
0
  tEndDecode(&decoder);
1241
0
_exit:
1242
0
  tDecoderClear(&decoder);
1243
0
  if (code != 0) {
1244
0
    tFreeSMCreateXnodeAgentReq(pReq);
1245
0
  }
1246
0
  return code;
1247
0
}
1248
1249
0
void tFreeSMCreateXnodeAgentReq(SMCreateXnodeAgentReq *pReq) {
1250
0
  FREESQL();
1251
0
  xFreeCowStr(&pReq->name);
1252
0
  xFreeCowStr(&pReq->status);
1253
0
  xFreeTaskOptions(&pReq->options);
1254
0
}
1255
1256
0
int32_t tSerializeSMUpdateXnodeAgentReq(void *buf, int32_t bufLen, SMUpdateXnodeAgentReq *pReq) {
1257
0
  SEncoder encoder = {0};
1258
0
  int32_t  code = 0;
1259
0
  int32_t  lino = 0;
1260
0
  int32_t  tlen = 0;
1261
0
  tEncoderInit(&encoder, buf, bufLen);
1262
1263
0
  TAOS_CHECK_EXIT(tStartEncode(&encoder));
1264
0
  ENCODESQL();
1265
0
  TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->id));
1266
0
  TAOS_CHECK_EXIT(xEncodeCowStr(&encoder, &pReq->name));
1267
0
  TAOS_CHECK_EXIT(xSerializeTaskOptions(&encoder, &pReq->options));
1268
0
  tEndEncode(&encoder);
1269
1270
0
_exit:
1271
0
  if (code) {
1272
0
    tlen = code;
1273
0
  } else {
1274
0
    tlen = encoder.pos;
1275
0
  }
1276
0
  tEncoderClear(&encoder);
1277
0
  return tlen;
1278
0
}
1279
0
int32_t tDeserializeSMUpdateXnodeAgentReq(void *buf, int32_t bufLen, SMUpdateXnodeAgentReq *pReq) {
1280
0
  SDecoder decoder = {0};
1281
0
  int32_t  code = 0;
1282
0
  int32_t  lino = 0;
1283
1284
0
  tDecoderInit(&decoder, buf, bufLen);
1285
1286
0
  TAOS_CHECK_EXIT(tStartDecode(&decoder));
1287
0
  DECODESQL();
1288
0
  TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->id));
1289
0
  TAOS_CHECK_EXIT(xDecodeCowStr(&decoder, &pReq->name, true));
1290
0
  TAOS_CHECK_EXIT(xDeserializeTaskOptions(&decoder, &pReq->options));
1291
1292
0
  tEndDecode(&decoder);
1293
0
_exit:
1294
0
  tDecoderClear(&decoder);
1295
0
  return code;
1296
0
}
1297
0
void tFreeSMUpdateXnodeAgentReq(SMUpdateXnodeAgentReq *pReq) {
1298
0
  FREESQL();
1299
0
  xFreeCowStr(&pReq->name);
1300
0
  xFreeTaskOptions(&pReq->options);
1301
0
}
1302
1303
0
int32_t tSerializeSMDropXnodeAgentReq(void *buf, int32_t bufLen, SMDropXnodeAgentReq *pReq) {
1304
0
  return tSerializeSMDropXnodeTaskReq(buf, bufLen, (SMDropXnodeTaskReq *)pReq);
1305
0
}
1306
0
int32_t tDeserializeSMDropXnodeAgentReq(void *buf, int32_t bufLen, SMDropXnodeAgentReq *pReq) {
1307
0
  return tDeserializeSMDropXnodeTaskReq(buf, bufLen, (SMDropXnodeTaskReq *)pReq);
1308
0
}
1309
0
void tFreeSMDropXnodeAgentReq(SMDropXnodeAgentReq *pReq) { tFreeSMDropXnodeTaskReq((SMDropXnodeTaskReq *)pReq); }