tdbPgCache.h 1.6 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 17
#ifndef _TD_PAGE_CACHE_H_
#define _TD_PAGE_CACHE_H_
H
Hongze Cheng 已提交
18 19 20 21 22

#ifdef __cplusplus
extern "C" {
#endif

H
Hongze Cheng 已提交
23 24 25 26
typedef struct SPgCache SPgCache;
typedef struct SPage    SPage;

// SPgCache
H
Hongze Cheng 已提交
27 28
int pgCacheOpen(SPgCache **ppPgCache, pgsz_t pgSize, int32_t npage);
int pgCacheClose(SPgCache *pPgCache);
H
Hongze Cheng 已提交
29

H
Hongze Cheng 已提交
30
SPage *pgCacheFetch(SPgCache *pPgCache, pgid_t pgid);
H
Hongze Cheng 已提交
31 32 33 34
int    pgCacheRelease(SPage *pPage);

// SPage

H
Hongze Cheng 已提交
35 36 37 38 39 40 41 42 43 44
typedef TD_DLIST_NODE(SPage) SPgListNode;
struct SPage {
  pgid_t      pgid;      // page id
  frame_id_t  frameid;   // frame id
  SPgListNode freeNode;  // for SPgCache.freeList
  SPgListNode pghtNode;  // for pght
  SPgListNode lruNode;   // for LRU
  uint8_t *   pData;     // real data
};

H
Hongze Cheng 已提交
45 46
typedef TD_DLIST(SPage) SPgList;
struct SPgCache {
H
Hongze Cheng 已提交
47
  TENV *   pEnv;  // TENV containing this page cache
H
Hongze Cheng 已提交
48
  SRWLatch mutex;
H
Hongze Cheng 已提交
49
  pgsz_t   pgsize;
H
Hongze Cheng 已提交
50 51 52 53 54 55 56 57 58 59
  int32_t  npage;
  SPage *  pages;
  SPgList  freeList;
  SPgList  lru;
  struct {
    int32_t  nbucket;
    SPgList *buckets;
  } pght;  // page hash table
};

H
Hongze Cheng 已提交
60 61 62 63
#ifdef __cplusplus
}
#endif

H
Hongze Cheng 已提交
64
#endif /*_TD_PAGE_CACHE_H_*/