Author: sleon
Date: 2006-01-08 02:21:34 +0000 (Sun, 08 Jan 2006)
New Revision: 7813
Modified:
trunk/apps/freeviz/db.py
trunk/apps/freeviz/gen.py
trunk/apps/freeviz/handler.py
trunk/apps/freeviz/histdata.py
trunk/apps/freeviz/histogram.py
Log:
wow, transactions, python loops, swaps ... all seems to work
Modified: trunk/apps/freeviz/db.py
===================================================================
--- trunk/apps/freeviz/db.py 2006-01-08 00:36:15 UTC (rev 7812)
+++ trunk/apps/freeviz/db.py 2006-01-08 02:21:34 UTC (rev 7813)
@@ -5,11 +5,13 @@
#mport pydot
-uri = 'mysql://twisted:severe at 127.0.0.1/twisted?debug=True'
+uri = 'mysql://twisted:severe at 127.0.0.1/twisted?cache=False'
con = connectionForURI(uri)
sqlhub.processConnection = con
+
class NodePair(SQLObject):
+ _cacheValue = False
node1 = ForeignKey('Node', notNull=True)
node2 = ForeignKey('Node', notNull=True)
@@ -20,6 +22,7 @@
index = DatabaseIndex('node1','node2', unique=True)
class Node(SQLObject):
+ _cacheValue = False
identity = StringCol(length=100, notNull=True)
lastUpdate = DateTimeCol(notNull=True, default=datetime.datetime.now())
name = StringCol(length=50, notNull=True, default='dummy')
@@ -37,9 +40,6 @@
index = DatabaseIndex('identity',unique=True)
#index2 = DatabaseIndex('name',unique=True)
-def getLastGoodVer():
- return con.queryOne('SELECT MAX(last_good_version) from node')[0]
-
def init():
Node.createTable()
NodePair.createTable()
@@ -52,15 +52,22 @@
drop()
init()
-def delete_conns(nodeinfo):
- nodeid = getIdFromInfo(nodeinfo)
- l = NodePair.select()
+def get_trans():
+ return con.transaction()
+
+def getLastGoodVer(trans):
+ return trans.queryOne('SELECT MAX(last_good_version) from node')[0]
+
+
+def delete_conns(nodeinfo, trans):
+ nodeid = getIdFromInfo(nodeinfo,trans)
+ l = NodePair.select(connection=trans)
for i in l:
if i.node1.id == nodeid or i.node2.id == nodeid:
i.delete(i.id)
-def exists(nodeinfo):
- result = Node.select(Node.q.identity == nodeinfo['identity'])
+def exists(nodeinfo,trans):
+ result = Node.select(Node.q.identity ==
nodeinfo['identity'],connection=trans)
if list(result):
return True
@@ -68,12 +75,12 @@
return False
-def refresh(nodeinfo):
- if exists(nodeinfo):
- n = Node.select(Node.q.identity == nodeinfo['identity'])[0]
+def refresh(nodeinfo,trans):
+ if exists(nodeinfo,trans):
+ n = Node.select(Node.q.identity ==
nodeinfo['identity'],connection=trans)[0]
else:
- n = Node(identity=nodeinfo['identity'])
+ n = Node(identity=nodeinfo['identity'],connection=trans)
for key in nodeinfo.keys():
setattr(n, key, nodeinfo[key])
@@ -81,18 +88,18 @@
n.lastUpdate = datetime.datetime.now()
-def getIdFromInfo(nodeinfo):
- n = Node.select(Node.q.identity == nodeinfo['identity'] )
+def getIdFromInfo(nodeinfo, trans):
+ n = Node.select(Node.q.identity ==
nodeinfo['identity'],connection=trans )
if list(n):
return list(n)[0].id
else:
raise Exception('No such node!')
-def insert(nodeinfo1, nodeinfo2, backoff1={}, backoff2={}):
+def insert(nodeinfo1, nodeinfo2, backoff1={}, backoff2={},trans=con):
#NodePair.createTable( ifNotExists=True)
- node1 = getIdFromInfo(nodeinfo1)
- node2 = getIdFromInfo(nodeinfo2)
+ node1 = getIdFromInfo(nodeinfo1,trans)
+ node2 = getIdFromInfo(nodeinfo2,trans)
#sorting
if node1 > node2:
temp=node2
@@ -104,7 +111,7 @@
backoff1=btemp
- bla = NodePair( node1=node1, node2=node2 )
+ bla = NodePair( node1=node1, node2=node2,connection=trans )
if backoff1:
bla.backoffmax_node1 = backoff1['backoffmax']
bla.backoffcur_node1 = backoff1['backoffcur']
Modified: trunk/apps/freeviz/gen.py
===================================================================
--- trunk/apps/freeviz/gen.py 2006-01-08 00:36:15 UTC (rev 7812)
+++ trunk/apps/freeviz/gen.py 2006-01-08 02:21:34 UTC (rev 7813)
@@ -7,11 +7,10 @@
import re
import handler
import math
-import time
+from time import sleep
import histogram
import db
-import sqlobject
from datetime import *
@@ -62,47 +61,35 @@
# break
#return index * chunk
- def get_activenodes(self):
- nodes = list(db.Node.select())
- if not nodes:
- print 'got empty nodes'
- active_nodes=[]
-
- for node in nodes:
- if not handler.inactive(node):
- active_nodes.append(node)
-
- return active_nodes
-
def find_and_addswapedge(self, g, nodes, identity, nstate):
oldidentities=[]
for okey in self.oldnstate.keys():
- if oldstate[okey][0] == oldlocation:
+ if oldnstate[okey][0] == nstate[identity][0]:
oldidentities.append(okey)
#not eindeutig!!
if len(oldidentities) != 1 :
print("name not eindeutig!")
+ return
oldidentity = oldidentities[0]
print "showing edge between %s and %s" % ( nstate[identity][1],
nstate[oldidentity][1])
- gedge=pydot.Gedge(nstate[identity][1], nstate[oldidentity][1],
label='swap', taillabel='nstate[identity][0]'
- , headlabel='nstate[oldidentity][0]',
arrowtail='vee', arrowhead='vee' )
+ gedge=pydot.Edge(nstate[identity][1], nstate[oldidentity][1],
label='swap',
+ taillabel='%s' % nstate[identity][0],
+ headlabel='%s' %nstate[oldidentity][0],
arrowtail='vee', arrowhead='vee' )
- g.add_ege(gedge)
+ g.add_edge(gedge)
- def gentopology(self):
+ def gentopology(self,trans):
#NodePair.createTable( ifNotExists=True )
- node_pairs = list(db.NodePair.select())
+ node_pairs = list(db.NodePair.select(connection=trans))
if not node_pairs:
print "node_pairs is empty"
- nodes = list( self.get_activenodes())
- while not nodes:
+ nodes = list( handler.get_activenodes(trans))
+ if not nodes:
print "got empty active nodes list!"
- time.sleep(1)
- nodes = list( self.get_activenodes())
#number of edges and nodes in grapgh
nnum=len(nodes)
@@ -113,7 +100,7 @@
print "got empty nstate list"
g=pydot.Dot(type='digraph', labelloc='tl', label='Nodes: %s,
Edges: %s, Time: %s' % (nnum, enum, datetime.now()) )
- lastgoodver = db.getLastGoodVer()
+ lastgoodver = db.getLastGoodVer(trans)
#counts edges for a node
edge_count={}
@@ -190,7 +177,7 @@
for identity in nstate.keys():
if identity in self.oldnstate:
if self.oldnstate[identity] !=
nstate[identity]:
- print('location swap detected')
+ print('\nlocation swap
detected!!!!!!!!!!!!!!!!!!!!!!\n')
self.find_and_addswapedge(g,
nodes, identity, nstate)
else:
print "oldnstate empty!"
@@ -213,10 +200,21 @@
# </html>
# """
oldnstate={}
+if len(sys.argv) > 1:
+ delay=int(sys.argv[1])
+else:
+ delay=60
-#while(True):
-generator = Generator(oldnstate)
-generator.gentopology()
-histogram.gen()
-oldnstate = generator.oldnstate
-#time.sleep(10)
+print "delay is %d" % delay
+
+while(True):
+ generator = Generator(oldnstate)
+ #STARING TRANS
+ trans=db.get_trans()
+ generator.gentopology(trans)
+ histogram.gen(trans)
+ #COMMITING TRANS
+ trans.commit()
+ del trans
+ oldnstate = generator.oldnstate
+ sleep(delay)
Modified: trunk/apps/freeviz/handler.py
===================================================================
--- trunk/apps/freeviz/handler.py 2006-01-08 00:36:15 UTC (rev 7812)
+++ trunk/apps/freeviz/handler.py 2006-01-08 02:21:34 UTC (rev 7813)
@@ -6,13 +6,21 @@
def handle(data):
(nodeinfo, nodeinfos, backoffs)=parser.parse(data)
+
+
+
+
+ #STRARTING TRANSACTION
+ trans = db.get_trans()
+
+
#deleting first
if 'identity' in nodeinfo:
- db.refresh(nodeinfo)
- db.delete_conns(nodeinfo)
+ db.refresh(nodeinfo,trans)
+ db.delete_conns(nodeinfo,trans)
if nodeinfos:
for nodeinfo2 in nodeinfos:
- db.refresh(nodeinfo2)
+ db.refresh(nodeinfo2,trans)
if nodeinfo['identity'] in backoffs:
backoff1 = backoffs[
nodeinfo['identity']]
@@ -24,18 +32,21 @@
else:
backoff2= {}
- db.insert(nodeinfo,nodeinfo2,
backoff1=backoff1, backoff2=backoff2)
- check_nodes()
+ db.insert(nodeinfo,nodeinfo2,
backoff1=backoff1, backoff2=backoff2,trans=trans)
+ check_nodes(trans)
+
+ #FINISHING TRANSACTION
+ trans.commit()
+ del trans
-
#check if the node is up to date, if not remove it from node-pairs
-def check_nodes():
- nodes = db.Node.select()
+def check_nodes(trans):
+ nodes = db.Node.select(connection=trans)
for node in nodes:
if inactive(node):
nodeinfo = getInfoFromNode(node)
- db.delete_conns(nodeinfo)
+ db.delete_conns(nodeinfo,trans)
def inactive(node):
@@ -43,8 +54,8 @@
return (curtime() - convtime(nodetime) ) > timedelta
-def get_activenodes():
- nodes = list(db.Node.select())
+def get_activenodes(trans):
+ nodes = list(db.Node.select(connection=trans))
assert nodes
active_nodes=[]
Modified: trunk/apps/freeviz/histdata.py
===================================================================
--- trunk/apps/freeviz/histdata.py 2006-01-08 00:36:15 UTC (rev 7812)
+++ trunk/apps/freeviz/histdata.py 2006-01-08 02:21:34 UTC (rev 7813)
@@ -2,13 +2,13 @@
import handler
#returns the list of the form
#[({'identity':'dasdas','location':'0.31231'},{:,:}),...]
-def get():
+def get(trans):
data=[]
- connections = list(db.NodePair.select())
+ connections = list(db.NodePair.select(connection=trans))
- nodes = list(handler.get_activenodes())
- lastgoodver = db.getLastGoodVer()
+ nodes = list(handler.get_activenodes(trans))
+ lastgoodver = db.getLastGoodVer(trans)
goodnodes=[]
for node in nodes:
Modified: trunk/apps/freeviz/histogram.py
===================================================================
--- trunk/apps/freeviz/histogram.py 2006-01-08 00:36:15 UTC (rev 7812)
+++ trunk/apps/freeviz/histogram.py 2006-01-08 02:21:34 UTC (rev 7813)
@@ -11,8 +11,8 @@
-def gen():
- links = histdata.get()
+def gen(trans):
+ links = histdata.get(trans)
chunk=0.5 / float(precision)
histogram=[]