[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue common/src/commdrivers/_helpers/ObjectLibr...
From: |
Jan Ischebeck |
Subject: |
gnue common/src/commdrivers/_helpers/ObjectLibr... |
Date: |
Thu, 01 Aug 2002 18:29:43 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jan Ischebeck <address@hidden> 02/08/01 18:29:43
Modified files:
common/src/commdrivers/_helpers: ObjectLibrarian.py
ObjectEnabler.py
appserver : TODO
Log message:
added timeout for dynamic created objects to RPC library, and a garbage
collector which is running in a seperate thread
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/commdrivers/_helpers/ObjectEnabler.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/TODO.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/appserver/TODO
diff -c gnue/appserver/TODO:1.1 gnue/appserver/TODO:1.2
*** gnue/appserver/TODO:1.1 Wed Jun 5 15:15:58 2002
--- gnue/appserver/TODO Thu Aug 1 18:29:43 2002
***************
*** 5,9 ****
* close session after connection is finished or authentification failed
( in DBdriver )
! * add timeouts for dynamic objects ( f.e. session should be closed after max.
! 2 hours inactivity )
--- 5,13 ----
* close session after connection is finished or authentification failed
( in DBdriver )
! * session management:
! create a combined timeout for a whole session, i.e. only if a session
! timeouts, release all other objects
!
!
! * add a safe 'restart' command (which reloads configuration files etc., with
very low downtime, and (if possible) no need to restart clients)
Index: gnue/common/src/commdrivers/_helpers/ObjectEnabler.py
diff -c gnue/common/src/commdrivers/_helpers/ObjectEnabler.py:1.1
gnue/common/src/commdrivers/_helpers/ObjectEnabler.py:1.2
*** gnue/common/src/commdrivers/_helpers/ObjectEnabler.py:1.1 Tue Jun 11
19:44:15 2002
--- gnue/common/src/commdrivers/_helpers/ObjectEnabler.py Thu Aug 1
18:29:43 2002
***************
*** 40,45 ****
--- 40,46 ----
def __init__(self, rpcdef, bindings, params):
DirectoryServer.DirectoryServer.__init__(self, rpcdef, bindings, params)
self._dispatchers=[self.objectDispatcher]+self._dispatchers
+ ObjectLibrarian._global_GarbageCollector.start_in_new_thread()
def objectDispatcher(self, method, params):
Index: gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py
diff -c gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py:1.2
gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py:1.3
*** gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py:1.2 Wed Dec 19
02:50:26 2001
--- gnue/common/src/commdrivers/_helpers/ObjectLibrarian.py Thu Aug 1
18:29:43 2002
***************
*** 28,34 ****
# NOTES:
#
! import sha, time
class InvalidObjectReference(StandardError):
pass
--- 28,34 ----
# NOTES:
#
! import sha, time, thread
class InvalidObjectReference(StandardError):
pass
***************
*** 47,53 ****
_index += time.clock()
object._ObjectLibrarian__refid = \
sha.new("%s%s%s"%(id(object), object, _index)).hexdigest()
!
return object._ObjectLibrarian__refid
--- 47,58 ----
_index += time.clock()
object._ObjectLibrarian__refid = \
sha.new("%s%s%s"%(id(object), object, _index)).hexdigest()
!
! # add creation time
! now = time.time()
! object._ObjectLibrarian__creationtime = now
! object._ObjectLibrarian__lastusage = now
!
return object._ObjectLibrarian__refid
***************
*** 57,63 ****
def retrieveObject(handle):
try:
! return _objects[handle]
except KeyError:
raise InvalidObjectReference
--- 62,77 ----
def retrieveObject(handle):
try:
! object = _objects[handle]
!
! if hasattr(object,"_ObjectLibrarian__myGC"):
! # call private Garbage Collector (f.e. for sessions)
! object._ObjectLibrarian__myGC.beingRetrieved(object)
! else:
! # just store last used time
! object._ObjectLibrarian__lastusage = time.time()
!
! return object
except KeyError:
raise InvalidObjectReference
***************
*** 69,71 ****
--- 83,136 ----
pass
except AttributeError:
pass
+
+ def getObjectLibrarianStatus():
+ status={}
+ status["objcount"]=len(_objects)
+ return status
+
+ class GarbageCollector:
+ def __init__(self):
+ self.defaultTimeout=3600 # in seconds
+ self.loopLength=20 # in seconds
+ self.running=0
+
+ def setDefaultTimeout(self,timespan):
+ self.defaultTimeout=timespan
+
+ def getDefaultTimeout(self):
+ return self.defaultTimeout
+
+ def setLoopLength(self,length):
+ self.loopLength=length
+
+ def getLoopLength(self):
+ return self.loopLength
+
+ def cleanUp(self):
+ # is this threadsafe ?
+ keys=_objects.keys()
+ now=time.time()
+ for handle in keys:
+ try:
+ object=_objects[handle]
+ if not hasattr(object,"_ObjectLibrarian__myGC"):
+ if object._ObjectLibrarian__lastusage + self.defaultTimeout < now:
+ deferenceObject(object)
+ except:
+ pass
+ def loop(self):
+ while 1==1:
+ self.cleanUp()
+ time.sleep(self.loopLength)
+
+ def start_in_new_thread(self):
+ if self.running:
+ return
+ self.running=1
+ thread.start_new_thread(self.loop,())
+
+
+ _global_GarbageCollector = GarbageCollector()
+
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue common/src/commdrivers/_helpers/ObjectLibr...,
Jan Ischebeck <=