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.2.2/bin/swift-recon-cron.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/bin/swift-recon-cron	2015-02-26 16:49:51.937806748 -0800
@@ -57,8 +57,8 @@ def main():
         sys.exit(1)
     conf = dict(c.items('filter:recon'))
     device_dir = conf.get('devices', '/srv/node')
-    recon_cache_path = conf.get('recon_cache_path', '/var/cache/swift')
-    recon_lock_path = conf.get('recon_lock_path', '/var/lock')
+    recon_cache_path = conf.get('recon_cache_path', '/var/lib/swift/recon-cache')
+    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.2.2/etc/account-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/etc/account-server.conf-sample	2015-02-26 16:49:51.938107313 -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.2.2/etc/container-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/etc/container-server.conf-sample	2015-02-26 16:49:51.938374963 -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.2.2/etc/drive-audit.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/etc/drive-audit.conf-sample	2015-02-26 17:03:18.476812691 -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.2.2/etc/object-expirer.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/etc/object-expirer.conf-sample	2015-02-26 17:03:28.102759740 -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.2.2/etc/object-server.conf-sample.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/etc/object-server.conf-sample	2015-02-26 16:49:51.938657130 -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
@@ -224,7 +224,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!):
@@ -241,7 +241,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.2.2/swift/account/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/account/auditor.py	2015-02-26 16:49:51.938879416 -0800
@@ -46,7 +46,7 @@ class AccountAuditor(Daemon):
         swift.common.db.DB_PREALLOCATION = \
             config_true_value(conf.get('db_preallocation', 'f'))
         self.recon_cache_path = conf.get('recon_cache_path',
-                                         '/var/cache/swift')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, "account.recon")
 
     def _one_audit_pass(self, reported):
--- swift-2.2.2/swift/common/db_replicator.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/common/db_replicator.py	2015-02-26 16:49:51.939223420 -0800
@@ -171,7 +171,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')
+                                         '/var/lib/swift/recon-cache')
         self.recon_replicator = '%s.recon' % self.server_type
         self.rcache = os.path.join(self.recon_cache_path,
                                    self.recon_replicator)
--- swift-2.2.2/swift/common/middleware/recon.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/common/middleware/recon.py	2015-02-26 16:49:51.939514933 -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')
+                                         '/var/lib/swift/recon-cache')
         self.object_recon_cache = os.path.join(self.recon_cache_path,
                                                'object.recon')
         self.container_recon_cache = os.path.join(self.recon_cache_path,
@@ -90,28 +91,43 @@ 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.2.2/swift/container/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/container/auditor.py	2015-02-26 16:49:51.939751504 -0800
@@ -44,7 +44,7 @@ class ContainerAuditor(Daemon):
         swift.common.db.DB_PREALLOCATION = \
             config_true_value(conf.get('db_preallocation', 'f'))
         self.recon_cache_path = conf.get('recon_cache_path',
-                                         '/var/cache/swift')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, "container.recon")
 
     def _one_audit_pass(self, reported):
--- swift-2.2.2/swift/container/updater.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/container/updater.py	2015-02-26 16:49:51.939968905 -0800
@@ -60,7 +60,7 @@ class ContainerUpdater(Daemon):
         swift.common.db.DB_PREALLOCATION = \
             config_true_value(conf.get('db_preallocation', 'f'))
         self.recon_cache_path = conf.get('recon_cache_path',
-                                         '/var/cache/swift')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, "container.recon")
         self.user_agent = 'container-updater %s' % os.getpid()
 
--- swift-2.2.2/swift/obj/auditor.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/obj/auditor.py	2015-02-26 16:49:51.940188415 -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')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, "object.recon")
 
     def _sleep(self):
--- swift-2.2.2/swift/obj/expirer.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/obj/expirer.py	2015-02-26 16:49:51.940400670 -0800
@@ -57,7 +57,7 @@ class ObjectExpirer(Daemon):
         self.report_first_time = self.report_last_time = time()
         self.report_objects = 0
         self.recon_cache_path = conf.get('recon_cache_path',
-                                         '/var/cache/swift')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = join(self.recon_cache_path, 'object.recon')
         self.concurrency = int(conf.get('concurrency', 1))
         if self.concurrency < 1:
