gfs2-utils: RHEL7 - fsck.gfs2: File read-ahead
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=59535d92...
Commit: 59535d92b7c979bd25716d81564b1de133634134
Parent: 0d5ce5d1c6356eae7451227d3cd7431ee568b97b
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Wed Dec 4 12:15:49 2013 -0600
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Fri Jul 11 14:39:52 2014 -0500
fsck.gfs2: File read-ahead
This patch introduces file read-ahead
rhbz#1038312
---
gfs2/fsck/metawalk.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++-
gfs2/fsck/metawalk.h | 1 +
gfs2/fsck/pass1.c | 1 +
3 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index 59fbde8..6c0e02b 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -1183,6 +1183,59 @@ static void free_metalist(struct gfs2_inode *ip, osi_list_t *mlp)
}
}
+static void file_ra(struct gfs2_inode *ip, struct gfs2_buffer_head *bh,
+ int head_size, int maxptrs, int h)
+{
+ struct gfs2_sbd *sdp = ip->i_sbd;
+ uint64_t *p, sblock = 0, block;
+ int extlen = 0;
+
+ if (h + 2 == ip->i_di.di_height) {
+ p = (uint64_t *)(bh->b_data + head_size);
+ if (*p && *(p + 1)) {
+ sblock = be64_to_cpu(*p);
+ p++;
+ block = be64_to_cpu(*p);
+ extlen = block - sblock;
+ if (extlen > 1 && extlen <= maxptrs) {
+ posix_fadvise(sdp->device_fd,
+ sblock * sdp->bsize,
+ (extlen + 1) * sdp->bsize,
+ POSIX_FADV_WILLNEED);
+ return;
+ }
+ }
+ extlen = 0;
+ }
+ for (p = (uint64_t *)(bh->b_data + head_size);
+ p < (uint64_t *)(bh->b_data + sdp->bsize); p++) {
+ if (*p) {
+ if (!sblock) {
+ sblock = be64_to_cpu(*p);
+ extlen = 1;
+ continue;
+ }
+ block = be64_to_cpu(*p);
+ if (block == sblock + extlen) {
+ extlen++;
+ continue;
+ }
+ }
+ if (extlen && sblock) {
+ if (extlen > 1)
+ extlen--;
+ posix_fadvise(sdp->device_fd, sblock * sdp->bsize,
+ extlen * sdp->bsize,
+ POSIX_FADV_WILLNEED);
+ extlen = 0;
+ p--;
+ }
+ }
+ if (extlen)
+ posix_fadvise(sdp->device_fd, sblock * sdp->bsize,
+ extlen * sdp->bsize, POSIX_FADV_WILLNEED);
+}
+
/**
* build_and_check_metalist - check a bunch of indirect blocks
* This includes hash table blocks for directories
@@ -1203,6 +1256,7 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
int h, head_size, iblk_type;
uint64_t *ptr, block;
int error, was_duplicate, is_valid;
+ int maxptrs;
osi_list_add(&metabh->b_altlist, &mlp[0]);
@@ -1224,13 +1278,18 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
iblk_type = GFS2_METATYPE_JD;
else
iblk_type = GFS2_METATYPE_IN;
- if (ip->i_sbd->gfs1)
+ if (ip->i_sbd->gfs1) {
head_size = sizeof(struct gfs_indirect);
- else
+ maxptrs = (ip->i_sbd->bsize - head_size) /
+ sizeof(uint64_t);
+ } else {
head_size = sizeof(struct gfs2_meta_header);
+ maxptrs = ip->i_sbd->sd_inptrs;
+ }
} else {
iblk_type = GFS2_METATYPE_DI;
head_size = sizeof(struct gfs2_dinode);
+ maxptrs = ip->i_sbd->sd_diptrs;
}
prev_list = &mlp[h - 1];
cur_list = &mlp[h];
@@ -1245,6 +1304,8 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
continue;
}
+ if (pass->readahead)
+ file_ra(ip, bh, head_size, maxptrs, h);
/* Now check the metadata itself */
for (ptr = (uint64_t *)(bh->b_data + head_size);
(char *)ptr < (bh->b_data + ip->i_sbd->bsize);
diff --git a/gfs2/fsck/metawalk.h b/gfs2/fsck/metawalk.h
index 5e30bfe..a4e0676 100644
--- a/gfs2/fsck/metawalk.h
+++ b/gfs2/fsck/metawalk.h
@@ -94,6 +94,7 @@ enum meta_check_rc {
struct metawalk_fxns {
void *private;
int invalid_meta_is_fatal;
+ int readahead;
int (*check_leaf_depth) (struct gfs2_inode *ip, uint64_t leaf_no,
int ref_count, struct gfs2_buffer_head *lbh);
int (*check_leaf) (struct gfs2_inode *ip, uint64_t block,
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index db23631..ea660cf 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1054,6 +1054,7 @@ static int rangecheck_eattr_leaf(struct gfs2_inode *ip, uint64_t block,
struct metawalk_fxns rangecheck_fxns = {
.private = NULL,
+ .readahead = 1,
.check_metalist = rangecheck_metadata,
.check_data = rangecheck_data,
.check_leaf = rangecheck_leaf,
9 years, 9 months
gfs2-utils: RHEL7 - fsck.gfs2: Issue read-ahead for dinodes in each bitmap
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=0d5ce5d1...
Commit: 0d5ce5d1c6356eae7451227d3cd7431ee568b97b
Parent: c2d36da56dd1ff6ece11121233eb20f757fa5976
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Mon Jan 6 08:28:24 2014 -0600
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Fri Jul 11 14:39:46 2014 -0500
fsck.gfs2: Issue read-ahead for dinodes in each bitmap
This patch speeds up fsck.gfs2 by issuing read-ahead for each of the
dinodes found in each of the bitmaps, prior to processing the bitmap.
rhbz#1038312
---
gfs2/fsck/pass1.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index df778ef..db23631 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1440,6 +1440,10 @@ static int pass1_process_bitmap(struct gfs2_sbd *sdp, struct rgrp_tree *rgd, uin
struct gfs2_inode *ip;
uint8_t q;
+ /* Issue read-ahead for all dinodes in this bitmap */
+ for (i = 0; i < n; i++)
+ posix_fadvise(sdp->device_fd, ibuf[i] * sdp->bsize, sdp->bsize,
+ POSIX_FADV_WILLNEED);
for (i = 0; i < n; i++) {
int is_inode;
uint32_t check_magic;
9 years, 9 months
gfs2-utils: RHEL7 - fsck.gfs2: time each of the passes
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=c2d36da5...
Commit: c2d36da56dd1ff6ece11121233eb20f757fa5976
Parent: f2d6124acc5b185d2674171df3deb6077a35111b
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Wed Jul 9 08:43:39 2014 -0500
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Fri Jul 11 14:39:33 2014 -0500
fsck.gfs2: time each of the passes
This patch reports how much time was taken in each pass.
rhbz#1038312
---
gfs2/fsck/main.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index b4b1a03..ad42b0d 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,8 @@
#include <signal.h>
#include <libintl.h>
#include <locale.h>
+#include <sys/time.h>
+#include <time.h>
#define _(String) gettext(String)
#include "copyright.cf"
@@ -244,11 +246,15 @@ static const struct fsck_pass passes[] = {
static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
{
int ret;
+ struct timeval before, after, diff;
+ time_t runtime;
+ struct tm *run_tm;
if (fsck_abort)
return FSCK_CANCELED;
pass = p->name;
log_notice( _("Starting %s\n"), p->name);
+ gettimeofday(&before, 0);
ret = p->f(sdp);
if (ret)
exit(ret);
@@ -257,7 +263,16 @@ static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
log_notice( _("%s interrupted \n"), p->name);
return FSCK_CANCELED;
}
- log_notice( _("%s complete \n"), p->name);
+ gettimeofday(&after, 0);
+ timersub(&after, &before, &diff);
+ runtime = (time_t)diff.tv_sec;
+ run_tm = gmtime(&runtime);
+ log_notice( _("%s completed in "), p->name);
+ if (run_tm->tm_hour)
+ log_notice("%dh", run_tm->tm_hour);
+ if (run_tm->tm_min)
+ log_notice("%dm", run_tm->tm_min);
+ log_notice("%d.%03lds \n", run_tm->tm_sec, diff.tv_usec / 1000);
return 0;
}
9 years, 9 months
gfs2-utils: master - fsck.gfs2: File read-ahead
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=1969548a...
Commit: 1969548ae01ee6d848e45e684a5ad90f85e94e99
Parent: fc4eb12affd5282b77ada7739229bb3e54871f3d
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Wed Dec 4 12:15:49 2013 -0600
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Tue Jul 22 14:44:01 2014 -0500
fsck.gfs2: File read-ahead
This patch introduces file read-ahead
---
gfs2/fsck/metawalk.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++-
gfs2/fsck/metawalk.h | 1 +
gfs2/fsck/pass1.c | 1 +
3 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index 659af4e..8da17c6 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -1184,6 +1184,59 @@ static void free_metalist(struct gfs2_inode *ip, osi_list_t *mlp)
}
}
+static void file_ra(struct gfs2_inode *ip, struct gfs2_buffer_head *bh,
+ int head_size, int maxptrs, int h)
+{
+ struct gfs2_sbd *sdp = ip->i_sbd;
+ uint64_t *p, sblock = 0, block;
+ int extlen = 0;
+
+ if (h + 2 == ip->i_di.di_height) {
+ p = (uint64_t *)(bh->b_data + head_size);
+ if (*p && *(p + 1)) {
+ sblock = be64_to_cpu(*p);
+ p++;
+ block = be64_to_cpu(*p);
+ extlen = block - sblock;
+ if (extlen > 1 && extlen <= maxptrs) {
+ posix_fadvise(sdp->device_fd,
+ sblock * sdp->bsize,
+ (extlen + 1) * sdp->bsize,
+ POSIX_FADV_WILLNEED);
+ return;
+ }
+ }
+ extlen = 0;
+ }
+ for (p = (uint64_t *)(bh->b_data + head_size);
+ p < (uint64_t *)(bh->b_data + sdp->bsize); p++) {
+ if (*p) {
+ if (!sblock) {
+ sblock = be64_to_cpu(*p);
+ extlen = 1;
+ continue;
+ }
+ block = be64_to_cpu(*p);
+ if (block == sblock + extlen) {
+ extlen++;
+ continue;
+ }
+ }
+ if (extlen && sblock) {
+ if (extlen > 1)
+ extlen--;
+ posix_fadvise(sdp->device_fd, sblock * sdp->bsize,
+ extlen * sdp->bsize,
+ POSIX_FADV_WILLNEED);
+ extlen = 0;
+ p--;
+ }
+ }
+ if (extlen)
+ posix_fadvise(sdp->device_fd, sblock * sdp->bsize,
+ extlen * sdp->bsize, POSIX_FADV_WILLNEED);
+}
+
/**
* build_and_check_metalist - check a bunch of indirect blocks
* This includes hash table blocks for directories
@@ -1204,6 +1257,7 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
int h, head_size, iblk_type;
uint64_t *ptr, block;
int error, was_duplicate, is_valid;
+ int maxptrs;
osi_list_add(&metabh->b_altlist, &mlp[0]);
@@ -1225,13 +1279,18 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
iblk_type = GFS2_METATYPE_JD;
else
iblk_type = GFS2_METATYPE_IN;
- if (ip->i_sbd->gfs1)
+ if (ip->i_sbd->gfs1) {
head_size = sizeof(struct gfs_indirect);
- else
+ maxptrs = (ip->i_sbd->bsize - head_size) /
+ sizeof(uint64_t);
+ } else {
head_size = sizeof(struct gfs2_meta_header);
+ maxptrs = ip->i_sbd->sd_inptrs;
+ }
} else {
iblk_type = GFS2_METATYPE_DI;
head_size = sizeof(struct gfs2_dinode);
+ maxptrs = ip->i_sbd->sd_diptrs;
}
prev_list = &mlp[h - 1];
cur_list = &mlp[h];
@@ -1246,6 +1305,8 @@ static int build_and_check_metalist(struct gfs2_inode *ip, osi_list_t *mlp,
continue;
}
+ if (pass->readahead)
+ file_ra(ip, bh, head_size, maxptrs, h);
/* Now check the metadata itself */
for (ptr = (uint64_t *)(bh->b_data + head_size);
(char *)ptr < (bh->b_data + ip->i_sbd->bsize);
diff --git a/gfs2/fsck/metawalk.h b/gfs2/fsck/metawalk.h
index 5e30bfe..a4e0676 100644
--- a/gfs2/fsck/metawalk.h
+++ b/gfs2/fsck/metawalk.h
@@ -94,6 +94,7 @@ enum meta_check_rc {
struct metawalk_fxns {
void *private;
int invalid_meta_is_fatal;
+ int readahead;
int (*check_leaf_depth) (struct gfs2_inode *ip, uint64_t leaf_no,
int ref_count, struct gfs2_buffer_head *lbh);
int (*check_leaf) (struct gfs2_inode *ip, uint64_t block,
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index c757922..90ca357 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1055,6 +1055,7 @@ static int rangecheck_eattr_leaf(struct gfs2_inode *ip, uint64_t block,
struct metawalk_fxns rangecheck_fxns = {
.private = NULL,
+ .readahead = 1,
.check_metalist = rangecheck_metadata,
.check_data = rangecheck_data,
.check_leaf = rangecheck_leaf,
9 years, 9 months
gfs2-utils: master - fsck.gfs2: Issue read-ahead for dinodes in each bitmap
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=fc4eb12a...
Commit: fc4eb12affd5282b77ada7739229bb3e54871f3d
Parent: 2c166cbe0233a56a4684717266553ee4396e5dc3
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Mon Jan 6 08:28:24 2014 -0600
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Tue Jul 22 14:43:45 2014 -0500
fsck.gfs2: Issue read-ahead for dinodes in each bitmap
This patch speeds up fsck.gfs2 by issuing read-ahead for each of the
dinodes found in each of the bitmaps, prior to processing the bitmap.
---
gfs2/fsck/pass1.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index 4f1b77a..c757922 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -1441,6 +1441,10 @@ static int pass1_process_bitmap(struct gfs2_sbd *sdp, struct rgrp_tree *rgd, uin
struct gfs2_inode *ip;
uint8_t q;
+ /* Issue read-ahead for all dinodes in this bitmap */
+ for (i = 0; i < n; i++)
+ posix_fadvise(sdp->device_fd, ibuf[i] * sdp->bsize, sdp->bsize,
+ POSIX_FADV_WILLNEED);
for (i = 0; i < n; i++) {
int is_inode;
uint32_t check_magic;
9 years, 9 months
gfs2-utils: master - fsck.gfs2: time each of the passes
by Bob Peterson
Gitweb: http://git.fedorahosted.org/git/?p=gfs2-utils.git;a=commitdiff;h=2c166cbe...
Commit: 2c166cbe0233a56a4684717266553ee4396e5dc3
Parent: 1553db15e45dcf3d06a881fe369f32cef80a4356
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Wed Jul 9 08:43:39 2014 -0500
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Fri Jul 11 14:48:14 2014 -0500
fsck.gfs2: time each of the passes
This patch reports how much time was taken in each pass.
---
gfs2/fsck/main.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index 81b7dd5..b25d802 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,8 @@
#include <signal.h>
#include <libintl.h>
#include <locale.h>
+#include <sys/time.h>
+#include <time.h>
#define _(String) gettext(String)
#include <syslog.h>
@@ -247,11 +249,15 @@ static const struct fsck_pass passes[] = {
static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
{
int ret;
+ struct timeval before, after, diff;
+ time_t runtime;
+ struct tm *run_tm;
if (fsck_abort)
return FSCK_CANCELED;
pass = p->name;
log_notice( _("Starting %s\n"), p->name);
+ gettimeofday(&before, 0);
ret = p->f(sdp);
if (ret)
exit(ret);
@@ -260,7 +266,16 @@ static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
log_notice( _("%s interrupted \n"), p->name);
return FSCK_CANCELED;
}
- log_notice( _("%s complete \n"), p->name);
+ gettimeofday(&after, 0);
+ timersub(&after, &before, &diff);
+ runtime = (time_t)diff.tv_sec;
+ run_tm = gmtime(&runtime);
+ log_notice( _("%s completed in "), p->name);
+ if (run_tm->tm_hour)
+ log_notice("%dh", run_tm->tm_hour);
+ if (run_tm->tm_min)
+ log_notice("%dm", run_tm->tm_min);
+ log_notice("%d.%03lds \n", run_tm->tm_sec, diff.tv_usec / 1000);
return 0;
}
9 years, 9 months
fence-agents: master - fencing: 'nodename' should not be logged as ignored argument
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=597e16...
Commit: 597e1607dbc9594954aa015ff05a279c22d35673
Parent: 40e606b7196d9f870ec5a3241a735b31d90d58a2
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Mon Jul 14 11:33:25 2014 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Mon Jul 14 11:33:25 2014 +0200
fencing: 'nodename' should not be logged as ignored argument
nodename is send by default, so there is not reason to log it.
---
fence/agents/lib/fencing.py.py | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 44d7565..d1d5aae 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -614,7 +614,9 @@ def process_input(avail_opt):
(name, value) = (line + "=").split("=", 1)
value = value[:-1]
- if avail_opt.count(name) == 0:
+ if avail_opt.count(name) == 0 and name in ["nodename"]:
+ continue
+ elif avail_opt.count(name) == 0:
logging.warning("Parse error: Ignoring unknown option '%s'\n", line)
continue
9 years, 9 months
fence-agents: master - fencing: Replace syslog.syslog() calls with new logging handler
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=40e606...
Commit: 40e606b7196d9f870ec5a3241a735b31d90d58a2
Parent: 02bdd80e1077441aa2d50ef823068120a0a92725
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Thu Jul 10 13:55:51 2014 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Jul 10 13:55:51 2014 +0200
fencing: Replace syslog.syslog() calls with new logging handler
Original logging handler for syslog writes everything to a device but that
way we will have incorrect source. New logging handler is created on top
of standard old-style syslog library.
---
fence/agents/lib/fencing.py.py | 36 ++++++++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 4520ea8..44d7565 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -414,7 +414,6 @@ def atexit_handler():
os.close(1)
except IOError:
logging.error("%s failed to close standard output\n", sys.argv[0])
- syslog.syslog(syslog.LOG_ERR, "Failed to close standard output")
sys.exit(EC_GENERIC_ERROR)
def add_dependency_options(options):
@@ -445,7 +444,6 @@ def fail(error_code):
EC_INVALID_PRIVILEGES : "Failed: The user does not have the correct privileges to do the requested action."
}[error_code] + "\n"
logging.error("%s\n", message)
- syslog.syslog(syslog.LOG_ERR, message)
sys.exit(EC_GENERIC_ERROR)
def usage(avail_opt):
@@ -618,7 +616,6 @@ def process_input(avail_opt):
if avail_opt.count(name) == 0:
logging.warning("Parse error: Ignoring unknown option '%s'\n", line)
- syslog.syslog(syslog.LOG_WARNING, "Parse error: Ignoring unknown option '" + line)
continue
if all_opt[name]["getopt"].endswith(":"):
@@ -700,6 +697,12 @@ def check_input(device_opt, opt):
if options.has_key("--verbose"):
logging.getLogger().setLevel(logging.DEBUG)
+ ## add logging to syslog
+ logging.getLogger().addHandler(SyslogLibHandler())
+ ## add loggint to stderr
+ logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stderr))
+
+
acceptable_actions = ["on", "off", "status", "list", "monitor"]
if 1 == device_opt.count("fabric_fencing"):
## Compatibility layer
@@ -920,13 +923,11 @@ def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list=None,
except Exception, ex:
# an error occured during power ON phase in reboot
# fence action was completed succesfully even in that case
- logging.error("%s", str(ex))
- syslog.syslog(syslog.LOG_NOTICE, str(ex))
+ logging.warning("%s", str(ex))
if power_on == False:
# this should not fail as node was fenced succesfully
logging.error('Timed out waiting to power ON\n')
- syslog.syslog(syslog.LOG_NOTICE, "Timed out waiting to power ON")
print "Success: Rebooted"
elif options["--action"] == "status":
@@ -941,7 +942,6 @@ def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list=None,
fail(EC_TIMED_OUT)
except pycurl.error, ex:
logging.error("%s\n", str(ex))
- syslog.syslog(syslog.LOG_ERR, ex[1])
fail(EC_TIMED_OUT)
return result
@@ -979,7 +979,6 @@ def fence_login(options, re_login_string=r"(login\s*: )|(Login Name: )|(usernam
conn = fspawn(options, command)
except pexpect.ExceptionPexpect, ex:
logging.error("%s\n", str(ex))
- syslog.syslog(syslog.LOG_ERR, str(ex))
sys.exit(EC_GENERIC_ERROR)
elif options.has_key("--ssh") and not options.has_key("--identity-file"):
command = '%s %s %s@%s -p %s -o PubkeyAuthentication=no' % \
@@ -1135,3 +1134,24 @@ def fence_logout(conn, logout_string, sleep=0):
# in format a.b.c.d...z and returned dict has key only z
def array_to_dict(ar):
return dict([[x[0].split(".")[-1], x[1]] for x in ar])
+
+
+## Own logger handler that uses old-style syslog handler as otherwise everything is sourced
+## from /dev/syslog
+class SyslogLibHandler(logging.StreamHandler):
+ """
+ A handler class that correctly push messages into syslog
+ """
+ def emit(self, record):
+ syslog_level = {
+ logging.CRITICAL:syslog.LOG_CRIT,
+ logging.ERROR:syslog.LOG_ERR,
+ logging.WARNING:syslog.LOG_WARNING,
+ logging.INFO:syslog.LOG_INFO,
+ logging.DEBUG:syslog.LOG_DEBUG,
+ logging.NOTSET:syslog.LOG_DEBUG,
+ }[record.levelno]
+
+ msg = self.format(record)
+ syslog.syslog(syslog_level, msg)
+ return
9 years, 9 months
fence-agents: RHEL6 - fencing: Fix metadata when "io_fencing" is used
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=e8ad21...
Commit: e8ad210ae1e2b1827ea1176f79baa98cf59f23f6
Parent: 1aa45f87922cf09ea1d5a378283bce1f4eb43bb6
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Thu Jul 10 10:38:37 2014 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Thu Jul 10 10:38:37 2014 +0200
fencing: Fix metadata when "io_fencing" is used
Previously, io_fencing did not introduce "action" as a parameter into metadata
---
fence/agents/lib/fencing.py.py | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index eeb0a3f..9d142e8 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -489,7 +489,8 @@ def metadata(avail_opt, options, docs):
print "<parameters>"
for option, value in sorted_list:
if all_opt[option].has_key("shortdesc"):
- print "\t<parameter name=\"" + option + "\" unique=\"0\" required=\"" + all_opt[option]["required"] + "\">"
+ option_name = "action" if option == "io_fencing" else option
+ print "\t<parameter name=\"" + option_name + "\" unique=\"0\" required=\"" + all_opt[option]["required"] + "\">"
default = ""
if all_opt[option].has_key("default"):
9 years, 9 months
fence-agents: RHEL6 - fence_brocade: Fix issue with 'list' introduced by 'monitor'
by Marek Grác
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=1aa45f...
Commit: 1aa45f87922cf09ea1d5a378283bce1f4eb43bb6
Parent: 10e1a224de1cf3af9d1a870faf3aa8a2533f86ca
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Wed Jul 2 20:59:52 2014 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Wed Jul 2 20:59:52 2014 +0200
fence_brocade: Fix issue with 'list' introduced by 'monitor'
---
fence/agents/brocade/fence_brocade.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fence/agents/brocade/fence_brocade.py b/fence/agents/brocade/fence_brocade.py
index be19f6b..685db3d 100644
--- a/fence/agents/brocade/fence_brocade.py
+++ b/fence/agents/brocade/fence_brocade.py
@@ -36,7 +36,7 @@ def get_power_status(conn, options):
status = "off" if len(tokens) > 7 and tokens[7] == "Disabled" else "on"
outlets[tokens[0]] = ("", status)
- if options["-o"] != "monitor":
+ if ["list", "monitor"].count(options["-o"]) == 0:
(_, status) = outlets[options["-n"]]
return status
else:
9 years, 10 months