Merge remote-tracking branch 'origin'
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index d42dedb..b894fe4 100755
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -25,7 +25,7 @@
 
 EXIT_STATE_DEPEND = {
 	'BASE_APPS' : {
-		'/org/openbmc/managers/Property': 0,
+		'/org/openbmc/sensors': 0,
 	},
 	'BMC_STARTING' : {
 		'/org/openbmc/control/chassis0': 0,
@@ -62,8 +62,8 @@
 APPS = {
 	'property_manager' : {
 		'system_state'    : 'BASE_APPS',
-		'start_process'   : True,
-		'monitor_process' : True,
+		'start_process'   : False,
+		'monitor_process' : False,
 		'process_name'    : 'property_manager.py',
 		'args'            : [ SYSTEM_NAME ]
 	},
@@ -93,7 +93,7 @@
 		'process_name'    : 'sensors_virtual_p8.py',
 	},
 	'sensor_manager' : {
-		'system_state'    : 'BMC_STARTING',
+		'system_state'    : 'BASE_APPS',
 		'start_process'   : True,
 		'monitor_process' : True,
 		'process_name'    : 'sensor_manager.py',
diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index c1b9238..3c223e9 100755
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -25,7 +25,7 @@
 
 EXIT_STATE_DEPEND = {
 	'BASE_APPS' : {
-		'/org/openbmc/managers/Property': 0,
+		'/org/openbmc/sensors': 0,
 	},
 	'BMC_STARTING' : {
 		'/org/openbmc/control/chassis0': 0,
@@ -62,8 +62,8 @@
 APPS = {
 	'property_manager' : {
 		'system_state'    : 'BASE_APPS',
-		'start_process'   : True,
-		'monitor_process' : True,
+		'start_process'   : False,
+		'monitor_process' : False,
 		'process_name'    : 'property_manager.py',
 		'args'            : [ SYSTEM_NAME ]
 	},
@@ -93,7 +93,7 @@
 		'process_name'    : 'sensors_virtual_p8.py',
 	},
 	'sensor_manager' : {
-		'system_state'    : 'BMC_STARTING',
+		'system_state'    : 'BASE_APPS',
 		'start_process'   : True,
 		'monitor_process' : True,
 		'process_name'    : 'sensor_manager.py',
diff --git a/bin/PropertyCacher.py b/bin/PropertyCacher.py
new file mode 100644
index 0000000..3b0002f
--- /dev/null
+++ b/bin/PropertyCacher.py
@@ -0,0 +1,47 @@
+import os
+import cPickle
+import Openbmc
+
+CACHE_PATH = '/var/cache/obmc/'
+
+def getCacheFilename(obj_path, iface_name):
+	name = obj_path.replace('/','.')
+	filename = CACHE_PATH+name[1:]+"@"+iface_name+".props"
+	return filename
+
+def save(obj_path, iface_name, properties):
+	print "Caching: "+obj_path
+	try:
+		output = open(getCacheFilename(obj_path, iface_name), 'wb')
+		## save properties
+		dbus_props = {}
+
+		for p in properties[iface_name].keys():
+			dbus_prop = Openbmc.DbusVariable(p,properties[iface_name][p])
+			dbus_props[str(p)] = dbus_prop.getBaseValue()
+
+		cPickle.dump(dbus_props,output)
+	except Exception as e:
+		print "ERROR: "+str(e)
+	finally:
+		output.close()
+
+def load(obj_path, iface_name, properties):
+	## overlay with pickled data
+	filename=getCacheFilename(obj_path, iface_name)
+	if (os.path.isfile(filename)):
+		if (properties.has_key(iface_name) == False):
+			properties[iface_name] = {}
+		print "Loading from cache: "+filename
+		try:			
+			p = open(filename, 'rb')
+			data = cPickle.load(p)
+			for prop in data.keys():
+				properties[iface_name][prop] = data[prop]
+						
+		except Exception as e:
+			print "ERROR: Loading cache file: " +str(e)
+		finally:
+			p.close()
+
+
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index d23e345..ab1aae3 100755
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -8,6 +8,7 @@
 import dbus.mainloop.glib
 import cPickle
 import json
+import PropertyCacher
 
 if (len(sys.argv) < 2):
 	print "Usage:  inventory_items.py [system name]"
@@ -46,22 +47,20 @@
 		dbus.service.Object.__init__(self,bus,name)
 
 		self.name = name
-		## this will load properties from cache
-		self.Register('org.openbmc.InventoryItem')
 
+		## this will load properties from cache
+		PropertyCacher.load(name,INTF_NAME,self.properties)
 		data = {'is_fru': is_fru, 'fru_type': fru_type, 'present': 'Inactive', 'fault': 'None'}
 		self.SetMultiple(INTF_NAME,data)
+
 		
-	
-	@dbus.service.signal('org.openbmc.PersistantInterface',
-		signature='s')
-	def Register(self,interface):
-		pass
+		
 		
 	@dbus.service.method(INTF_NAME,
 		in_signature='a{sv}', out_signature='')
 	def update(self,data):
 		self.SetMultiple(INTF_NAME,data)
+		PropertyCacher.save(self.name,INTF_NAME,self.properties)
 
 	@dbus.service.method(INTF_NAME,
 		in_signature='s', out_signature='')
diff --git a/bin/property_manager.py b/bin/property_manager.py
index e891bd4..108f81c 100755
--- a/bin/property_manager.py
+++ b/bin/property_manager.py
@@ -56,11 +56,6 @@
 		filename = System.CACHE_PATH+name[1:]+"@"+intf_name+".props"
 		return filename
 
-	def getCacheFilenames(self,obj_path):
-		name = obj_path.replace('/','.')
-		path = System.CACHE_PATH+name[1:]+"\@*"
-		return glob.glob(path)
-	
 	def saveToCache(self, bus_name, object_path, interface_name):
 		print "Caching: "+object_path
 		try:
diff --git a/bin/system_manager.py b/bin/system_manager.py
index b33f78f..0ef92c4 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -107,9 +107,10 @@
 		
 		try:	
 			cb = System.ENTER_STATE_CALLBACK[state_name]
-			obj = bus.get_object(cb['bus_name'],cb['obj_name'])
-			method = obj.get_dbus_method(cb['method_name'],cb['interface_name'])
-			method()
+			for methd in cb.keys():
+				obj = bus.get_object(cb[methd]['bus_name'],cb[methd]['obj_name'])
+				method = obj.get_dbus_method(methd,cb[methd]['interface_name'])
+				method()
 		except:
 			pass