--- swift-2.2.2/swift/obj/replicator.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/obj/replicator.py	2015-02-26 16:49:51.940644907 -0800
@@ -77,7 +77,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')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, "object.recon")
         self.conn_timeout = float(conf.get('conn_timeout', 0.5))
         self.node_timeout = float(conf.get('node_timeout', 10))
--- swift-2.2.2/swift/obj/updater.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/swift/obj/updater.py	2015-02-26 16:49:51.940853387 -0800
@@ -52,7 +52,7 @@ class ObjectUpdater(Daemon):
         self.successes = 0
         self.failures = 0
         self.recon_cache_path = conf.get('recon_cache_path',
-                                         '/var/cache/swift')
+                                         '/var/lib/swift/recon-cache')
         self.rcache = os.path.join(self.recon_cache_path, 'object.recon')
 
     def _listdir(self, path):
--- swift-2.2.2/test/unit/common/middleware/test_recon.py.~1~	2015-02-01 23:44:11.000000000 -0800
+++ swift-2.2.2/test/unit/common/middleware/test_recon.py	2015-02-26 16:49:51.941363136 -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
@@ -384,10 +386,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(oart.open_calls, [(('/proc/mounts', 'r'), {})])
+        self.assertEquals(oart.open_calls, [(('/etc/mnttab', 'r'), {})])
         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, [((), {})])
@@ -397,6 +401,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',
@@ -508,7 +514,7 @@ class TestReconSuccess(TestCase):
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['replication_time', 'replication_stats',
                               'replication_last'],
-                              '/var/cache/swift/account.recon'), {})])
+                              '/var/lib/swift/recon-cache/account.recon'), {})])
         self.assertEquals(rv, {
             "replication_stats": {
                 "attempted": 1, "diff": 0,
@@ -539,7 +545,7 @@ class TestReconSuccess(TestCase):
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['replication_time', 'replication_stats',
                               'replication_last'],
-                              '/var/cache/swift/container.recon'), {})])
+                              '/var/lib/swift/recon-cache/container.recon'), {})])
         self.assertEquals(rv, {
             "replication_time": 200.0,
             "replication_stats": {
@@ -561,7 +567,7 @@ class TestReconSuccess(TestCase):
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['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})
 
@@ -572,7 +578,7 @@ class TestReconSuccess(TestCase):
         rv = self.app.get_updater_info('container')
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['container_updater_sweep'],
-                             '/var/cache/swift/container.recon'), {})])
+                             '/var/lib/swift/recon-cache/container.recon'), {})])
         self.assertEquals(rv, {"container_updater_sweep": 18.476239919662476})
 
     def test_get_updater_info_object(self):
@@ -582,7 +588,7 @@ class TestReconSuccess(TestCase):
         rv = self.app.get_updater_info('object')
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['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_auditor_info_account(self):
@@ -598,7 +604,7 @@ class TestReconSuccess(TestCase):
                               'account_auditor_pass_completed',
                               'account_audits_since',
                               'account_audits_failed'],
-                              '/var/cache/swift/account.recon'), {})])
+                              '/var/lib/swift/recon-cache/account.recon'), {})])
         self.assertEquals(rv, {"account_auditor_pass_completed": 0.24,
                                "account_audits_failed": 0,
                                "account_audits_passed": 6,
@@ -617,7 +623,7 @@ class TestReconSuccess(TestCase):
                               'container_auditor_pass_completed',
                               'container_audits_since',
                               'container_audits_failed'],
-                              '/var/cache/swift/container.recon'), {})])
+                              '/var/lib/swift/recon-cache/container.recon'), {})])
         self.assertEquals(rv, {"container_auditor_pass_completed": 0.24,
                                "container_audits_failed": 0,
                                "container_audits_passed": 6,
@@ -645,7 +651,7 @@ class TestReconSuccess(TestCase):
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['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,
@@ -692,7 +698,7 @@ class TestReconSuccess(TestCase):
         self.assertEquals(self.fakecache.fakeout_calls,
                           [((['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': {
