1 /* 2 Copyright 2005-2010 Jakub Kruszona-Zawadzki, Gemius SA, 2013-2014 EditShare, 2013-2015 Skytechnology sp. z o.o.. 3 4 This file was part of MooseFS and is part of LizardFS. 5 6 LizardFS 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 3. 9 10 LizardFS 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 LizardFS If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #pragma once 20 21 #include "common/platform.h" 22 23 #include <inttypes.h> 24 #include <stdio.h> 25 26 #include "common/chunk_part_type.h" 27 #include "common/chunk_type_with_address.h" 28 #include "common/chunk_with_address_and_label.h" 29 #include "common/chunks_availability_state.h" 30 #include "protocol/cltoma.h" 31 #include "master/checksum.h" 32 33 struct matocsserventry; 34 35 extern bool gAvoidSameIpChunkservers; 36 37 int chunk_increase_version(uint64_t chunkid); 38 int chunk_set_version(uint64_t chunkid,uint32_t version); 39 int chunk_change_file(uint64_t chunkid,uint8_t prevgoal,uint8_t newgoal); 40 int chunk_delete_file(uint64_t chunkid,uint8_t goal); 41 int chunk_add_file(uint64_t chunkid,uint8_t goal); 42 int chunk_unlock(uint64_t chunkid); 43 uint8_t chunk_apply_modification(uint32_t ts, uint64_t oldChunkId, uint32_t lockid, uint8_t goal, 44 bool doIncreaseVersion, uint64_t *newChunkId); 45 46 // Tries to set next chunk id to a passed value, returns status 47 uint8_t chunk_set_next_chunkid(uint64_t nextChunkIdToBeSet); 48 49 #ifdef METARESTORE 50 void chunk_dump(void); 51 #else 52 uint8_t chunk_multi_modify(uint64_t ochunkid, uint32_t *lockid, uint8_t goal, 53 bool usedummylockid, bool quota_exceeded, uint8_t *opflag, uint64_t *nchunkid, 54 uint32_t min_server_version); 55 uint8_t chunk_multi_truncate(uint64_t ochunkid, uint32_t lockid, uint32_t length, 56 uint8_t goal, bool denyTruncatingParityParts, bool quota_exceeded, uint64_t *nchunkid); 57 void chunk_stats(uint32_t *del,uint32_t *repl); 58 void chunk_store_info(uint8_t *buff); 59 uint32_t chunk_get_missing_count(void); 60 void chunk_store_chunkcounters(uint8_t *buff,uint8_t matrixid); 61 uint32_t chunk_count(void); 62 const ChunksReplicationState& chunk_get_replication_state(); 63 const ChunksAvailabilityState& chunk_get_availability_state(); 64 void chunk_info(uint32_t *allchunks,uint32_t *allcopies,uint32_t *regcopies); 65 66 /// Checks if the given chunk has only invalid copies (ie. needs to be repaired). 67 bool chunk_has_only_invalid_copies(uint64_t chunkid); 68 69 int chunk_get_fullcopies(uint64_t chunkid,uint8_t *vcopies); 70 int chunk_get_partstomodify(uint64_t chunkid, int &recover, int &remove); 71 int chunk_repair(uint8_t goal,uint64_t ochunkid,uint32_t *nversion, uint8_t correct_only); 72 73 int chunk_getversionandlocations(uint64_t chunkid, uint32_t currentIp, uint32_t& version, 74 uint32_t maxNumberOfChunkCopies, std::vector<ChunkTypeWithAddress>& serversList); 75 int chunk_getversionandlocations(uint64_t chunkid, uint32_t currentIp, uint32_t& version, 76 uint32_t maxNumberOfChunkCopies, std::vector<ChunkPartWithAddressAndLabel>& serversList); 77 void chunk_server_has_chunk(matocsserventry *ptr, uint64_t chunkid, uint32_t version, ChunkPartType chunkType); 78 void chunk_damaged(matocsserventry *ptr, uint64_t chunkid, ChunkPartType chunk_type); 79 void chunk_lost(matocsserventry *ptr, uint64_t chunkid, ChunkPartType chunk_type); 80 void chunk_server_disconnected(matocsserventry *ptr, const MediaLabel &label); 81 void chunk_server_unlabelled_connected(); 82 void chunk_server_label_changed(const MediaLabel &previousLabel, const MediaLabel &newLabel); 83 84 void chunk_got_delete_status(matocsserventry *ptr, uint64_t chunkId, ChunkPartType chunkType, uint8_t status); 85 void chunk_got_replicate_status(matocsserventry *ptr, uint64_t chunkId, uint32_t chunkVersion, 86 ChunkPartType chunkType, uint8_t status); 87 88 void chunk_got_create_status(matocsserventry *ptr, uint64_t chunkid, ChunkPartType chunkType, uint8_t status); 89 void chunk_got_duplicate_status(matocsserventry *ptr, uint64_t chunkId, ChunkPartType chunkType, uint8_t status); 90 void chunk_got_setversion_status(matocsserventry *ptr, uint64_t chunkId, ChunkPartType chunkType, uint8_t status); 91 void chunk_got_truncate_status(matocsserventry *ptr, uint64_t chunkId, ChunkPartType chunkType, uint8_t status); 92 void chunk_got_duptrunc_status(matocsserventry *ptr, uint64_t chunkId, ChunkPartType chunkType, uint8_t status); 93 94 int chunk_can_unlock(uint64_t chunkid, uint32_t lockid); 95 96 int chunk_invalidate_goal_cache(); 97 98 #endif 99 100 int chunk_load(FILE *fd, bool loadLockIds); 101 void chunk_store(FILE *fd); 102 void chunk_unload(void); 103 void chunk_newfs(void); 104 int chunk_strinit(void); 105 uint64_t chunk_checksum(ChecksumMode mode); 106 ChecksumRecalculationStatus chunks_update_checksum_a_bit(uint32_t speedLimit); 107