Skip to content

Commit c1cbd82

Browse files
Jenkinsopenstack-gerrit
Jenkins
authored andcommitted
Merge "make drive audit regexes detect 4-letter drives"
2 parents 9449427 + b3c2800 commit c1cbd82

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

bin/swift-drive-audit

+18-13
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ from ConfigParser import ConfigParser
2323

2424
from swift.common.utils import get_logger
2525

26+
2627
# To search for more types of errors, add the regex to the list below
2728
error_re = [
28-
'error.*(sd[a-z])',
29-
'(sd[a-z]).*error',
29+
re.compile(r'\berror\b.*\b(sd[a-z]{1,2}\d?)\b'),
30+
re.compile(r'\b(sd[a-z]{1,2}\d?)\b.*\berror\b'),
3031
]
3132

33+
3234
def get_devices(device_dir, logger):
3335
devices = []
3436
for line in open('/proc/mounts').readlines():
@@ -50,13 +52,14 @@ def get_devices(device_dir, logger):
5052
device['minor'] = str(os.minor(device_num))
5153
devices.append(device)
5254
for line in open('/proc/partitions').readlines()[2:]:
53-
major,minor,blocks,kernel_device = line.strip().split()
55+
major, minor, blocks, kernel_device = line.strip().split()
5456
device = [d for d in devices
5557
if d['major'] == major and d['minor'] == minor]
5658
if device:
5759
device[0]['kernel_device'] = kernel_device
5860
return devices
5961

62+
6063
def get_errors(minutes):
6164
errors = {}
6265
start_time = datetime.datetime.now() - datetime.timedelta(minutes=minutes)
@@ -65,26 +68,29 @@ def get_errors(minutes):
6568
# Ignore anything before the last boot
6669
errors = {}
6770
continue
68-
log_time_string = '%s %s' % (start_time.year,' '.join(line.split()[:3]))
71+
log_time_string = '%s %s' % (start_time.year,
72+
' '.join(line.split()[:3]))
6973
log_time = datetime.datetime.strptime(
70-
log_time_string,'%Y %b %d %H:%M:%S')
74+
log_time_string, '%Y %b %d %H:%M:%S')
7175
if log_time > start_time:
7276
for err in error_re:
73-
for device in re.findall(err,line):
74-
errors[device] = errors.get(device,0) + 1
77+
for device in err.findall(line):
78+
errors[device] = errors.get(device, 0) + 1
7579
return errors
7680

81+
7782
def comment_fstab(mount_point):
7883
with open('/etc/fstab', 'r') as fstab:
7984
with open('/etc/fstab.new', 'w') as new_fstab:
8085
for line in fstab:
8186
parts = line.split()
8287
if len(parts) > 2 and line.split()[1] == mount_point:
83-
new_fstab.write('#' + line)
88+
new_fstab.write('#' + line)
8489
else:
8590
new_fstab.write(line)
8691
os.rename('/etc/fstab.new', '/etc/fstab')
8792

93+
8894
if __name__ == '__main__':
8995
c = ConfigParser()
9096
try:
@@ -108,16 +114,15 @@ if __name__ == '__main__':
108114
errors = get_errors(minutes)
109115
logger.debug("Errors found: %s" % str(errors))
110116
unmounts = 0
111-
for kernel_device,count in errors.items():
117+
for kernel_device, count in errors.items():
112118
if count >= error_limit:
113-
device = [d for d in devices
114-
if d['kernel_device'].startswith(kernel_device)]
119+
device = [d for d in devices if d['kernel_device'] == kernel_device]
115120
if device:
116121
mount_point = device[0]['mount_point']
117-
if mount_point.startswith('/srv/node'):
122+
if mount_point.startswith(device_dir):
118123
logger.info("Unmounting %s with %d errors" %
119124
(mount_point, count))
120-
subprocess.call(['umount','-fl',mount_point])
125+
subprocess.call(['umount', '-fl', mount_point])
121126
logger.info("Commenting out %s from /etc/fstab" %
122127
(mount_point))
123128
comment_fstab(mount_point)

0 commit comments

Comments
 (0)