tstream.h 20.0 KB
Newer Older
L
Liu Jicong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

16
#include "os.h"
17
#include "streamState.h"
L
Liu Jicong 已提交
18
#include "tdatablock.h"
L
Liu Jicong 已提交
19
#include "tdbInt.h"
L
Liu Jicong 已提交
20 21
#include "tmsg.h"
#include "tmsgcb.h"
L
Liu Jicong 已提交
22
#include "tqueue.h"
L
Liu Jicong 已提交
23 24 25 26 27

#ifdef __cplusplus
extern "C" {
#endif

L
Liu Jicong 已提交
28 29
#ifndef _STREAM_H_
#define _STREAM_H_
L
Liu Jicong 已提交
30

L
Liu Jicong 已提交
31 32
typedef struct SStreamTask SStreamTask;

Y
yihaoDeng 已提交
33
#define SSTREAM_TASK_VER 1
34 35
enum {
  STREAM_STATUS__NORMAL = 0,
L
Liu Jicong 已提交
36
  STREAM_STATUS__STOP,
L
Liu Jicong 已提交
37
  STREAM_STATUS__INIT,
L
Liu Jicong 已提交
38
  STREAM_STATUS__FAILED,
39
  STREAM_STATUS__RECOVER,
5
54liuyao 已提交
40
  STREAM_STATUS__PAUSE,
41 42
};

L
Liu Jicong 已提交
43
enum {
L
Liu Jicong 已提交
44 45
  TASK_STATUS__NORMAL = 0,
  TASK_STATUS__DROPPING,
L
Liu Jicong 已提交
46 47
  TASK_STATUS__FAIL,
  TASK_STATUS__STOP,
Y
yihaoDeng 已提交
48
  TASK_STATUS__SCAN_HISTORY,  // stream task scan history data by using tsdbread in the stream scanner
49
  TASK_STATUS__HALT,          // pause, but not be manipulated by user command
50
  TASK_STATUS__PAUSE,         // pause
L
Liu Jicong 已提交
51 52 53
};

enum {
L
Liu Jicong 已提交
54 55 56 57
  TASK_SCHED_STATUS__INACTIVE = 1,
  TASK_SCHED_STATUS__WAITING,
  TASK_SCHED_STATUS__ACTIVE,
  TASK_SCHED_STATUS__FAILED,
L
Liu Jicong 已提交
58
  TASK_SCHED_STATUS__DROPPING,
L
Liu Jicong 已提交
59 60 61 62 63 64 65
};

enum {
  TASK_INPUT_STATUS__NORMAL = 1,
  TASK_INPUT_STATUS__BLOCKED,
  TASK_INPUT_STATUS__RECOVER,
  TASK_INPUT_STATUS__STOP,
L
Liu Jicong 已提交
66
  TASK_INPUT_STATUS__FAILED,
L
Liu Jicong 已提交
67 68 69 70 71 72
};

enum {
  TASK_OUTPUT_STATUS__NORMAL = 1,
  TASK_OUTPUT_STATUS__WAIT,
  TASK_OUTPUT_STATUS__BLOCKED,
L
Liu Jicong 已提交
73 74
};

75 76 77 78 79
enum {
  TASK_TRIGGER_STATUS__INACTIVE = 1,
  TASK_TRIGGER_STATUS__ACTIVE,
};

80
typedef enum {
81 82 83
  TASK_LEVEL__SOURCE = 1,
  TASK_LEVEL__AGG,
  TASK_LEVEL__SINK,
84
} ETASK_LEVEL;
85 86 87 88 89 90 91 92 93

enum {
  TASK_OUTPUT__FIXED_DISPATCH = 1,
  TASK_OUTPUT__SHUFFLE_DISPATCH,
  TASK_OUTPUT__TABLE,
  TASK_OUTPUT__SMA,
  TASK_OUTPUT__FETCH,
};

L
Liu Jicong 已提交
94 95 96 97 98 99
enum {
  STREAM_QUEUE__SUCESS = 1,
  STREAM_QUEUE__FAILED,
  STREAM_QUEUE__PROCESSING,
};

L
Liu Jicong 已提交
100 101 102 103
typedef struct {
  int8_t type;
} SStreamQueueItem;

104 105
typedef void    FTbSink(SStreamTask* pTask, void* vnode, int64_t ver, void* data);
typedef int32_t FTaskExpand(void* ahandle, SStreamTask* pTask, int64_t ver);
L
Liu Jicong 已提交
106 107

typedef struct {
L
Liu Jicong 已提交
108 109 110 111
  int8_t      type;
  int64_t     ver;
  int32_t*    dataRef;
  SPackedData submit;
112
} SStreamDataSubmit;
L
Liu Jicong 已提交
113 114 115 116 117 118

typedef struct {
  int8_t  type;
  int64_t ver;
  SArray* dataRefs;  // SArray<int32_t*>
  SArray* submits;   // SArray<SPackedSubmit>
119
} SStreamMergedSubmit;
120

L
Liu Jicong 已提交
121 122 123
typedef struct {
  int8_t type;

L
Liu Jicong 已提交
124
  int32_t srcVgId;
L
Liu Jicong 已提交
125
  int32_t childId;
L
Liu Jicong 已提交
126
  int64_t sourceVer;
L
Liu Jicong 已提交
127
  int64_t reqId;
L
Liu Jicong 已提交
128

L
Liu Jicong 已提交
129
  SArray* blocks;  // SArray<SSDataBlock>
L
Liu Jicong 已提交
130 131
} SStreamDataBlock;

L
Liu Jicong 已提交
132 133 134 135 136 137
// ref data block, for delete
typedef struct {
  int8_t       type;
  SSDataBlock* pBlock;
} SStreamRefDataBlock;

L
Liu Jicong 已提交
138 139 140 141
typedef struct {
  int8_t type;
} SStreamCheckpoint;

142 143 144 145 146
typedef struct {
  int8_t       type;
  SSDataBlock* pBlock;
} SStreamTrigger;

L
Liu Jicong 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160
typedef struct SStreamQueueNode SStreamQueueNode;

struct SStreamQueueNode {
  SStreamQueueItem* item;
  SStreamQueueNode* next;
};

typedef struct {
  SStreamQueueNode* head;
  int64_t           size;
} SStreamQueueRes;

void streamFreeQitem(SStreamQueueItem* data);

5
54liuyao 已提交
161
#if 0
L
Liu Jicong 已提交
162 163 164 165 166 167
bool              streamQueueResEmpty(const SStreamQueueRes* pRes);
int64_t           streamQueueResSize(const SStreamQueueRes* pRes);
SStreamQueueNode* streamQueueResFront(SStreamQueueRes* pRes);
SStreamQueueNode* streamQueueResPop(SStreamQueueRes* pRes);
void              streamQueueResClear(SStreamQueueRes* pRes);
SStreamQueueRes   streamQueueBuildRes(SStreamQueueNode* pNode);
5
54liuyao 已提交
168
#endif
L
Liu Jicong 已提交
169 170 171 172 173

typedef struct {
  SStreamQueueNode* pHead;
} SStreamQueue1;

5
54liuyao 已提交
174
#if 0
L
Liu Jicong 已提交
175 176 177
bool            streamQueueHasTask(const SStreamQueue1* pQueue);
int32_t         streamQueuePush(SStreamQueue1* pQueue, SStreamQueueItem* pItem);
SStreamQueueRes streamQueueGetRes(SStreamQueue1* pQueue);
5
54liuyao 已提交
178
#endif
L
Liu Jicong 已提交
179

L
Liu Jicong 已提交
180 181 182 183
typedef struct {
  STaosQueue* queue;
  STaosQall*  qall;
  void*       qItem;
L
Liu Jicong 已提交
184 185
  int8_t      status;
} SStreamQueue;
L
Liu Jicong 已提交
186

187 188 189
int32_t streamInit();
void    streamCleanUp();

dengyihao's avatar
dengyihao 已提交
190
SStreamQueue* streamQueueOpen(int64_t cap);
L
Liu Jicong 已提交
191 192 193
void          streamQueueClose(SStreamQueue* queue);

static FORCE_INLINE void streamQueueProcessSuccess(SStreamQueue* queue) {
194
  ASSERT(atomic_load_8(&queue->status) == STREAM_QUEUE__PROCESSING);
L
Liu Jicong 已提交
195 196
  queue->qItem = NULL;
  atomic_store_8(&queue->status, STREAM_QUEUE__SUCESS);
L
Liu Jicong 已提交
197 198
}

L
Liu Jicong 已提交
199
static FORCE_INLINE void streamQueueProcessFail(SStreamQueue* queue) {
200
  ASSERT(atomic_load_8(&queue->status) == STREAM_QUEUE__PROCESSING);
L
Liu Jicong 已提交
201 202 203
  atomic_store_8(&queue->status, STREAM_QUEUE__FAILED);
}

204
void* streamQueueNextItem(SStreamQueue* pQueue);
L
Liu Jicong 已提交
205

206
SStreamDataSubmit* streamDataSubmitNew(SPackedData* pData, int32_t type);
207
void               streamDataSubmitDestroy(SStreamDataSubmit* pDataSubmit);
L
Liu Jicong 已提交
208

L
Liu Jicong 已提交
209
typedef struct {
210 211 212
  char*              qmsg;
  void*              pExecutor;   // not applicable to encoder and decoder
  struct SWalReader* pWalReader;  // not applicable to encoder and decoder
L
Liu Jicong 已提交
213 214 215
} STaskExec;

typedef struct {
L
Liu Jicong 已提交
216
  int32_t taskId;
L
Liu Jicong 已提交
217 218 219 220 221
  int32_t nodeId;
  SEpSet  epSet;
} STaskDispatcherFixedEp;

typedef struct {
L
Liu Jicong 已提交
222
  char      stbFullName[TSDB_TABLE_FNAME_LEN];
L
Liu Jicong 已提交
223
  int32_t   waitingRspCnt;
L
Liu Jicong 已提交
224
  SUseDbRsp dbInfo;
L
Liu Jicong 已提交
225 226 227
} STaskDispatcherShuffle;

typedef struct {
L
Liu Jicong 已提交
228
  int64_t         stbUid;
L
Liu Jicong 已提交
229
  char            stbFullName[TSDB_TABLE_FNAME_LEN];
L
Liu Jicong 已提交
230
  SSchemaWrapper* pSchemaWrapper;
231 232 233
  void*           vnode;  // not available to encoder and decoder
  FTbSink*        tbSinkFunc;
  STSchema*       pTSchema;
L
liuyao 已提交
234
  SSHashObj*      pTblInfo;
L
Liu Jicong 已提交
235 236
} STaskSinkTb;

L
Liu Jicong 已提交
237
typedef void FSmaSink(void* vnode, int64_t smaId, const SArray* data);
L
Liu Jicong 已提交
238

L
Liu Jicong 已提交
239
typedef struct {
L
Liu Jicong 已提交
240 241
  int64_t smaId;
  // following are not applicable to encoder and decoder
L
Liu Jicong 已提交
242
  void*     vnode;
L
Liu Jicong 已提交
243
  FSmaSink* smaSink;
L
Liu Jicong 已提交
244 245 246 247 248 249
} STaskSinkSma;

typedef struct {
  int8_t reserved;
} STaskSinkFetch;

250
typedef struct SStreamChildEpInfo {
L
Liu Jicong 已提交
251 252 253
  int32_t nodeId;
  int32_t childId;
  int32_t taskId;
254
  int8_t  dataAllowed;
L
Liu Jicong 已提交
255
  SEpSet  epSet;
L
Liu Jicong 已提交
256 257
} SStreamChildEpInfo;

258 259 260 261 262
typedef struct SStreamId {
  int64_t     streamId;
  int32_t     taskId;
  const char* idStr;
} SStreamId;
L
Liu Jicong 已提交
263

264 265
typedef struct SCheckpointInfo {
  int64_t id;
266 267
  int64_t version;     // offset in WAL
  int64_t currentVer;  // current offset in WAL, not serialize it
268 269
} SCheckpointInfo;

270
typedef struct SStreamStatus {
Y
yihaoDeng 已提交
271 272 273 274 275
  int8_t taskStatus;
  int8_t downstreamReady;  // downstream tasks are all ready now, if this flag is set
  int8_t schedStatus;
  int8_t keepTaskStatus;
  bool   transferState;
H
Haojun Liao 已提交
276
  bool   appendTranstateBlock;  // has append the transfer state data block already
Y
yihaoDeng 已提交
277 278
  int8_t timerActive;   // timer is active
  int8_t pauseAllowed;  // allowed task status to be set to be paused
279
} SStreamStatus;
L
Liu Jicong 已提交
280

281
typedef struct SHistDataRange {
282 283
  SVersionRange range;
  STimeWindow   window;
284
} SHistDataRange;
285

286
typedef struct SSTaskBasicInfo {
Y
yihaoDeng 已提交
287 288 289 290 291 292
  int32_t nodeId;  // vgroup id or snode id
  SEpSet  epSet;
  int32_t selfChildId;
  int32_t totalLevel;
  int8_t  taskLevel;
  int8_t  fillHistory;  // is fill history task or not
293
} SSTaskBasicInfo;
294

295
typedef struct SDispatchMsgInfo {
Y
yihaoDeng 已提交
296 297 298 299
  void*   pData;       // current dispatch data
  int16_t msgType;     // dispatch msg type
  int32_t retryCount;  // retry send data count
  int64_t blockingTs;  // output blocking timestamp
300
} SDispatchMsgInfo;
301

302
typedef struct {
303 304 305 306
  int8_t        type;
  int8_t        status;
  SStreamQueue* queue;
} STaskOutputInfo;
307

H
Haojun Liao 已提交
308 309 310 311 312 313
typedef struct {
  int64_t init;
  int64_t step1Start;
  int64_t step2Start;
} STaskTimestamp;

314
struct SStreamTask {
Y
yihaoDeng 已提交
315
  int64_t          ver;
316 317
  SStreamId        id;
  SSTaskBasicInfo  info;
318
  STaskOutputInfo  outputInfo;
319 320 321 322 323 324
  SDispatchMsgInfo msgInfo;
  SStreamStatus    status;
  SCheckpointInfo  chkInfo;
  STaskExec        exec;
  SHistDataRange   dataRange;
  SStreamId        historyTaskId;
H
Haojun Liao 已提交
325
  SStreamId        streamTaskId;
326 327 328
  SArray*          pUpstreamEpInfoList;  // SArray<SStreamChildEpInfo*>, // children info
  int32_t          nextCheckId;
  SArray*          checkpointInfo;  // SArray<SStreamCheckpointInfo>
H
Haojun Liao 已提交
329
  STaskTimestamp   tsInfo;
330
  // output
L
Liu Jicong 已提交
331 332 333
  union {
    STaskDispatcherFixedEp fixedEpDispatcher;
    STaskDispatcherShuffle shuffleDispatcher;
334 335 336
    STaskSinkTb            tbSink;
    STaskSinkSma           smaSink;
    STaskSinkFetch         fetchSink;
L
Liu Jicong 已提交
337 338
  };

339
  int8_t        inputStatus;
L
Liu Jicong 已提交
340
  SStreamQueue* inputQueue;
L
Liu Jicong 已提交
341

342
  // trigger
343 344
  int8_t        triggerStatus;
  int64_t       triggerParam;
345 346
  void*         schedTimer;
  void*         launchTaskTimer;
347 348
  SMsgCb*       pMsgCb;  // msg handle
  SStreamState* pState;  // state backend
349
  SArray*       pRspMsgList;
H
Haojun Liao 已提交
350
  TdThreadMutex lock;
351

352
  // the followings attributes don't be serialized
353
  int32_t             notReadyTasks;
354
  int32_t             numOfWaitingUpstream;
355 356 357 358 359
  int64_t             checkReqId;
  SArray*             checkReqIds;  // shuffle
  int32_t             refCnt;
  int64_t             checkpointingId;
  int32_t             checkpointAlignCnt;
H
Haojun Liao 已提交
360
  int32_t             transferStateAlignCnt;
361
  struct SStreamMeta* pMeta;
L
liuyao 已提交
362
  SSHashObj*          pNameMap;
363
};
L
Liu Jicong 已提交
364

365 366
// meta
typedef struct SStreamMeta {
Y
yihaoDeng 已提交
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
  char*         path;
  TDB*          db;
  TTB*          pTaskDb;
  TTB*          pCheckpointDb;
  SHashObj*     pTasks;
  SArray*       pTaskList;  // SArray<task_id*>
  void*         ahandle;
  TXN*          txn;
  FTaskExpand*  expandFunc;
  int32_t       vgId;
  SRWLatch      lock;
  int32_t       walScanCounter;
  void*         streamBackend;
  int64_t       streamBackendRid;
  SHashObj*     pTaskBackendUnique;
  TdThreadMutex backendMutex;
383 384
} SStreamMeta;

L
Liu Jicong 已提交
385 386 387
int32_t tEncodeStreamEpInfo(SEncoder* pEncoder, const SStreamChildEpInfo* pInfo);
int32_t tDecodeStreamEpInfo(SDecoder* pDecoder, SStreamChildEpInfo* pInfo);

388 389
SStreamTask* tNewStreamTask(int64_t streamId, int8_t taskLevel, int8_t fillHistory, int64_t triggerParam,
                            SArray* pTaskList);
390 391
int32_t      tEncodeStreamTask(SEncoder* pEncoder, const SStreamTask* pTask);
int32_t      tDecodeStreamTask(SDecoder* pDecoder, SStreamTask* pTask);
392
void         tFreeStreamTask(SStreamTask* pTask);
393
int32_t      tAppendDataToInputQueue(SStreamTask* pTask, SStreamQueueItem* pItem);
394
bool         tInputQueueIsFull(const SStreamTask* pTask);
L
Liu Jicong 已提交
395 396 397 398 399 400 401

typedef struct {
  SMsgHead head;
  int64_t  streamId;
  int32_t  taskId;
} SStreamTaskRunReq;

L
Liu Jicong 已提交
402 403
typedef struct {
  int64_t streamId;
404
  int32_t type;
L
Liu Jicong 已提交
405
  int32_t taskId;
L
Liu Jicong 已提交
406 407 408
  int32_t dataSrcVgId;
  int32_t upstreamTaskId;
  int32_t upstreamChildId;
L
Liu Jicong 已提交
409
  int32_t upstreamNodeId;
L
Liu Jicong 已提交
410
  int32_t blockNum;
411
  int64_t totalLen;
L
Liu Jicong 已提交
412 413
  SArray* dataLen;  // SArray<int32_t>
  SArray* data;     // SArray<SRetrieveTableRsp*>
L
Liu Jicong 已提交
414 415 416 417
} SStreamDispatchReq;

typedef struct {
  int64_t streamId;
418 419 420 421
  int32_t upstreamNodeId;
  int32_t upstreamTaskId;
  int32_t downstreamNodeId;
  int32_t downstreamTaskId;
L
Liu Jicong 已提交
422 423 424
  int8_t  inputStatus;
} SStreamDispatchRsp;

L
Liu Jicong 已提交
425 426
typedef struct {
  int64_t            streamId;
L
Liu Jicong 已提交
427
  int64_t            reqId;
L
Liu Jicong 已提交
428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
  int32_t            srcTaskId;
  int32_t            srcNodeId;
  int32_t            dstTaskId;
  int32_t            dstNodeId;
  int32_t            retrieveLen;
  SRetrieveTableRsp* pRetrieve;
} SStreamRetrieveReq;

typedef struct {
  int64_t streamId;
  int32_t childId;
  int32_t rspFromTaskId;
  int32_t rspToTaskId;
} SStreamRetrieveRsp;

443
typedef struct {
444
  int64_t reqId;
445
  int64_t streamId;
446 447 448 449
  int32_t upstreamNodeId;
  int32_t upstreamTaskId;
  int32_t downstreamNodeId;
  int32_t downstreamTaskId;
450
  int32_t childId;
451
} SStreamTaskCheckReq;
452

L
Liu Jicong 已提交
453
typedef struct {
454
  int64_t reqId;
L
Liu Jicong 已提交
455
  int64_t streamId;
L
Liu Jicong 已提交
456
  int32_t upstreamNodeId;
457 458 459 460 461 462
  int32_t upstreamTaskId;
  int32_t downstreamNodeId;
  int32_t downstreamTaskId;
  int32_t childId;
  int8_t  status;
} SStreamTaskCheckRsp;
L
Liu Jicong 已提交
463 464

typedef struct {
465 466 467
  SMsgHead msgHead;
  int64_t  streamId;
  int32_t  taskId;
L
liuyao 已提交
468 469
  int8_t   igUntreated;
} SStreamScanHistoryReq;
L
Liu Jicong 已提交
470 471 472

typedef struct {
  int64_t streamId;
473 474 475
  int32_t upstreamTaskId;
  int32_t downstreamTaskId;
  int32_t upstreamNodeId;
476
  int32_t childId;
477
} SStreamScanHistoryFinishReq, SStreamTransferReq;
L
Liu Jicong 已提交
478

479 480
int32_t tEncodeStreamScanHistoryFinishReq(SEncoder* pEncoder, const SStreamScanHistoryFinishReq* pReq);
int32_t tDecodeStreamScanHistoryFinishReq(SDecoder* pDecoder, SStreamScanHistoryFinishReq* pReq);
L
Liu Jicong 已提交
481

482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535
typedef struct {
  int64_t streamId;
  int64_t checkpointId;
  int32_t taskId;
  int32_t nodeId;
  int64_t expireTime;
} SStreamCheckpointSourceReq;

typedef struct {
  int64_t streamId;
  int64_t checkpointId;
  int32_t taskId;
  int32_t nodeId;
  int64_t expireTime;
} SStreamCheckpointSourceRsp;

int32_t tEncodeSStreamCheckpointSourceReq(SEncoder* pEncoder, const SStreamCheckpointSourceReq* pReq);
int32_t tDecodeSStreamCheckpointSourceReq(SDecoder* pDecoder, SStreamCheckpointSourceReq* pReq);

int32_t tEncodeSStreamCheckpointSourceRsp(SEncoder* pEncoder, const SStreamCheckpointSourceRsp* pRsp);
int32_t tDecodeSStreamCheckpointSourceRsp(SDecoder* pDecoder, SStreamCheckpointSourceRsp* pRsp);

typedef struct {
  SMsgHead msgHead;
  int64_t  streamId;
  int64_t  checkpointId;
  int32_t  downstreamTaskId;
  int32_t  downstreamNodeId;
  int32_t  upstreamTaskId;
  int32_t  upstreamNodeId;
  int32_t  childId;
  int64_t  expireTime;
  int8_t   taskLevel;
} SStreamCheckpointReq;

typedef struct {
  SMsgHead msgHead;
  int64_t  streamId;
  int64_t  checkpointId;
  int32_t  downstreamTaskId;
  int32_t  downstreamNodeId;
  int32_t  upstreamTaskId;
  int32_t  upstreamNodeId;
  int32_t  childId;
  int64_t  expireTime;
  int8_t   taskLevel;
} SStreamCheckpointRsp;

int32_t tEncodeSStreamCheckpointReq(SEncoder* pEncoder, const SStreamCheckpointReq* pReq);
int32_t tDecodeSStreamCheckpointReq(SDecoder* pDecoder, SStreamCheckpointReq* pReq);

int32_t tEncodeSStreamCheckpointRsp(SEncoder* pEncoder, const SStreamCheckpointRsp* pRsp);
int32_t tDecodeSStreamCheckpointRsp(SDecoder* pDecoder, SStreamCheckpointRsp* pRsp);

536 537 538 539 540 541 542 543 544 545 546
typedef struct {
  int64_t streamId;
  int32_t upstreamTaskId;
  int32_t upstreamNodeId;
  int32_t downstreamId;
  int32_t downstreamNode;
} SStreamCompleteHistoryMsg;

int32_t tEncodeCompleteHistoryDataMsg(SEncoder* pEncoder, const SStreamCompleteHistoryMsg* pReq);
int32_t tDecodeCompleteHistoryDataMsg(SDecoder* pDecoder, SStreamCompleteHistoryMsg* pReq);

L
Liu Jicong 已提交
547 548
typedef struct {
  int64_t streamId;
L
Liu Jicong 已提交
549 550 551
  int32_t downstreamTaskId;
  int32_t taskId;
} SStreamRecoverDownstreamReq;
L
Liu Jicong 已提交
552 553

typedef struct {
L
Liu Jicong 已提交
554 555 556 557 558 559
  int64_t streamId;
  int32_t downstreamTaskId;
  int32_t taskId;
  SArray* checkpointVer;  // SArray<SStreamCheckpointInfo>
} SStreamRecoverDownstreamRsp;

560 561
int32_t tEncodeStreamTaskCheckReq(SEncoder* pEncoder, const SStreamTaskCheckReq* pReq);
int32_t tDecodeStreamTaskCheckReq(SDecoder* pDecoder, SStreamTaskCheckReq* pReq);
562

563 564
int32_t tEncodeStreamTaskCheckRsp(SEncoder* pEncoder, const SStreamTaskCheckRsp* pRsp);
int32_t tDecodeStreamTaskCheckRsp(SDecoder* pDecoder, SStreamTaskCheckRsp* pRsp);
565

566 567
int32_t tEncodeSStreamTaskScanHistoryReq(SEncoder* pEncoder, const SStreamRecoverDownstreamReq* pReq);
int32_t tDecodeSStreamTaskScanHistoryReq(SDecoder* pDecoder, SStreamRecoverDownstreamReq* pReq);
L
Liu Jicong 已提交
568 569 570 571

int32_t tEncodeSStreamTaskRecoverRsp(SEncoder* pEncoder, const SStreamRecoverDownstreamRsp* pRsp);
int32_t tDecodeSStreamTaskRecoverRsp(SDecoder* pDecoder, SStreamRecoverDownstreamRsp* pRsp);

572
int32_t tDecodeStreamDispatchReq(SDecoder* pDecoder, SStreamDispatchReq* pReq);
L
Liu Jicong 已提交
573
int32_t tDecodeStreamRetrieveReq(SDecoder* pDecoder, SStreamRetrieveReq* pReq);
L
Liu Jicong 已提交
574 575
void    tDeleteStreamRetrieveReq(SStreamRetrieveReq* pReq);

576 577 578
int32_t tInitStreamDispatchReq(SStreamDispatchReq* pReq, const SStreamTask* pTask, int32_t vgId, int32_t numOfBlocks,
                               int64_t dstTaskId);
void    tDeleteStreamDispatchReq(SStreamDispatchReq* pReq);
579

580
int32_t streamSetupScheduleTrigger(SStreamTask* pTask);
L
Liu Jicong 已提交
581

L
Liu Jicong 已提交
582
int32_t streamProcessRunReq(SStreamTask* pTask);
583
int32_t streamProcessDispatchMsg(SStreamTask* pTask, SStreamDispatchReq* pReq, SRpcMsg* pMsg, bool exec);
584
int32_t streamProcessDispatchRsp(SStreamTask* pTask, SStreamDispatchRsp* pRsp, int32_t code);
L
Liu Jicong 已提交
585

L
Liu Jicong 已提交
586 587
int32_t streamProcessRetrieveReq(SStreamTask* pTask, SStreamRetrieveReq* pReq, SRpcMsg* pMsg);

588
void    streamTaskInputFail(SStreamTask* pTask);
L
Liu Jicong 已提交
589 590
int32_t streamTryExec(SStreamTask* pTask);
int32_t streamSchedExec(SStreamTask* pTask);
591
int32_t streamTaskOutputResultBlock(SStreamTask* pTask, SStreamDataBlock* pBlock);
592
bool    streamTaskShouldStop(const SStreamStatus* pStatus);
L
liuyao 已提交
593
bool    streamTaskShouldPause(const SStreamStatus* pStatus);
594
bool    streamTaskIsIdle(const SStreamTask* pTask);
595
int32_t streamTaskEndScanWAL(SStreamTask* pTask);
L
Liu Jicong 已提交
596

Y
yihaoDeng 已提交
597 598
SStreamChildEpInfo* streamTaskGetUpstreamTaskEpInfo(SStreamTask* pTask, int32_t taskId);
int32_t             streamScanExec(SStreamTask* pTask, int32_t batchSize);
599

Y
yihaoDeng 已提交
600
char* createStreamTaskIdStr(int64_t streamId, int32_t taskId);
601

602
// recover and fill history
603 604
void    streamTaskCheckDownstreamTasks(SStreamTask* pTask);
int32_t streamTaskDoCheckDownstreamTasks(SStreamTask* pTask);
605
int32_t streamTaskLaunchScanHistory(SStreamTask* pTask);
606
int32_t streamTaskCheckStatus(SStreamTask* pTask);
607 608
int32_t streamSendCheckRsp(const SStreamMeta* pMeta, const SStreamTaskCheckReq* pReq, SStreamTaskCheckRsp* pRsp,
                           SRpcHandleInfo* pRpcInfo, int32_t taskId);
609
int32_t streamProcessCheckRsp(SStreamTask* pTask, const SStreamTaskCheckRsp* pRsp);
610
int32_t streamLaunchFillHistoryTask(SStreamTask* pTask);
611
int32_t streamTaskScanHistoryDataComplete(SStreamTask* pTask);
612
int32_t streamStartScanHistoryAsync(SStreamTask* pTask, int8_t igUntreated);
613
bool    streamHistoryTaskSetVerRangeStep2(SStreamTask* pTask, int64_t latestVer);
614

615
// common
Y
yihaoDeng 已提交
616 617
int32_t     streamRestoreParam(SStreamTask* pTask);
int32_t     streamSetStatusNormal(SStreamTask* pTask);
618
const char* streamGetTaskStatusStr(int32_t status);
619
void        streamTaskPause(SStreamTask* pTask);
620 621 622
void        streamTaskResume(SStreamTask* pTask);
void        streamTaskHalt(SStreamTask* pTask);
void        streamTaskResumeFromHalt(SStreamTask* pTask);
623 624
void        streamTaskDisablePause(SStreamTask* pTask);
void        streamTaskEnablePause(SStreamTask* pTask);
625

626
// source level
L
liuyao 已提交
627 628
int32_t streamSetParamForStreamScannerStep1(SStreamTask* pTask, SVersionRange* pVerRange, STimeWindow* pWindow);
int32_t streamSetParamForStreamScannerStep2(SStreamTask* pTask, SVersionRange* pVerRange, STimeWindow* pWindow);
629
int32_t streamSourceScanHistoryData(SStreamTask* pTask);
630
int32_t streamDispatchScanHistoryFinishMsg(SStreamTask* pTask);
H
Haojun Liao 已提交
631 632

int32_t streamDispatchTransferStateMsg(SStreamTask* pTask);
633
int32_t appendTranstateIntoInputQ(SStreamTask* pTask);
H
Haojun Liao 已提交
634

635
// agg level
636
int32_t streamTaskScanHistoryPrepare(SStreamTask* pTask);
Y
yihaoDeng 已提交
637 638
int32_t streamProcessScanHistoryFinishReq(SStreamTask* pTask, SStreamScanHistoryFinishReq* pReq,
                                          SRpcHandleInfo* pRpcInfo);
639
int32_t streamProcessScanHistoryFinishRsp(SStreamTask* pTask);
640

641
// stream task meta
dengyihao's avatar
dengyihao 已提交
642 643
void         streamMetaInit();
void         streamMetaCleanup();
644
SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandFunc, int32_t vgId);
L
Liu Jicong 已提交
645
void         streamMetaClose(SStreamMeta* streamMeta);
646 647

