datafile.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_DATAFILE_H
  3. #define NETDATA_DATAFILE_H
  4. #include "rrdengine.h"
  5. /* Forward declarations */
  6. struct rrdengine_datafile;
  7. struct rrdengine_journalfile;
  8. struct rrdengine_instance;
  9. #define DATAFILE_PREFIX "datafile-"
  10. #define DATAFILE_EXTENSION ".ndf"
  11. #define MAX_DATAFILE_SIZE (1073741824LU)
  12. #define MIN_DATAFILE_SIZE (4194304LU)
  13. #define MAX_DATAFILES (65536) /* Supports up to 64TiB for now */
  14. #define TARGET_DATAFILES (20)
  15. #define DATAFILE_IDEAL_IO_SIZE (1048576U)
  16. struct extent_info {
  17. uint64_t offset;
  18. uint32_t size;
  19. uint8_t number_of_pages;
  20. struct rrdengine_datafile *datafile;
  21. struct extent_info *next;
  22. struct rrdeng_page_descr *pages[];
  23. };
  24. struct rrdengine_df_extents {
  25. /* the extent list is sorted based on disk offset */
  26. struct extent_info *first;
  27. struct extent_info *last;
  28. };
  29. /* only one event loop is supported for now */
  30. struct rrdengine_datafile {
  31. unsigned tier;
  32. unsigned fileno;
  33. uv_file file;
  34. uint64_t pos;
  35. struct rrdengine_instance *ctx;
  36. struct rrdengine_df_extents extents;
  37. struct rrdengine_journalfile *journalfile;
  38. struct rrdengine_datafile *next;
  39. };
  40. struct rrdengine_datafile_list {
  41. struct rrdengine_datafile *first; /* oldest */
  42. struct rrdengine_datafile *last; /* newest */
  43. };
  44. extern void df_extent_insert(struct extent_info *extent);
  45. extern void datafile_list_insert(struct rrdengine_instance *ctx, struct rrdengine_datafile *datafile);
  46. extern void datafile_list_delete(struct rrdengine_instance *ctx, struct rrdengine_datafile *datafile);
  47. extern void generate_datafilepath(struct rrdengine_datafile *datafile, char *str, size_t maxlen);
  48. extern int close_data_file(struct rrdengine_datafile *datafile);
  49. extern int unlink_data_file(struct rrdengine_datafile *datafile);
  50. extern int destroy_data_file(struct rrdengine_datafile *datafile);
  51. extern int create_data_file(struct rrdengine_datafile *datafile);
  52. extern int create_new_datafile_pair(struct rrdengine_instance *ctx, unsigned tier, unsigned fileno);
  53. extern int init_data_files(struct rrdengine_instance *ctx);
  54. extern void finalize_data_files(struct rrdengine_instance *ctx);
  55. #endif /* NETDATA_DATAFILE_H */