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 _MATOCSSERV_H_
22 #define _MATOCSSERV_H_
23 
24 #include <inttypes.h>
25 #include "chunks.h" // MAXCSCOUNT
26 
27 uint8_t matocsserv_server_has_labels(void *e,uint32_t *labelmask);
28 uint32_t matocsserv_server_get_labelmask(void *e);
29 uint32_t matocsserv_server_get_ip(void *e);
30 uint16_t matocsserv_servers_with_labelsets(uint32_t *labelmask);
31 uint16_t matocsserv_servers_with_label(uint8_t label);
32 uint16_t matocsserv_servers_count(void);
33 uint16_t matocsserv_almostfull_servers(void);
34 
35 // void matocsserv_usagedifference(double *minusage,double *maxusage,uint16_t *usablescount,uint16_t *totalscount);
36 // uint16_t matocsserv_getservers_ordered(uint16_t csids[MAXCSCOUNT],double maxusagediff,uint32_t *min,uint32_t *max);
37 void matocsserv_getservers_test(uint16_t *stdcscnt,uint16_t stdcsids[MAXCSCOUNT],uint16_t *olcscnt,uint16_t olcsids[MAXCSCOUNT],uint16_t *allcscnt,uint16_t allcsids[MAXCSCOUNT]);
38 uint16_t matocsserv_getservers_ordered(uint16_t csids[MAXCSCOUNT]);
39 uint16_t matocsserv_getservers_wrandom(uint16_t csids[MAXCSCOUNT],uint16_t *overloaded);
40 void matocsserv_useservers_wrandom(void* servers[MAXCSCOUNT],uint16_t cnt);
41 // uint16_t matocsserv_getservers_lessrepl(uint16_t csids[MAXCSCOUNT],double replimit,uint8_t highpriority,uint8_t *allservflag);
42 
43 #define CSSTATE_NO_SPACE 3
44 #define CSSTATE_LIMIT_REACHED 2
45 #define CSSTATE_OVERLOADED 1
46 #define CSSTATE_OK 0
47 
48 void matocsserv_get_server_groups(uint16_t csids[MAXCSCOUNT],double replimit,uint16_t counters[4]);
49 
50 
51 int matocsserv_have_availspace(void);
52 void matocsserv_getspace(uint64_t *totalspace,uint64_t *availspace,uint64_t *freespace);
53 char* matocsserv_getstrip(void *e);
54 int matocsserv_get_csdata(void *e,uint32_t *servip,uint16_t *servport,uint32_t *servver,uint32_t *servlabelmask);
55 void matocsserv_getservdata(void *e,uint32_t *ver,uint64_t *uspc,uint64_t *tspc,uint32_t *chunkcnt,uint64_t *tduspc,uint64_t *tdtspc,uint32_t *tdchunkcnt,uint32_t *errcnt,uint32_t *load,uint8_t *hlstatus,uint32_t *labelmask,uint8_t *mfrstatus);
56 
57 
58 void matocsserv_write_counters(void *e,uint8_t x);
59 
60 uint8_t matocsserv_has_avail_space(void *e);
61 double matocsserv_get_usage(void *e);
62 
63 double matocsserv_replication_write_counter(void *e,uint32_t now);
64 double matocsserv_replication_read_counter(void *e,uint32_t now);
65 uint16_t matocsserv_deletion_counter(void *e);
66 
67 int matocsserv_send_replicatechunk(void *e,uint64_t chunkid,uint32_t version,void *src);
68 int matocsserv_send_replicatechunk_raid(void *e,uint64_t chunkid,uint32_t version,uint8_t cnt,const uint32_t xormasks[4],void **src,uint64_t *srcchunkid,uint32_t *srcversion);
69 int matocsserv_send_chunkop(void *e,uint64_t chunkid,uint32_t version,uint32_t newversion,uint64_t copychunkid,uint32_t copyversion,uint32_t leng);
70 int matocsserv_send_deletechunk(void *e,uint64_t chunkid,uint32_t version);
71 int matocsserv_send_createchunk(void *e,uint64_t chunkid,uint32_t version);
72 int matocsserv_send_setchunkversion(void *e,uint64_t chunkid,uint32_t version,uint32_t oldversion);
73 int matocsserv_send_duplicatechunk(void *e,uint64_t chunkid,uint32_t version,uint64_t oldchunkid,uint32_t oldversion);
74 int matocsserv_send_truncatechunk(void *e,uint64_t chunkid,uint32_t length,uint32_t version,uint32_t oldversion);
75 int matocsserv_send_duptruncchunk(void *e,uint64_t chunkid,uint32_t version,uint64_t oldchunkid,uint32_t oldversion,uint32_t length);
76 
77 uint8_t matocsserv_isvalid(void *e);
78 
79 void matocsserv_disconnection_finished(void *e);
80 int matocsserv_no_more_pending_jobs(void);
81 void matocsserv_disconnect_all(void);
82 void matocsserv_close_lsock(void);
83 int matocsserv_init(void);
84 
85 #endif
86