tsdbFSet.c 4.0 KB
Newer Older
H
Hongze Cheng 已提交
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/>.
 */

H
Hongze Cheng 已提交
16
#include "inc/tsdbFSet.h"
H
Hongze Cheng 已提交
17

H
Hongze Cheng 已提交
18 19 20 21 22
static int32_t stt_lvl_to_json(const SSttLvl *lvl, cJSON *json) {
  if (cJSON_AddNumberToObject(json, "lvl", lvl->lvl) == NULL) {
    return TSDB_CODE_OUT_OF_MEMORY;
  }

H
Hongze Cheng 已提交
23 24
  cJSON *ajson = cJSON_AddArrayToObject(json, "stt");
  if (ajson == NULL) return TSDB_CODE_OUT_OF_MEMORY;
H
Hongze Cheng 已提交
25

H
Hongze Cheng 已提交
26 27 28
  SRBTreeIter iter = tRBTreeIterCreate(&lvl->sttTree, 1);
  for (SRBTreeNode *node = tRBTreeIterNext(&iter); node; node = tRBTreeIterNext(&iter)) {
    STFileObj *fobj = TCONTAINER_OF(node, STFileObj, rbtn);
H
Hongze Cheng 已提交
29

H
Hongze Cheng 已提交
30 31
    cJSON *item = cJSON_CreateObject();
    if (item == NULL) return TSDB_CODE_OUT_OF_MEMORY;
H
Hongze Cheng 已提交
32

H
Hongze Cheng 已提交
33 34 35 36 37 38 39 40
    int32_t code = tsdbTFileToJson(&fobj->f, item);
    if (code) {
      cJSON_Delete(item);
      return code;
    }

    cJSON_AddItemToArray(ajson, item);
  }
H
Hongze Cheng 已提交
41 42 43 44

  return 0;
}

H
Hongze Cheng 已提交
45 46 47 48 49
static int32_t stt_lvl_from_json(const cJSON *json, SSttLvl *lvl) {
  // TODO
  return 0;
}

H
Hongze Cheng 已提交
50 51
static int32_t add_file(STFileSet *fset, STFile *f) {
  if (f->type == TSDB_FTYPE_STT) {
H
Hongze Cheng 已提交
52
    SSttLvl *lvl = NULL;  // TODO
H
Hongze Cheng 已提交
53

H
Hongze Cheng 已提交
54 55
    // lvl->nstt++;
    // lvl->fstt = f;
H
Hongze Cheng 已提交
56
  } else {
H
Hongze Cheng 已提交
57
    // fset->farr[f->type] = f;
H
Hongze Cheng 已提交
58 59 60 61 62
  }

  return 0;
}

H
Hongze Cheng 已提交
63
int32_t tsdbFileSetToJson(const STFileSet *fset, cJSON *json) {
H
Hongze Cheng 已提交
64 65
  int32_t code = 0;

H
Hongze Cheng 已提交
66 67 68 69
  // fid
  if (cJSON_AddNumberToObject(json, "fid", fset->fid) == NULL) {
    return TSDB_CODE_OUT_OF_MEMORY;
  }
H
Hongze Cheng 已提交
70

H
Hongze Cheng 已提交
71 72 73 74 75
  for (int32_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) {
    if (fset->farr[ftype] == NULL) {
      continue;
    }

H
Hongze Cheng 已提交
76 77
    code = tsdbTFileToJson(&fset->farr[ftype]->f, json);
    if (code) return code;
H
Hongze Cheng 已提交
78 79 80 81 82 83
  }

  // each level
  cJSON *ajson = cJSON_AddArrayToObject(json, "stt");
  if (ajson == NULL) return TSDB_CODE_OUT_OF_MEMORY;

H
Hongze Cheng 已提交
84 85 86 87 88 89
  SRBTreeIter iter = tRBTreeIterCreate(&fset->lvlTree, 1);
  for (SRBTreeNode *node = tRBTreeIterNext(&iter); node; node = tRBTreeIterNext(&iter)) {
    SSttLvl *lvl = TCONTAINER_OF(node, SSttLvl, rbtn);
    code = stt_lvl_to_json(lvl, ajson);
    if (code) return code;
  }
H
Hongze Cheng 已提交
90 91

  return 0;
H
Hongze Cheng 已提交
92 93
}

H
Hongze Cheng 已提交
94 95 96 97 98 99 100 101 102 103 104 105
int32_t tsdbFileSetFromJson(const cJSON *json, STFileSet *fset) {
  const cJSON *item;

  /* fid */
  item = cJSON_GetObjectItem(json, "fid");
  if (cJSON_IsNumber(item)) {
    fset->fid = item->valueint;
  } else {
    return TSDB_CODE_FILE_CORRUPTED;
  }

  for (int32_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) {
H
Hongze Cheng 已提交
106 107
    // int32_t code = tsdbTFileFromJson(json, ftype, &fset->farr[ftype]->f);
    // if (code) return code;
H
Hongze Cheng 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120
  }

  // each level
  item = cJSON_GetObjectItem(json, "stt");
  if (cJSON_IsArray(item)) {
    // TODO
  } else {
    return TSDB_CODE_FILE_CORRUPTED;
  }

  return 0;
}

H
Hongze Cheng 已提交
121 122 123 124
int32_t tsdbFSetCmprFn(const STFileSet *pSet1, const STFileSet *pSet2) {
  if (pSet1->fid < pSet2->fid) return -1;
  if (pSet1->fid > pSet2->fid) return 1;
  return 0;
H
Hongze Cheng 已提交
125 126
}

H
Hongze Cheng 已提交
127
int32_t tsdbFSetEdit(STFileSet *fset, const STFileOp *op) {
H
Hongze Cheng 已提交
128 129
  int32_t code;

H
Hongze Cheng 已提交
130 131 132 133
  ASSERT(fset->fid == op->fid);

  if (op->oState.size == 0) {
    // create
H
Hongze Cheng 已提交
134 135 136
    // STFile *f;
    // code = tsdbTFileCreate(&op->nState, &f);
    // if (code) return code;
H
Hongze Cheng 已提交
137

H
Hongze Cheng 已提交
138
    // add_file(fset, f);
H
Hongze Cheng 已提交
139 140 141 142 143 144 145 146 147 148 149 150 151
  } else if (op->nState.size == 0) {
    // delete
  } else {
    // modify
  }
  return 0;
}

int32_t tsdbFileSetInit(STFileSet *pSet) {
  for (tsdb_ftype_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ftype++) {
    pSet->farr[ftype] = NULL;
  }

H
Hongze Cheng 已提交
152 153 154 155
  // LISTD_INIT(&pSet->lvl0, listNode);
  // pSet->lvl0.lvl = 0;
  // pSet->lvl0.nstt = 0;
  // pSet->lvl0.fstt = NULL;
H
Hongze Cheng 已提交
156 157 158 159
  return 0;
}

int32_t tsdbFileSetClear(STFileSet *pSet) {
H
Hongze Cheng 已提交
160 161
  // TODO
  return 0;
H
Hongze Cheng 已提交
162
}