summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorMohammed Junaid <junaid@redhat.com>2012-04-09 12:14:59 +0530
committerVijay Bellur <vijay@gluster.com>2012-04-09 10:37:44 -0700
commit4bb82b2c779bb984a980e371c3119254cf1cb0f8 (patch)
tree46b8b2475c83fdcb9d4917f7cffc8fcfbd1f52c1 /xlators
parent05a9780c9111396f4e2c3ebdae77cf8a257f1a54 (diff)
storage/posix: Avoid excessive logging in posix.v3.3.0qa34
When quota or gsyncd is enabled, the marker translator performs setxattr on files/directories. If the file/directory is deleted before setxattr, posix gets an error when it does setxattr and logs it. But its not an error for marker and it handles the case gracefully. Hence, avoid logging for these keys. Change-Id: Ic614777399497be92ed1c2b4718d46adfb639d96 BUG: 765498 Signed-off-by: Mohammed Junaid <junaid@redhat.com> Reviewed-on: http://review.gluster.com/3105 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/storage/posix/src/posix-helpers.c30
-rw-r--r--xlators/storage/posix/src/posix.c5
-rw-r--r--xlators/storage/posix/src/posix.h2
3 files changed, 32 insertions, 5 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
index 04c166c54f7..f4334302f27 100644
--- a/xlators/storage/posix/src/posix-helpers.c
+++ b/xlators/storage/posix/src/posix-helpers.c
@@ -54,7 +54,7 @@
#include "timer.h"
#include "glusterfs3-xdr.h"
#include "hashfn.h"
-
+#include <fnmatch.h>
typedef struct {
xlator_t *this;
@@ -64,6 +64,10 @@ typedef struct {
loc_t *loc;
} posix_xattr_filler_t;
+char *marker_xattrs[] = {"trusted.glusterfs.quota.*",
+ "trusted.glusterfs.*.xtime",
+ NULL};
+
static char* posix_ignore_xattrs[] = {
"gfid-req",
GLUSTERFS_ENTRYLK_COUNT,
@@ -72,6 +76,25 @@ static char* posix_ignore_xattrs[] = {
NULL
};
+gf_boolean_t
+posix_special_xattr (char **pattern, char *key)
+{
+ int i = 0;
+ gf_boolean_t flag = _gf_false;
+
+ GF_VALIDATE_OR_GOTO ("posix", pattern, out);
+ GF_VALIDATE_OR_GOTO ("posix", key, out);
+
+ for (i = 0; pattern[i]; i++) {
+ if (!fnmatch (pattern[i], key, 0)) {
+ flag = _gf_true;
+ break;
+ }
+ }
+out:
+ return flag;
+}
+
static gf_boolean_t
posix_xattr_ignorable (char *key, posix_xattr_filler_t *filler)
{
@@ -638,7 +661,9 @@ posix_handle_pair (xlator_t *this, const char *real_path,
this->name,GF_LOG_WARNING,
"Extended attributes not "
"supported");
- } else if (errno == ENOENT) {
+ } else if (errno == ENOENT &&
+ !posix_special_xattr (marker_xattrs,
+ trav->key)) {
gf_log (this->name, GF_LOG_ERROR,
"setxattr on %s failed: %s", real_path,
strerror (errno));
@@ -1023,4 +1048,3 @@ posix_fd_ctx_get_off (fd_t *fd, xlator_t *this, struct posix_fd **pfd,
{
return posix_fd_ctx_get (fd, this, pfd);
}
-
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 2452ddc4d88..0987075e1f5 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -60,6 +60,7 @@
#include "glusterfs3-xdr.h"
#include "hashfn.h"
+extern char *marker_xattrs[];
#undef HAVE_SET_FSID
#ifdef HAVE_SET_FSID
@@ -3101,7 +3102,9 @@ do_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd,
this->name,GF_LOG_WARNING,
"Extended attributes not "
"supported by filesystem");
- } else {
+ } else if (op_errno != ENOENT ||
+ !posix_special_xattr (marker_xattrs,
+ trav->key)) {
if (loc)
gf_log (this->name, GF_LOG_ERROR,
"getxattr failed on %s while doing "
diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h
index c551ffc1abd..7c2b47bb02b 100644
--- a/xlators/storage/posix/src/posix.h
+++ b/xlators/storage/posix/src/posix.h
@@ -54,7 +54,6 @@
#include "posix-mem-types.h"
#include "posix-handle.h"
-
/**
* posix_fd - internal structure common to file and directory fd's
*/
@@ -159,4 +158,5 @@ int posix_fd_ctx_get_off (fd_t *fd, xlator_t *this, struct posix_fd **pfd,
off_t off);
void posix_fill_ino_from_gfid (xlator_t *this, struct iatt *buf);
+gf_boolean_t posix_special_xattr (char **pattern, char *key);
#endif /* _POSIX_H */