diff options
Diffstat (limited to 'libglusterfs/src/graph.y')
| -rw-r--r-- | libglusterfs/src/graph.y | 139 |
1 files changed, 70 insertions, 69 deletions
diff --git a/libglusterfs/src/graph.y b/libglusterfs/src/graph.y index a220abeb9ce..e63febdc08b 100644 --- a/libglusterfs/src/graph.y +++ b/libglusterfs/src/graph.y @@ -22,9 +22,11 @@ #define RELAX_POISONING -#include "xlator.h" -#include "graph-utils.h" -#include "logging.h" +#include "glusterfs/xlator.h" +#include "glusterfs/graph-utils.h" +#include "glusterfs/logging.h" +#include "glusterfs/syscall.h" +#include "glusterfs/libglusterfs-messages.h" static int new_volume (char *name); static int volume_type (char *type); @@ -81,7 +83,7 @@ type_error (void) { extern int graphyylineno; - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLFILE_PARSE_ERROR, "Volume %s, before line %d: Please specify volume type", curr->name, graphyylineno); return; @@ -93,7 +95,7 @@ sub_error (void) { extern int graphyylineno; - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLFILE_PARSE_ERROR, "Volume %s, before line %d: Please specify subvolumes", curr->name, graphyylineno); return; @@ -105,7 +107,7 @@ option_error (void) { extern int graphyylineno; - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLFILE_PARSE_ERROR, "Volume %s, before line %d: Please specify " "option <key> <value>", curr->name, graphyylineno); @@ -121,15 +123,14 @@ new_volume (char *name) int ret = 0; if (!name) { - gf_log ("parser", GF_LOG_DEBUG, - "Invalid argument name: '%s'", name); + gf_msg_debug ("parser", 0,"Invalid argument name"); ret = -1; goto out; } if (curr) { - gf_log ("parser", GF_LOG_ERROR, - "new volume (%s) defintion in line %d unexpected", + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, + "new volume (%s) definition in line %d unexpected", name, graphyylineno); ret = -1; goto out; @@ -139,7 +140,6 @@ new_volume (char *name) gf_common_mt_xlator_t); if (!curr) { - gf_log ("parser", GF_LOG_ERROR, "Out of memory"); ret = -1; goto out; } @@ -148,9 +148,9 @@ new_volume (char *name) while (trav) { if (!strcmp (name, trav->name)) { - gf_log ("parser", GF_LOG_ERROR, - "Line %d: volume '%s' defined again", - graphyylineno, name); + gf_msg ("parser", GF_LOG_ERROR, 0, + LG_MSG_VOLFILE_PARSE_ERROR, "Line %d: volume " + "'%s' defined again", graphyylineno, name); ret = -1; goto out; } @@ -164,7 +164,8 @@ new_volume (char *name) goto out; } - curr->options = get_new_dict (); + INIT_LIST_HEAD(&curr->volume_options); + curr->options = dict_new (); if (!curr->options) { GF_FREE (curr->name); @@ -182,8 +183,9 @@ new_volume (char *name) construct->first = curr; construct->xl_count++; + curr->xl_id = construct->xl_count; - gf_log ("parser", GF_LOG_TRACE, "New node for '%s'", name); + gf_msg_trace ("parser", 0, "New node for '%s'", name); out: GF_FREE (name); @@ -199,14 +201,14 @@ volume_type (char *type) int32_t ret = 0; if (!type) { - gf_log ("parser", GF_LOG_DEBUG, "Invalid argument type"); + gf_msg_debug ("parser", 0, "Invalid argument type"); ret = -1; goto out; } ret = xlator_set_type (curr, type); if (ret) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "Volume '%s', line %d: type '%s' is not valid or " "not found on this machine", curr->name, graphyylineno, type); @@ -214,7 +216,7 @@ volume_type (char *type) goto out; } - gf_log ("parser", GF_LOG_TRACE, "Type:%s:%s", curr->name, type); + gf_msg_trace ("parser", 0, "Type:%s:%s", curr->name, type); out: GF_FREE (type); @@ -231,25 +233,25 @@ volume_option (char *key, char *value) char *set_value = NULL; if (!key || !value){ - gf_log ("parser", GF_LOG_ERROR, "Invalid argument"); + gf_msg ("parser", GF_LOG_ERROR, 0, + LG_MSG_INVALID_VOLFILE_ENTRY, "Invalid argument"); ret = -1; goto out; } set_value = gf_strdup (value); - ret = dict_set_dynstr (curr->options, key, set_value); + ret = dict_set_option (curr->options, key, set_value); if (ret == 1) { - gf_log ("parser", GF_LOG_ERROR, - "Volume '%s', line %d: duplicate entry " - "('option %s') present", + gf_msg ("parser", GF_LOG_ERROR, 0, + LG_MSG_INVALID_VOLFILE_ENTRY, "Volume '%s', line %d: " + "duplicate entry ('option %s') present", curr->name, graphyylineno, key); ret = -1; goto out; } - gf_log ("parser", GF_LOG_TRACE, "Option:%s:%s:%s", - curr->name, key, value); + gf_msg_trace ("parser", 0, "Option:%s:%s:%s", curr->name, key, value); out: GF_FREE (key); @@ -267,7 +269,8 @@ volume_sub (char *sub) int ret = 0; if (!sub) { - gf_log ("parser", GF_LOG_ERROR, "Invalid subvolumes argument"); + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, + "Invalid subvolumes argument"); ret = -1; goto out; } @@ -281,16 +284,15 @@ volume_sub (char *sub) } if (!trav) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_SUB_VOLUME_ERROR, "Volume '%s', line %d: subvolume '%s' is not defined " - "prior to usage", - curr->name, graphyylineno, sub); + "prior to usage",curr->name, graphyylineno, sub); ret = -1; goto out; } if (trav == curr) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "Volume '%s', line %d: has '%s' itself as subvolume", curr->name, graphyylineno, sub); ret = -1; @@ -299,12 +301,11 @@ volume_sub (char *sub) ret = glusterfs_xlator_link (curr, trav); if (ret) { - gf_log ("parser", GF_LOG_ERROR, "Out of memory"); ret = -1; goto out; } - gf_log ("parser", GF_LOG_TRACE, "child:%s->%s", curr->name, sub); + gf_msg_trace ("parser", 0, "child:%s->%s", curr->name, sub); out: GF_FREE (sub); @@ -317,11 +318,11 @@ static int volume_end (void) { if (!curr->fops) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR, "\"type\" not specified for volume %s", curr->name); return -1; } - gf_log ("parser", GF_LOG_TRACE, "end:%s", curr->name); + gf_msg_trace ("parser", 0, "end:%s", curr->name); curr = NULL; return 0; @@ -343,38 +344,35 @@ graphyyerror (const char *str) if (curr && curr->name && graphyytext) { if (!strcmp (graphyytext, "volume")) { - gf_log ("parser", GF_LOG_ERROR, - "'end-volume' not defined for volume '%s'", - curr->name); + gf_msg ("parser", GF_LOG_ERROR, 0, + LG_MSG_VOLUME_ERROR, "'end-volume' not" + " defined for volume '%s'", curr->name); } else if (!strcmp (graphyytext, "type")) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR, "line %d: duplicate 'type' defined for " - "volume '%s'", - graphyylineno, curr->name); + "volume '%s'", graphyylineno, curr->name); } else if (!strcmp (graphyytext, "subvolumes")) { - gf_log ("parser", GF_LOG_ERROR, - "line %d: duplicate 'subvolumes' defined for " - "volume '%s'", + gf_msg ("parser", GF_LOG_ERROR, 0, + LG_MSG_SUB_VOLUME_ERROR, "line %d: duplicate " + "'subvolumes' defined for volume '%s'", graphyylineno, curr->name); } else if (curr) { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_SYNTAX_ERROR, "syntax error: line %d (volume '%s'): \"%s\"" "\nallowed tokens are 'volume', 'type', " "'subvolumes', 'option', 'end-volume'()", - graphyylineno, curr->name, - graphyytext); + graphyylineno, curr->name, graphyytext); } else { - gf_log ("parser", GF_LOG_ERROR, + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_SYNTAX_ERROR, "syntax error: line %d (just after volume " "'%s'): \"%s\"\n(%s)", - graphyylineno, curr->name, - graphyytext, + graphyylineno, curr->name, graphyytext, "allowed tokens are 'volume', 'type', " "'subvolumes', 'option', 'end-volume'"); } } else { - gf_log ("parser", GF_LOG_ERROR, - "syntax error in line %d: \"%s\" \n" + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_SYNTAX_ERROR, + "syntax error in line %d: \"%s\"\n" "(allowed tokens are 'volume', 'type', " "'subvolumes', 'option', 'end-volume')\n", graphyylineno, graphyytext); @@ -395,7 +393,8 @@ execute_cmd (char *cmd, char **result, size_t size) fpp = popen (cmd, "r"); if (!fpp) { - gf_log ("parser", GF_LOG_ERROR, "%s: failed to popen", cmd); + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_FILE_OP_FAILED, + "%s: failed to popen", cmd); return -1; } @@ -445,7 +444,6 @@ preprocess (FILE *srcfp, FILE *dstfp) cmd = GF_CALLOC (cmd_buf_size, 1, gf_common_mt_char); if (cmd == NULL) { - gf_log ("parser", GF_LOG_ERROR, "Out of memory"); return -1; } @@ -453,7 +451,6 @@ preprocess (FILE *srcfp, FILE *dstfp) gf_common_mt_char); if (result == NULL) { GF_FREE (cmd); - gf_log ("parser", GF_LOG_ERROR, "Out of memory"); return -1; } @@ -515,9 +512,9 @@ preprocess (FILE *srcfp, FILE *dstfp) } if (in_backtick) { - gf_log ("parser", GF_LOG_ERROR, - "Unterminated backtick in volume specfication file at line (%d), column (%d).", - line, column); + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_VOLUME_ERROR, + "Unterminated backtick in volume specification file at " + "line (%d), column (%d).", line, column); ret = -1; } @@ -546,6 +543,9 @@ glusterfs_graph_new () INIT_LIST_HEAD (&graph->list); + pthread_mutex_init(&graph->mutex, NULL); + pthread_cond_init(&graph->child_down_cond, NULL); + gettimeofday (&graph->dob, NULL); return graph; @@ -559,22 +559,22 @@ glusterfs_graph_construct (FILE *fp) int tmp_fd = -1; glusterfs_graph_t *graph = NULL; FILE *tmp_file = NULL; - char template[PATH_MAX] = {0}; + char template[] = "/tmp/tmp.XXXXXX"; static pthread_mutex_t graph_mutex = PTHREAD_MUTEX_INITIALIZER; graph = glusterfs_graph_new (); if (!graph) goto err; - strcpy (template, "/tmp/tmp.XXXXXX"); + /* coverity[secure_temp] mkstemp uses 0600 as the mode and is safe */ tmp_fd = mkstemp (template); if (-1 == tmp_fd) goto err; - ret = unlink (template); + ret = sys_unlink (template); if (ret < 0) { - gf_log ("parser", GF_LOG_WARNING, "Unable to delete file: %s", - template); + gf_msg ("parser", GF_LOG_WARNING, 0, LG_MSG_FILE_OP_FAILED, + "Unable to delete file: %s", template); } tmp_file = fdopen (tmp_fd, "w+b"); @@ -583,7 +583,8 @@ glusterfs_graph_construct (FILE *fp) ret = preprocess (fp, tmp_file); if (ret < 0) { - gf_log ("parser", GF_LOG_ERROR, "parsing of backticks failed"); + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_BACKTICK_PARSE_FAILED, + "parsing of backticks failed"); goto err; } @@ -597,9 +598,8 @@ glusterfs_graph_construct (FILE *fp) pthread_mutex_unlock (&graph_mutex); if (ret == 1) { - gf_log ("parser", GF_LOG_DEBUG, - "parsing of volfile failed, please review it " - "once more"); + gf_msg_debug ("parser", 0, "parsing of volfile failed, please " + "review it once more"); goto err; } @@ -609,9 +609,10 @@ err: if (tmp_file) { fclose (tmp_file); } else { - gf_log ("parser", GF_LOG_ERROR, "cannot create temporary file"); + gf_msg ("parser", GF_LOG_ERROR, 0, LG_MSG_FILE_OP_FAILED, + "cannot create temporary file"); if (-1 != tmp_fd) - close (tmp_fd); + sys_close (tmp_fd); } glusterfs_graph_destroy (graph); |
