Skip to content

Commit babc395

Browse files
smartctl changes
1 parent 29af270 commit babc395

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

ceph-osd/hooks/utils.py

+9
Original file line numberDiff line numberDiff line change
@@ -337,11 +337,20 @@ def should_enable_discard(devices):
337337

338338

339339
def is_sata30orless(device):
340+
db = unitdata.kv()
341+
key = '%s_is_sata30orless' % str(device)
342+
if db.get(key) is not None:
343+
value = db.get(key)
344+
log('is_sata30orless: Using cached value %s' % value, level='DEBUG')
345+
return value
346+
340347
result = subprocess.check_output(["/usr/sbin/smartctl", "-i", device])
341348
print(result)
342349
for line in str(result).split("\\n"):
343350
if re.match(r"SATA Version is: *SATA (1\.|2\.|3\.0)", str(line)):
351+
db.set(key, True)
344352
return True
353+
db.set(key, False)
345354
return False
346355

347356

ceph-osd/unit_tests/test_ceph_utils.py

+29-9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
lambda *args, **kwargs: f(*args, **kwargs))
2323
import utils
2424

25+
from charmhelpers.core import unitdata
26+
2527

2628
class CephUtilsTestCase(unittest.TestCase):
2729
def setUp(self):
@@ -92,29 +94,47 @@ def test_is_sata30orless_sata31(self, mock_subprocess_check_output):
9294
b'SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)\n'
9395
b'supressed text\n\n')
9496
mock_subprocess_check_output.return_value = extcmd_output
95-
ret = utils.is_sata30orless('/dev/sda')
96-
mock_subprocess_check_output.assert_called()
97-
self.assertEqual(ret, False)
97+
db = unitdata.kv()
98+
key = '/dev/sda_is_sata30orless'
99+
if db.get(key) is None:
100+
ret = utils.is_sata30orless('/dev/sda')
101+
mock_subprocess_check_output.assert_called()
102+
self.assertEqual(ret, False)
103+
else:
104+
ret = utils.is_sata30orless('/dev/sda')
105+
mock_subprocess_check_output.assert_not_called()
98106

99107
@patch('subprocess.check_output')
100108
def test_is_sata30orless_sata30(self, mock_subprocess_check_output):
101109
extcmd_output = (b'supressed text\nSATA Version is: '
102110
b'SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)\n'
103111
b'supressed text\n\n')
104112
mock_subprocess_check_output.return_value = extcmd_output
105-
ret = utils.is_sata30orless('/dev/sda')
106-
mock_subprocess_check_output.assert_called()
107-
self.assertEqual(ret, True)
113+
db = unitdata.kv()
114+
key = '/dev/sda_is_sata30orless'
115+
if db.get(key) is None:
116+
ret = utils.is_sata30orless('/dev/sda')
117+
mock_subprocess_check_output.assert_called()
118+
self.assertEqual(ret, True)
119+
else:
120+
ret = utils.is_sata30orless('/dev/sda')
121+
mock_subprocess_check_output.assert_not_called()
108122

109123
@patch('subprocess.check_output')
110124
def test_is_sata30orless_sata26(self, mock_subprocess_check_output):
111125
extcmd_output = (b'supressed text\nSATA Version is: '
112126
b'SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s)\n'
113127
b'supressed text\n\n')
114128
mock_subprocess_check_output.return_value = extcmd_output
115-
ret = utils.is_sata30orless('/dev/sda')
116-
mock_subprocess_check_output.assert_called()
117-
self.assertEqual(ret, True)
129+
db = unitdata.kv()
130+
key = '/dev/sda_is_sata30orless'
131+
if db.get(key) is None:
132+
ret = utils.is_sata30orless('/dev/sda')
133+
mock_subprocess_check_output.assert_called()
134+
self.assertEqual(ret, True)
135+
else:
136+
ret = utils.is_sata30orless('/dev/sda')
137+
mock_subprocess_check_output.assert_not_called()
118138

119139
@patch.object(utils, "function_get")
120140
def test_raise_on_missing_arguments(self, mock_function_get):

0 commit comments

Comments
 (0)