summaryrefslogtreecommitdiffstats
path: root/xlators/storage
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/storage')
-rw-r--r--xlators/storage/posix/src/posix-helpers.c39
-rw-r--r--xlators/storage/posix/src/posix.c76
2 files changed, 71 insertions, 44 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
index 75895136155..6162f2649e1 100644
--- a/xlators/storage/posix/src/posix-helpers.c
+++ b/xlators/storage/posix/src/posix-helpers.c
@@ -31,6 +31,7 @@
#include <alloca.h>
#endif /* GF_BSD_HOST_OS */
+#include <fnmatch.h>
#include "glusterfs.h"
#include "checksum.h"
#include "dict.h"
@@ -49,7 +50,7 @@
#include "glusterfs3-xdr.h"
#include "hashfn.h"
#include "glusterfs-acl.h"
-#include <fnmatch.h>
+#include "events.h"
char *marker_xattrs[] = {"trusted.glusterfs.quota.*",
"trusted.glusterfs.*.xtime",
@@ -1737,6 +1738,8 @@ posix_fs_health_check (xlator_t *this)
time_t time_sec = {0,};
char buff[64] = {0};
char file_path[PATH_MAX] = {0};
+ char *op = NULL;
+ int op_errno = 0;
GF_VALIDATE_OR_GOTO (this->name, this, out);
priv = this->private;
@@ -1752,16 +1755,14 @@ posix_fs_health_check (xlator_t *this)
fd = open (file_path, O_CREAT|O_RDWR, 0644);
if (fd == -1) {
- gf_msg (this->name, GF_LOG_WARNING, errno,
- P_MSG_HEALTHCHECK_FAILED,
- "open() on %s returned", file_path);
+ op_errno = errno;
+ op = "open";
goto out;
}
nofbytes = sys_write (fd, timestamp, timelen);
- if (nofbytes != timelen) {
- gf_msg (this->name, GF_LOG_WARNING, errno,
- P_MSG_HEALTHCHECK_FAILED,
- "write() on %s returned", file_path);
+ if (nofbytes < 0) {
+ op_errno = errno;
+ op = "write";
goto out;
}
/* Seek the offset to the beginning of the file, so that the offset for
@@ -1769,9 +1770,8 @@ posix_fs_health_check (xlator_t *this)
sys_lseek(fd, 0, SEEK_SET);
nofbytes = sys_read (fd, buff, timelen);
if (nofbytes == -1) {
- gf_msg (this->name, GF_LOG_WARNING, errno,
- P_MSG_HEALTHCHECK_FAILED,
- "read() on %s returned", file_path);
+ op_errno = errno;
+ op = "read";
goto out;
}
ret = 0;
@@ -1779,6 +1779,14 @@ out:
if (fd != -1) {
sys_close (fd);
}
+ if (ret && file_path[0]) {
+ gf_msg (this->name, GF_LOG_WARNING, errno,
+ P_MSG_HEALTHCHECK_FAILED,
+ "%s() on %s returned", op, file_path);
+ gf_event (EVENT_POSIX_HEALTH_CHECK_FAILED,
+ "op=%s;path=%s;error=%s;brick=%s:%s", op, file_path,
+ op_errno, priv->hostname, priv->base_path);
+ }
return ret;
}
@@ -1814,14 +1822,8 @@ posix_health_check_thread_proc (void *data)
/* Do the health-check.*/
ret = posix_fs_health_check (this);
-
- if (ret < 0) {
- gf_msg (this->name, GF_LOG_WARNING, errno,
- P_MSG_HEALTHCHECK_FAILED,
- "health_check on %s returned",
- priv->base_path);
+ if (ret < 0)
goto abort;
- }
pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);
}
@@ -1841,6 +1843,7 @@ abort:
/* health-check failed */
gf_msg (this->name, GF_LOG_EMERG, 0, P_MSG_HEALTHCHECK_FAILED,
"health-check failed, going down");
+
xlator_notify (this->parents->xlator, GF_EVENT_CHILD_DOWN, this);
ret = sleep (30);
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 8478e64683e..d7b175c9434 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -56,6 +56,7 @@
#include "posix-aio.h"
#include "glusterfs-acl.h"
#include "posix-messages.h"
+#include "events.h"
extern char *marker_xattrs[];
#define ALIGN_SIZE 4096
@@ -1485,6 +1486,12 @@ posix_mkdir (call_frame_t *frame, xlator_t *this,
"and this can lead to inconsistencies.",
loc->path, uuid_utoa (uuid_req),
gfid_path ? gfid_path : "<NULL>");
+
+ gf_event (EVENT_POSIX_SAME_GFID, "gfid=%s;path=%s;"
+ "newpath=%s;brick=%s:%s",
+ uuid_utoa (uuid_req),
+ gfid_path ? gfid_path : "<NULL>", loc->path,
+ priv->hostname, priv->base_path);
}
} else if (!uuid_req && frame->root->pid != GF_SERVER_PID_TRASH) {
op_ret = -1;
@@ -6844,6 +6851,31 @@ init (xlator_t *this)
goto out;
}
+ _private = GF_CALLOC (1, sizeof (*_private),
+ gf_posix_mt_posix_private);
+ if (!_private) {
+ ret = -1;
+ goto out;
+ }
+
+ _private->base_path = gf_strdup (dir_data->data);
+ _private->base_path_length = strlen (_private->base_path);
+
+ ret = dict_get_str (this->options, "hostname", &_private->hostname);
+ if (ret) {
+ _private->hostname = GF_CALLOC (256, sizeof (char),
+ gf_common_mt_char);
+ if (!_private->hostname) {
+ goto out;
+ }
+ ret = gethostname (_private->hostname, 256);
+ if (ret < 0) {
+ gf_msg (this->name, GF_LOG_WARNING, errno,
+ P_MSG_HOSTNAME_MISSING,
+ "could not find hostname ");
+ }
+ }
+
/* Check for Extended attribute support, if not present, log it */
op_ret = sys_lsetxattr (dir_data->data,
"trusted.glusterfs.test", "working", 8, 0);
@@ -6904,6 +6936,10 @@ init (xlator_t *this)
"mismatching volume-id (%s) received. "
"already is a part of volume %s ",
tmp_data->data, uuid_utoa (old_uuid));
+ gf_event (EVENT_POSIX_ALREADY_PART_OF_VOLUME,
+ "volume-id=%s;brick=%s:%s",
+ uuid_utoa (old_uuid),
+ _private->hostname, _private->base_path);
ret = -1;
goto out;
}
@@ -6913,12 +6949,18 @@ init (xlator_t *this)
P_MSG_VOLUME_ID_ABSENT,
"Extended attribute trusted.glusterfs."
"volume-id is absent");
+ gf_event (EVENT_POSIX_BRICK_NOT_IN_VOLUME,
+ "brick=%s:%s",
+ _private->hostname, _private->base_path);
ret = -1;
goto out;
} else if ((size == -1) && (errno != ENODATA) &&
(errno != ENOATTR)) {
/* Wrong 'volume-id' is set, it should be error */
+ gf_event (EVENT_POSIX_BRICK_VERIFICATION_FAILED,
+ "brick=%s:%s",
+ _private->hostname, _private->base_path);
gf_msg (this->name, GF_LOG_WARNING, errno,
P_MSG_VOLUME_ID_FETCH_FAILED,
"%s: failed to fetch volume-id",
@@ -6927,6 +6969,9 @@ init (xlator_t *this)
goto out;
} else {
ret = -1;
+ gf_event (EVENT_POSIX_BRICK_VERIFICATION_FAILED,
+ "brick=%s:%s",
+ _private->hostname, _private->base_path);
gf_msg (this->name, GF_LOG_ERROR, 0,
P_MSG_VOLUME_ID_FETCH_FAILED,
"failed to fetch proper volume id from export");
@@ -6977,24 +7022,18 @@ init (xlator_t *this)
}
}
+ ret = 0;
+
size = sys_lgetxattr (dir_data->data, POSIX_ACL_ACCESS_XATTR,
NULL, 0);
- if ((size < 0) && (errno == ENOTSUP))
+ if ((size < 0) && (errno == ENOTSUP)) {
gf_msg (this->name, GF_LOG_WARNING, errno,
P_MSG_ACL_NOTSUP,
"Posix access control list is not supported.");
-
- ret = 0;
- _private = GF_CALLOC (1, sizeof (*_private),
- gf_posix_mt_posix_private);
- if (!_private) {
- ret = -1;
- goto out;
+ gf_event (EVENT_POSIX_ACL_NOT_SUPPORTED,
+ "brick=%s:%s", _private->hostname, _private->base_path);
}
- _private->base_path = gf_strdup (dir_data->data);
- _private->base_path_length = strlen (_private->base_path);
-
/*
* _XOPEN_PATH_MAX is the longest file path len we MUST
* support according to POSIX standard. When prepended
@@ -7032,21 +7071,6 @@ init (xlator_t *this)
LOCK_INIT (&_private->lock);
- ret = dict_get_str (this->options, "hostname", &_private->hostname);
- if (ret) {
- _private->hostname = GF_CALLOC (256, sizeof (char),
- gf_common_mt_char);
- if (!_private->hostname) {
- goto out;
- }
- ret = gethostname (_private->hostname, 256);
- if (ret < 0) {
- gf_msg (this->name, GF_LOG_WARNING, errno,
- P_MSG_HOSTNAME_MISSING,
- "could not find hostname ");
- }
- }
-
_private->export_statfs = 1;
tmp_data = dict_get (this->options, "export-statfs-size");
if (tmp_data) {