1 /* 2 * Copyright (C) 2021 Jakub Kruszona-Zawadzki, Core Technology Sp. z o.o. 3 * 4 * This file is part of MooseFS. 5 * 6 * MooseFS is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, version 2 (only). 9 * 10 * MooseFS is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with MooseFS; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA 18 * or visit http://www.gnu.org/licenses/gpl-2.0.html 19 */ 20 21 #ifndef _CHUNKS_H_ 22 #define _CHUNKS_H_ 23 24 #include <stdio.h> 25 #include <inttypes.h> 26 #include "bio.h" 27 28 #define MAXCSCOUNT 10000 29 30 #define CHUNK_OP_DELETE_TRY 0 31 #define CHUNK_OP_REPLICATE_TRY 1 32 #define CHUNK_OP_CREATE_TRY 2 33 #define CHUNK_OP_CHANGE_TRY 3 34 #define CHUNK_OP_DELETE_OK 4 35 #define CHUNK_OP_REPLICATE_OK 5 36 #define CHUNK_OP_CREATE_OK 6 37 #define CHUNK_OP_CHANGE_OK 7 38 #define CHUNK_OP_DELETE_ERR 8 39 #define CHUNK_OP_REPLICATE_ERR 9 40 #define CHUNK_OP_CREATE_ERR 10 41 #define CHUNK_OP_CHANGE_ERR 11 42 43 typedef enum { 44 CHUNK_FLOOP_NOTFOUND, 45 CHUNK_FLOOP_DELETED, 46 CHUNK_FLOOP_MISSING_NOCOPY, 47 CHUNK_FLOOP_MISSING_INVALID, 48 CHUNK_FLOOP_MISSING_WRONGVERSION, 49 CHUNK_FLOOP_UNDERGOAL_AFLAG_NOT_CHANGED, 50 CHUNK_FLOOP_UNDERGOAL_AFLAG_CHANGED, 51 CHUNK_FLOOP_OK_AFLAG_NOT_CHANGED, 52 CHUNK_FLOOP_OK_AFLAG_CHANGED 53 } chunkfloop; 54 55 int chunk_mr_multi_modify(uint32_t ts,uint64_t *nchunkid,uint64_t ochunkid,uint8_t sclassid,uint8_t opflag); 56 int chunk_mr_multi_truncate(uint32_t ts,uint64_t *nchunkid,uint64_t ochunkid,uint8_t sclassid); 57 //int chunk_multi_reinitialize(uint32_t ts,uint64_t chunkid); 58 int chunk_mr_unlock(uint64_t chunkid); 59 int chunk_mr_increase_version(uint64_t chunkid); 60 int chunk_mr_set_version(uint64_t chunkid,uint32_t version); 61 62 int chunk_mr_nextchunkid(uint64_t nchunkid); 63 int chunk_mr_chunkadd(uint32_t ts,uint64_t chunkid,uint32_t version,uint32_t lockedto); 64 int chunk_mr_chunkdel(uint32_t ts,uint64_t chunkid,uint32_t version); 65 66 // void chunk_text_dump(FILE *fd); 67 68 void chunk_stats(uint32_t chunkops[12]); 69 void chunk_store_info(uint8_t *buff); 70 uint32_t chunk_get_missing_count(void); 71 void chunk_store_chunkcounters(uint8_t *buff,uint8_t matrixid); 72 uint32_t chunk_count(void); 73 void chunk_sclass_counters(uint8_t sclassid,uint8_t archflag,uint8_t goal,uint64_t *undergoal,uint64_t *exactgoal,uint64_t *overgoal); 74 void chunk_info(uint32_t *allchunks,uint32_t *allcopies,uint32_t *regcopies); 75 uint8_t chunk_counters_in_progress(void); 76 77 int chunk_get_validcopies(uint64_t chunkid,uint8_t *vcopies); 78 79 int chunk_get_archflag(uint64_t chunkid,uint8_t *archflag); 80 int chunk_univ_archflag(uint64_t chunkid,uint8_t archflag,uint32_t *archflagchanged); 81 chunkfloop chunk_fileloop_task(uint64_t chunkid,uint8_t sclassid,uint8_t aftereof,uint8_t archflag); 82 83 int chunk_read_check(uint32_t ts,uint64_t chunkid); 84 int chunk_multi_modify(uint8_t continueop,uint64_t *nchunkid,uint64_t ochunkid,uint8_t sclassid,uint8_t *opflag,uint32_t clientip); 85 int chunk_multi_truncate(uint64_t *nchunkid,uint64_t ochunkid,uint32_t length,uint8_t sclassid); 86 //int chunk_multi_reinitialize(uint64_t chunkid); 87 int chunk_repair(uint8_t sclassid,uint64_t ochunkid,uint32_t *nversion); 88 89 int chunk_locked_or_busy(void *cptr); 90 91 /* ---- */ 92 93 uint8_t chunk_get_version_and_csdata(uint8_t mode,uint64_t chunkid,uint32_t cuip,uint32_t *version,uint8_t *count,uint8_t cs_data[100*14]); 94 uint8_t chunk_get_version_and_copies(uint64_t chunkid,uint32_t *version,uint8_t *count,uint8_t cs_data[100*7]); 95 uint8_t chunk_get_copies(uint64_t chunkid,uint8_t *count); 96 uint8_t chunk_get_version(uint64_t chunkid,uint32_t *version); 97 98 /* ---- */ 99 uint8_t chunk_get_mfrstatus(uint16_t csid); 100 101 uint16_t chunk_server_connected(void *ptr); 102 103 void chunk_server_has_chunk(uint16_t csid,uint64_t chunkid,uint32_t version); 104 void chunk_damaged(uint16_t csid,uint64_t chunkid); 105 void chunk_lost(uint16_t csid,uint64_t chunkid); 106 void chunk_server_register_end(uint16_t csid); 107 void chunk_server_disconnected(uint16_t csid); 108 109 void chunk_got_delete_status(uint16_t csid,uint64_t chunkid,uint8_t status); 110 void chunk_got_replicate_status(uint16_t csid,uint64_t chunkid,uint32_t version,uint8_t status); 111 112 void chunk_got_chunkop_status(uint16_t csid,uint64_t chunkid,uint8_t status); 113 114 void chunk_got_create_status(uint16_t csid,uint64_t chunkid,uint8_t status); 115 void chunk_got_duplicate_status(uint16_t csid,uint64_t chunkid,uint8_t status); 116 void chunk_got_setversion_status(uint16_t csid,uint64_t chunkid,uint8_t status); 117 void chunk_got_truncate_status(uint16_t csid,uint64_t chunkid,uint8_t status); 118 void chunk_got_duptrunc_status(uint16_t csid,uint64_t chunkid,uint8_t status); 119 120 /* ---- */ 121 uint8_t chunk_labelset_can_be_fulfilled(uint8_t labelcnt,uint32_t **labelmasks); 122 123 uint8_t chunk_no_more_pending_jobs(void); 124 125 int chunk_change_file(uint64_t chunkid,uint8_t prevsclassid,uint8_t newsclassid); 126 int chunk_delete_file(uint64_t chunkid,uint8_t sclassid); 127 int chunk_add_file(uint64_t chunkid,uint8_t sclassid); 128 int chunk_unlock(uint64_t chunkid); 129 130 void chunk_get_memusage(uint64_t allocated[3],uint64_t used[3]); 131 132 int chunk_load(bio *fd,uint8_t mver); 133 uint8_t chunk_store(bio *fd); 134 void chunk_cleanup(void); 135 void chunk_newfs(void); 136 int chunk_strinit(void); 137 138 #endif 139