diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-volgen.h')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.h | 278 |
1 files changed, 155 insertions, 123 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.h b/xlators/mgmt/glusterd/src/glusterd-volgen.h index bee572646..fcbaaf93e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.h +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.h @@ -1,22 +1,12 @@ /* - Copyright (c) 2006-2009 Gluster, Inc. <http://www.gluster.com> - This file is part of GlusterFS. - - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS 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. See the GNU - Affero General Public License for more details. - - 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/>. -*/ + Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ #ifndef _GLUSTERD_VOLGEN_H_ #define _GLUSTERD_VOLGEN_H_ @@ -24,121 +14,163 @@ #define _CONFIG_H #include "config.h" #endif -#include "xlator.h" -#include "protocol-common.h" + #include "glusterd.h" -#include "defaults.h" -#include "list.h" -#include "dict.h" -#include "compat.h" -#include "compat-errno.h" -#include "glusterd-sm.h" -#include "glusterd-op-sm.h" -#include "cli1.h" -#include "glusterd-mem-types.h" - -#define VOLGEN_GET_NFS_DIR(path) \ - do { \ - glusterd_conf_t *priv = THIS->private; \ - snprintf (path, PATH_MAX, "%s/nfs", priv->workdir);\ - } while (0); \ -#define VOLGEN_GET_VOLUME_DIR(path, volinfo) \ - do { \ - glusterd_conf_t *priv = THIS->private; \ - snprintf (path, PATH_MAX, "%s/vols/%s", priv->workdir, \ - volinfo->volname); \ - } while (0); \ +/* volopt map key name definitions */ +#define VKEY_DIAG_CNT_FOP_HITS "diagnostics.count-fop-hits" +#define VKEY_DIAG_LAT_MEASUREMENT "diagnostics.latency-measurement" +#define VKEY_FEATURES_LIMIT_USAGE "features.limit-usage" +#define VKEY_MARKER_XTIME GEOREP".indexing" +#define VKEY_MARKER_XTIME_FORCE GEOREP".ignore-pid-check" +#define VKEY_CHANGELOG "changelog.changelog" +#define VKEY_FEATURES_QUOTA "features.quota" -#define VOLGEN_GET_BRICK_DIR(path, volinfo) \ - do { \ - glusterd_conf_t *priv = THIS->private; \ - snprintf (path, PATH_MAX, "%s/%s/%s/%s", priv->workdir, \ - GLUSTERD_VOLUME_DIR_PREFIX, volinfo->volname, \ - GLUSTERD_BRICK_INFO_DIR); \ - } while (0); \ - - -#define VOLGEN_GENERATE_VOLNAME(str, volname, subvol) \ - do { \ - snprintf (str, 2048, "%s-%s", volname, subvol); \ - } while (0); \ - -#define VOLGEN_POSIX_OPTION_ODIRECT "volgen_posix_option_statfssize" -#define VOLGEN_POSIX_OPTION_STATFSSIZE "volgen_posix_option_statfssize" -#define VOLGEN_POSIX_OPTION_MANDATTR "volgen_posix_option_mandattr" -#define VOLGEN_POSIX_OPTION_SPANDEVICES "volgen_posix_option_spandevices" -#define VOLGEN_POSIX_OPTION_BCKUNLINK "volgen_posix_option_bckunlink" - -#define VOLGEN_LOCKS_OPTION_TRACE "volgen_locks_option_trace" -#define VOLGEN_LOCKS_OPTION_MAND "volgen_locks_option_mand" - -#define VOLGEN_CLIENT_OPTION_TRANSTYPE "volgen_client_option_transtype" -#define VOLGEN_CLIENT_OPTION_NODELAY "volgen_client_option_nodelay" - -#define VOLGEN_IOT_OPTION_THREADCOUNT "volgen_iot_option_threadcount" -#define VOLGEN_IOT_OPTION_AUTOSCALING "volgen_iot_option_autoscaling" -#define VOLGEN_IOT_OPTION_MINTHREADS "volgen_iot_option_minthreads" -#define VOLGEN_IOT_OPTION_MAXTHREADS "volgen_iot_option_maxthreads" - -#define VOLGEN_SERVER_OPTION_TRANSTYPE "volgen_server_option_transtype" -#define VOLGEN_SERVER_OPTION_NODELAY "volgen_server_option_nodelay" - -#define VOLGEN_REPLICATE_OPTION_READSUBVOL "volgen_replicate_option_readsubvol" -#define VOLGEN_REPLICATE_OPTION_FAVCHILD "volgen_replicate_option_favchild" -#define VOLGEN_REPLICATE_OPTION_BCKSHCOUNT "volgen_replicate_option_bckshcount" -#define VOLGEN_REPLICATE_OPTION_DATASH "volgen_replicate_option_datash" -#define VOLGEN_REPLICATE_OPTION_DATASHALGO "volgen_replicate_option_datashalgo" -#define VOLGEN_REPLICATE_OPTION_SHWINDOWSIZE "volgen_replicate_option_shwindowsize" -#define VOLGEN_REPLICATE_OPTION_METASH "volgen_replicate_option_metash" -#define VOLGEN_REPLICATE_OPTION_ENTRYSH "volgen_replicate_option_entrysh" -#define VOLGEN_REPLICATE_OPTION_DATACHANGELOG "volgen_replicate_option_datachangelog" -#define VOLGEN_REPLICATE_OPTION_METADATACHANGELOG "volgen_replicate_option_metadatachangelog" -#define VOLGEN_REPLICATE_OPTION_ENTRYCHANGELOG "volgen_replicate_option_entrychangelog" -#define VOLGEN_REPLICATE_OPTION_STRICTREADDIR "volgen_replicate_option_strictreaddir" - -#define VOLGEN_STRIPE_OPTION_BLOCKSIZE "volgen_stripe_option_blocksize" -#define VOLGEN_STRIPE_OPTION_USEXATTR "volgen_stripe_option_usexattr" - -#define VOLGEN_DHT_OPTION_LOOKUPUNHASH "volgen_dht_option_lookupunhash" -#define VOLGEN_DHT_OPTION_MINFREEDISK "volgen_dht_option_minfreedisk" -#define VOLGEN_DHT_OPTION_UNHASHSTICKY "volgen_dht_option_unhashsticky" - -#define VOLGEN_WB_OPTION_FLUSHBEHIND "volgen_wb_option_flushbehind" -#define VOLGEN_WB_OPTION_CACHESIZE "volgen_wb_option_cachesize" -#define VOLGEN_WB_OPTION_DISABLENBYTES "volgen_wb_option_disablenbytes" -#define VOLGEN_WB_OPTION_OSYNC "volgen_wb_option_osync" -#define VOLGEN_WB_OPTION_TRICKLINGWRITES "volgen_wb_option_tricklingwrites" - -#define VOLGEN_RA_OPTION_ATIME "volgen_ra_option_atime" -#define VOLGEN_RA_OPTION_PAGECOUNT "volgen_ra_option_pagecount" - -#define VOLGEN_IOCACHE_OPTION_PRIORITY "volgen_iocache_option_priority" -#define VOLGEN_IOCACHE_OPTION_TIMEOUT "volgen_iocache_option_timeout" -#define VOLGEN_IOCACHE_OPTION_CACHESIZE "volgen_iocache_option_cachesize" -#define VOLGEN_IOCACHE_OPTION_MINFILESIZE "volgen_iocache_option_minfilesize" -#define VOLGEN_IOCACHE_OPTION_MAXFILESIZE "volgen_iocache_option_maxfilesize" - -#define VOLGEN_QR_OPTION_PRIORITY "volgen_qr_option_priority" -#define VOLGEN_QR_OPTION_TIMEOUT "volgen_qr_option_timeout" -#define VOLGEN_QR_OPTION_CACHESIZE "volgen_qr_option_cachesize" -#define VOLGEN_QR_OPTION_MAXFILESIZE "volgen_qr_option_maxfilesize" +#define AUTH_ALLOW_MAP_KEY "auth.allow" +#define AUTH_REJECT_MAP_KEY "auth.reject" +#define NFS_DISABLE_MAP_KEY "nfs.disable" +#define AUTH_ALLOW_OPT_KEY "auth.addr.*.allow" +#define AUTH_REJECT_OPT_KEY "auth.addr.*.reject" +#define NFS_DISABLE_OPT_KEY "nfs.*.disable" -int -glusterd_create_volfiles (glusterd_volinfo_t *volinfo); +typedef enum { + GF_CLIENT_TRUSTED, + GF_CLIENT_OTHER +} glusterd_client_type_t; +#define COMPLETE_OPTION(key, completion, ret) \ + do { \ + if (!strchr (key, '.')) { \ + ret = option_complete (key, &completion); \ + if (ret) { \ + gf_log ("", GF_LOG_ERROR, "Out of memory"); \ + return _gf_false; \ + } \ + \ + if (!completion) { \ + gf_log ("", GF_LOG_ERROR, "option %s does not" \ + "exist", key); \ + return _gf_false; \ + } \ + } \ + \ + if (completion) \ + GF_FREE (completion); \ + } while (0); + +typedef enum gd_volopt_flags_ { + OPT_FLAG_NONE, + OPT_FLAG_FORCE = 0x01, // option needs force to be reset + OPT_FLAG_XLATOR_OPT = 0x02, // option enables/disables xlators + OPT_FLAG_CLIENT_OPT = 0x04, // option affects clients +} gd_volopt_flags_t; + +typedef enum { + GF_XLATOR_POSIX = 0, + GF_XLATOR_ACL, + GF_XLATOR_LOCKS, + GF_XLATOR_IOT, + GF_XLATOR_INDEX, + GF_XLATOR_MARKER, + GF_XLATOR_IO_STATS, + GF_XLATOR_BD, + GF_XLATOR_NONE, +} glusterd_server_xlator_t; + +/* As of now debug xlators can be loaded only below fuse in the client + * graph via cli. More xlators can be added below when the cli option + * for adding debug xlators anywhere in the client graph has to be made + * available. + */ +typedef enum { + GF_CLNT_XLATOR_FUSE = 0, + GF_CLNT_XLATOR_NONE, +} glusterd_client_xlator_t; + +typedef enum { DOC, NO_DOC, GLOBAL_DOC, GLOBAL_NO_DOC } option_type_t; + +typedef int (*vme_option_validation) (dict_t *dict, char *key, char *value, + char **op_errstr); + +struct volopt_map_entry { + char *key; + char *voltype; + char *option; + char *value; + option_type_t type; + uint32_t flags; + uint32_t op_version; + char *description; + vme_option_validation validate_fn; + /* If client_option is true, the option affects clients. + * this is used to calculate client-op-version of volumes + */ + //gf_boolean_t client_option; +}; + +int glusterd_create_rb_volfiles (glusterd_volinfo_t *volinfo, + glusterd_brickinfo_t *brickinfo); + +int glusterd_create_volfiles_and_notify_services (glusterd_volinfo_t *volinfo); + +void glusterd_get_nfs_filepath (char *filename); + +void glusterd_get_shd_filepath (char *filename); + +int glusterd_create_nfs_volfile (); +int glusterd_create_shd_volfile (); + +int glusterd_delete_volfile (glusterd_volinfo_t *volinfo, + glusterd_brickinfo_t *brickinfo); +int +glusterd_delete_snap_volfile (glusterd_volinfo_t *volinfo, + glusterd_volinfo_t *snap_volinfo, + glusterd_brickinfo_t *brickinfo); + +int glusterd_volinfo_get (glusterd_volinfo_t *volinfo, char *key, char **value); +int glusterd_volinfo_get_boolean (glusterd_volinfo_t *volinfo, char *key); + +int glusterd_validate_globalopts (glusterd_volinfo_t *volinfo, dict_t *val_dict, char **op_errstr); + +int glusterd_validate_localopts (dict_t *val_dict, char **op_errstr); +gf_boolean_t glusterd_check_globaloption (char *key); +gf_boolean_t +glusterd_check_voloption_flags (char *key, int32_t flags); +gf_boolean_t +glusterd_is_valid_volfpath (char *volname, char *brick); +int generate_brick_volfiles (glusterd_volinfo_t *volinfo); +int generate_snap_brick_volfiles (glusterd_volinfo_t *volinfo, + glusterd_volinfo_t *snap_volinfo); +int generate_client_volfiles (glusterd_volinfo_t *volinfo, + glusterd_client_type_t client_type); +int +generate_snap_client_volfiles (glusterd_volinfo_t *actual_volinfo, + glusterd_volinfo_t *snap_volinfo, + glusterd_client_type_t client_type, + gf_boolean_t vol_restore); +int glusterd_get_volopt_content (dict_t *dict, gf_boolean_t xml_out); +char* +glusterd_get_trans_type_rb (gf_transport_type ttype); +int +glusterd_check_nfs_volfile_identical (gf_boolean_t *identical); int -glusterd_delete_volfile (glusterd_volinfo_t *volinfo, - glusterd_brickinfo_t *brickinfo); +glusterd_check_nfs_topology_identical (gf_boolean_t *identical); -int32_t -glusterd_default_xlator_options (glusterd_volinfo_t *volinfo); +uint32_t +glusterd_get_op_version_for_key (char *key); -char * -glusterd_get_nfs_filepath (); +gf_boolean_t +gd_is_client_option (char *key); -int -volgen_generate_nfs_volfile (glusterd_volinfo_t *volinfo); +gf_boolean_t +gd_is_xlator_option (char *key); + +gf_boolean_t +gd_is_boolean_option (char *key); + +int gd_restore_snap_volume (dict_t *rsp_dict, + glusterd_volinfo_t *orig_vol, + glusterd_volinfo_t *snap_vol); #endif |
