Move recon's locks to /var/run/swift and caches to /var/lib/swift/recon-cache.
Change some of the ways we gather information, since those are normally
Linux-specific. Make the tests acknowledge these changes.
--- swift-2.3.0/bin/swift-recon-cron.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/bin/swift-recon-cron 2016-02-08 00:58:57.095754838 -0800
@@ -57,8 +57,9 @@ def main():
sys.exit(1)
conf = dict(c.items('filter:recon'))
- recon_cache_path = conf.get('recon_cache_path', '/var/cache/swift')
+ recon_cache_path = conf.get('recon_cache_path',
+ recon_lock_path = conf.get('recon_lock_path', '/var/run/swift')
cache_file = os.path.join(recon_cache_path, "object.recon")
lock_dir = os.path.join(recon_lock_path, "swift-recon-object-cron")
conf['log_name'] = conf.get('log_name', 'recon-cron')
--- swift-2.3.0/etc/account-server.conf-sample.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/etc/account-server.conf-sample 2016-02-08 00:56:36.131898549 -0800
@@ -81,7 +81,7 @@ use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[account-replicator]
# You can override the default log routing for this app here (don't use set!):
@@ -114,7 +114,7 @@ use = egg:swift#recon
# of run_pause.
# run_pause = 30
#
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[account-auditor]
# You can override the default log routing for this app here (don't use set!):
@@ -129,7 +129,7 @@ use = egg:swift#recon
# log_facility = LOG_LOCAL0
# log_level = INFO
# accounts_per_second = 200
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[account-reaper]
# You can override the default log routing for this app here (don't use set!):
--- swift-2.3.0/etc/container-server.conf-sample.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/etc/container-server.conf-sample 2016-02-08 00:56:36.132407941 -0800
@@ -90,7 +90,7 @@ use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
-#recon_cache_path = /var/cache/swift
+#recon_cache_path = /var/lib/swift/recon-cache
[container-replicator]
# You can override the default log routing for this app here (don't use set!):
@@ -115,7 +115,7 @@ use = egg:swift#recon
# of run_pause.
# run_pause = 30
#
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[container-updater]
# You can override the default log routing for this app here (don't use set!):
@@ -135,7 +135,7 @@ use = egg:swift#recon
# Seconds to suppress updating an account that has generated an error
# account_suppression_time = 60
#
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[container-auditor]
# You can override the default log routing for this app here (don't use set!):
@@ -148,7 +148,7 @@ use = egg:swift#recon
# interval = 1800
#
# containers_per_second = 200
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[container-sync]
# You can override the default log routing for this app here (don't use set!):
--- swift-2.3.0/etc/drive-audit.conf-sample.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/etc/drive-audit.conf-sample 2016-02-08 00:56:36.132840827 -0800
@@ -8,7 +8,7 @@
# log_max_line_length = 0
# minutes = 60
# error_limit = 1
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
# unmount_failed_device = True
#
# By default, drive-audit logs only to syslog. Setting this option True
--- swift-2.3.0/etc/object-expirer.conf-sample.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/etc/object-expirer.conf-sample 2016-02-08 00:56:36.133283025 -0800
@@ -50,7 +50,7 @@
# up to reclaim_age seconds before it gives up and deletes the entry in the
# queue.
# reclaim_age = 604800
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[pipeline:main]
pipeline = catch_errors proxy-logging cache proxy-server
--- swift-2.3.0/etc/object-server.conf-sample.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/etc/object-server.conf-sample 2016-02-08 00:56:36.133858983 -0800
@@ -143,8 +143,8 @@ use = egg:swift#healthcheck
[filter:recon]
use = egg:swift#recon
-#recon_cache_path = /var/cache/swift
-#recon_lock_path = /var/lock
+#recon_cache_path = /var/lib/swift/recon-cache
+#recon_lock_path = /var/run/swift
[object-replicator]
# You can override the default log routing for this app here (don't use set!):
@@ -186,7 +186,7 @@ use = egg:swift#recon
# reclaim_age = 604800
#
# ring_check_interval = 15
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
#
# limits how long rsync error log lines are
# 0 means to log the entire line
@@ -247,7 +247,7 @@ use = egg:swift#recon
# slowdown will sleep that amount between objects
# slowdown = 0.01
#
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
[object-auditor]
# You can override the default log routing for this app here (don't use set!):
@@ -264,7 +264,7 @@ use = egg:swift#recon
# bytes_per_second = 10000000
# log_time = 3600
# zero_byte_files_per_second = 50
-# recon_cache_path = /var/cache/swift
+# recon_cache_path = /var/lib/swift/recon-cache
# Takes a comma separated list of ints. If set, the object auditor will
# increment a counter for every object whose size is <= to the given break
--- swift-2.3.0/swift/account/auditor.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/account/auditor.py 2016-02-08 00:56:36.134366990 -0800
@@ -46,7 +46,7 @@ class AccountAuditor(Daemon):
config_true_value(conf.get('db_preallocation', 'f'))
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
def _one_audit_pass(self, reported):
--- swift-2.3.0/swift/common/db_replicator.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/common/db_replicator.py 2016-02-08 00:56:36.135027676 -0800
@@ -172,7 +172,7 @@ class Replicator(Daemon):
config_true_value(conf.get('db_preallocation', 'f'))
self._zero_stats()
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
--- swift-2.3.0/swift/common/middleware/recon.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/common/middleware/recon.py 2016-02-08 00:59:32.515208787 -0800
@@ -15,6 +15,7 @@
import errno
import os
+import sys
from swift import gettext_ as _
from swift import __version__ as swiftver
@@ -46,7 +47,7 @@ class ReconMiddleware(object):
swift_dir = conf.get('swift_dir', '/etc/swift')
self.logger = get_logger(conf, log_route='recon')
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
'object.recon')
@@ -92,28 +93,44 @@ class ReconMiddleware(object):
def get_mounted(self, openr=open):
"""get ALL mounted fs from /proc/mounts"""
mounts = []
- with openr('/proc/mounts', 'r') as procmounts:
+ if sys.platform == 'sunos5':
+ mountsfile = '/etc/mnttab'
+ else:
+ mountsfile = '/proc/mounts'
+ with openr(mountsfile, 'r') as procmounts:
for line in procmounts:
mount = {}
- mount['device'], mount['path'], opt1, opt2, opt3, \
- opt4 = line.rstrip().split()
+ mount['device'], mount['path'] = line.rstrip().split()[:2]
mounts.append(mount)
return mounts
def get_load(self, openr=open):
"""get info from /proc/loadavg"""
loadavg = {}
- with openr('/proc/loadavg', 'r') as f:
- onemin, fivemin, ftmin, tasks, procs = f.read().rstrip().split()
+ if sys.platform == 'sunos5':
+ onemin, fivemin, ftmin = os.getloadavg()
+ else:
+ with openr('/proc/loadavg', 'r') as f:
+ onemin, fivemin, ftmin, tasks, procs = \
+ f.read().rstrip().split()
loadavg['1m'] = float(onemin)
loadavg['5m'] = float(fivemin)
loadavg['15m'] = float(ftmin)
- loadavg['tasks'] = tasks
- loadavg['processes'] = int(procs)
+ if sys.platform == 'sunos5':
+ # The next two fields don't seem to be used.
+ # executing threads / total threads
+ loadavg['tasks'] = "0/0"
+ # pid of newest process
+ loadavg['processes'] = 0
+ else:
+ loadavg['tasks'] = tasks
+ loadavg['processes'] = int(procs)
return loadavg
def get_mem(self, openr=open):
"""get info from /proc/meminfo"""
+ if sys.platform == 'sunos5':
+ return {}
meminfo = {}
with openr('/proc/meminfo', 'r') as memlines:
for i in memlines:
--- swift-2.3.0/swift/container/auditor.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/container/auditor.py 2016-02-08 00:56:36.136109394 -0800
@@ -44,7 +44,7 @@ class ContainerAuditor(Daemon):
config_true_value(conf.get('db_preallocation', 'f'))
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
def _one_audit_pass(self, reported):
--- swift-2.3.0/swift/container/updater.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/container/updater.py 2016-02-08 00:56:36.136593440 -0800
@@ -60,7 +60,7 @@ class ContainerUpdater(Daemon):
config_true_value(conf.get('db_preallocation', 'f'))
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
self.user_agent = 'container-updater %s' % os.getpid()
--- swift-2.3.0/swift/obj/auditor.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/obj/auditor.py 2016-02-08 00:56:36.137103648 -0800
@@ -227,7 +227,7 @@ class ObjectAuditor(Daemon):
self.conf_zero_byte_fps = int(
conf.get('zero_byte_files_per_second', 50))
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
def _sleep(self):
--- swift-2.3.0/swift/obj/expirer.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/obj/expirer.py 2016-02-08 00:56:36.137585778 -0800
@@ -57,7 +57,7 @@ class ObjectExpirer(Daemon):
self.report_first_time = self.report_last_time = time()
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
self.concurrency = int(conf.get('concurrency', 1))
if self.concurrency < 1:
--- swift-2.3.0/swift/obj/replicator.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/obj/replicator.py 2016-02-08 00:56:36.138119411 -0800
@@ -79,7 +79,7 @@ class ObjectReplicator(Daemon):
self.http_timeout = int(conf.get('http_timeout', 60))
self.lockup_timeout = int(conf.get('lockup_timeout', 1800))
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
self.conn_timeout = float(conf.get('conn_timeout', 0.5))
self.node_timeout = float(conf.get('node_timeout', 10))
--- swift-2.3.0/swift/obj/updater.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/swift/obj/updater.py 2016-02-08 00:56:36.138592637 -0800
@@ -53,7 +53,7 @@ class ObjectUpdater(Daemon):
self.successes = 0
self.failures = 0
self.recon_cache_path = conf.get('recon_cache_path',
- '/var/cache/swift')
def _listdir(self, path):
--- swift-2.3.0/test/unit/common/middleware/test_recon.py.~1~ 2015-04-30 06:57:42.000000000 -0700
+++ swift-2.3.0/test/unit/common/middleware/test_recon.py 2016-02-08 01:01:12.393031484 -0800
@@ -21,7 +21,9 @@ import array
from swift.common import ring, utils
from shutil import rmtree
import os
+import sys
import mock
+from nose import SkipTest
from swift import __version__ as swiftver
from swift.common.swob import Request
@@ -387,10 +389,12 @@ class TestReconSuccess(TestCase):
{'device': 'none', 'path': '/proc/fs/vmblock/mountPoint'}]
oart = OpenAndReadTester(mounts_content)
rv = self.app.get_mounted(openr=oart.open)
self.assertEquals(rv, mounted_resp)
def test_get_load(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
oart = OpenAndReadTester(['0.03 0.03 0.00 1/220 16306'])
rv = self.app.get_load(openr=oart.open)
self.assertEquals(oart.read_calls, [((), {})])
@@ -400,6 +404,8 @@ class TestReconSuccess(TestCase):
'1m': 0.029999999999999999})
def test_get_mem(self):
+ if sys.platform == 'sunos5':
+ raise SkipTest
meminfo_content = ['MemTotal: 505840 kB',
'MemFree: 26588 kB',
'Buffers: 44948 kB',
@@ -514,7 +520,8 @@ class TestReconSuccess(TestCase):
[((['replication_time', 'replication_stats',
'replication_last'],
- '/var/cache/swift/account.recon'), {})])
+ {})])
self.assertEquals(rv, {
"replication_stats": {
"attempted": 1, "diff": 0,
@@ -545,7 +552,8 @@ class TestReconSuccess(TestCase):
[((['replication_time', 'replication_stats',
'replication_last'],
- '/var/cache/swift/container.recon'), {})])
+ {})])
self.assertEquals(rv, {
"replication_time": 200.0,
"replication_stats": {
@@ -567,7 +575,7 @@ class TestReconSuccess(TestCase):
[((['object_replication_time',
'object_replication_last'],
- '/var/cache/swift/object.recon'), {})])
+ '/var/lib/swift/recon-cache/object.recon'), {})])
self.assertEquals(rv, {'object_replication_time': 200.0,
'object_replication_last': 1357962809.15})
@@ -578,7 +586,8 @@ class TestReconSuccess(TestCase):
rv = self.app.get_updater_info('container')
[((['container_updater_sweep'],
- '/var/cache/swift/container.recon'), {})])
+ {})])
self.assertEquals(rv, {"container_updater_sweep": 18.476239919662476})
def test_get_updater_info_object(self):
@@ -588,7 +597,7 @@ class TestReconSuccess(TestCase):
rv = self.app.get_updater_info('object')
[((['object_updater_sweep'],
- '/var/cache/swift/object.recon'), {})])
+ '/var/lib/swift/recon-cache/object.recon'), {})])
self.assertEquals(rv, {"object_updater_sweep": 0.79848217964172363})
def test_get_expirer_info_object(self):
@@ -615,7 +624,8 @@ class TestReconSuccess(TestCase):
'account_auditor_pass_completed',
'account_audits_since',
'account_audits_failed'],
- '/var/cache/swift/account.recon'), {})])
+ {})])
self.assertEquals(rv, {"account_auditor_pass_completed": 0.24,
"account_audits_failed": 0,
"account_audits_passed": 6,
@@ -634,7 +644,8 @@ class TestReconSuccess(TestCase):
'container_auditor_pass_completed',
'container_audits_since',
'container_audits_failed'],
- '/var/cache/swift/container.recon'), {})])
+ {})])
self.assertEquals(rv, {"container_auditor_pass_completed": 0.24,
"container_audits_failed": 0,
"container_audits_passed": 6,
@@ -662,7 +673,7 @@ class TestReconSuccess(TestCase):
[((['object_auditor_stats_ALL',
'object_auditor_stats_ZBF'],
- '/var/cache/swift/object.recon'), {})])
+ '/var/lib/swift/recon-cache/object.recon'), {})])
self.assertEquals(rv, {
"object_auditor_stats_ALL": {
"audit_time": 115.14418768882751,
@@ -709,7 +720,7 @@ class TestReconSuccess(TestCase):
[((['object_auditor_stats_ALL',
'object_auditor_stats_ZBF'],
- '/var/cache/swift/object.recon'), {})])
+ '/var/lib/swift/recon-cache/object.recon'), {})])
self.assertEquals(rv, {
"object_auditor_stats_ALL": {
'disk1': {