// save to b-tree meta store
648
int32_t      streamMetaSaveTask(SStreamMeta* pMeta, SStreamTask* pTask);
649
int32_t      streamMetaRemoveTask(SStreamMeta* pMeta, int32_t taskId);
650
int32_t      streamMetaRegisterTask(SStreamMeta* pMeta, int64_t ver, SStreamTask* pTask, bool* pAdded);
H
Haojun Liao 已提交
651
int32_t      streamMetaUnregisterTask(SStreamMeta* pMeta, int64_t streamId, int32_t taskId);
Y
yihaoDeng 已提交
652
int32_t      streamMetaGetNumOfTasks(SStreamMeta* pMeta);  // todo remove it
653
SStreamTask* streamMetaAcquireTask(SStreamMeta* pMeta, int64_t streamId, int32_t taskId);
L
Liu Jicong 已提交
654 655
void         streamMetaReleaseTask(SStreamMeta* pMeta, SStreamTask* pTask);

656 657 658
int32_t streamMetaBegin(SStreamMeta* pMeta);
int32_t streamMetaCommit(SStreamMeta* pMeta);
int32_t streamLoadTasks(SStreamMeta* pMeta, int64_t ver);
L
Liu Jicong 已提交
659

660 661 662 663 664
// checkpoint
int32_t streamProcessCheckpointSourceReq(SStreamMeta* pMeta, SStreamTask* pTask, SStreamCheckpointSourceReq* pReq);
int32_t streamProcessCheckpointReq(SStreamMeta* pMeta, SStreamTask* pTask, SStreamCheckpointReq* pReq);
int32_t streamProcessCheckpointRsp(SStreamMeta* pMeta, SStreamTask* pTask, SStreamCheckpointRsp* pRsp);

L
liuyao 已提交
665 666
int32_t streamTaskReleaseState(SStreamTask* pTask);
int32_t streamTaskReloadState(SStreamTask* pTask);
H
Haojun Liao 已提交
667 668
int32_t streamAlignTransferState(SStreamTask* pTask);

L
Liu Jicong 已提交
669 670 671 672
#ifdef __cplusplus
}
#endif

L
Liu Jicong 已提交
673
#endif /* ifndef _STREAM_H_ */