@@ -19,16 +19,10 @@ def setupSchema(db, module):
1919 session = module .Class (db , 'session' , title = String ())
2020 session .disableJournalling ()
2121 db .post_init ()
22- status .create (name = "unread" )
23- status .create (name = "in-progress" )
24- status .create (name = "testing" )
25- status .create (name = "resolved" )
26- user .create (username = 'one' )
27- user .create (username = 'two' )
2822 db .commit ()
2923
3024class config :
31- DATABASE = '_test_dir '
25+ DATABASE = '_benchmark '
3226 GADFLY_DATABASE = ('test' , DATABASE )
3327 MAILHOST = 'localhost'
3428 MAIL_DOMAIN = 'fill.me.in.'
@@ -48,56 +42,83 @@ def main(backendname, time=time.time, numissues=10):
4842 except ImportError :
4943 return
5044
51- if os .path .exists (config .DATABASE ):
52- shutil .rmtree (config .DATABASE )
53-
5445 times = []
55- db = backend .Database (config , 'test' )
56- setupSchema (db , backend )
5746
58- # create a whole bunch of stuff
59- for i in range (numissues ):
60- db .issue .create (** {'title' : 'issue %s' % i })
61- for j in range (10 ):
62- db .issue .set (str (i + 1 ), status = '2' , assignedto = '2' , nosy = [])
63- db .issue .set (str (i + 1 ), status = '1' , assignedto = '1' , nosy = ['1' ,'2' ])
64- db .user .create (** {'username' : 'user %s' % i })
65- for j in range (10 ):
66- db .user .set (str (i + 1 ), assignable = 1 )
67- db .user .set (str (i + 1 ), assignable = 0 )
68- db .commit ()
47+ config .DATABASE = os .path .join ('_benchmark' , '%s-%s' % (backendname ,
48+ numissues ))
49+ if not os .path .exists (config .DATABASE ):
50+ db = backend .Database (config , 'admin' )
51+ setupSchema (db , backend )
52+ # create a whole bunch of stuff
53+ db .user .create (** {'username' : 'admin' })
54+ db .status .create (name = "unread" )
55+ db .status .create (name = "in-progress" )
56+ db .status .create (name = "testing" )
57+ db .status .create (name = "resolved" )
58+ pc = - 1
59+ for i in range (numissues ):
60+ db .user .create (** {'username' : 'user %s' % i })
61+ for j in range (10 ):
62+ db .user .set (str (i + 1 ), assignable = 1 )
63+ db .user .set (str (i + 1 ), assignable = 0 )
64+ db .issue .create (** {'title' : 'issue %s' % i })
65+ for j in range (10 ):
66+ db .issue .set (str (i + 1 ), status = '2' , assignedto = '2' , nosy = [])
67+ db .issue .set (str (i + 1 ), status = '1' , assignedto = '1' ,
68+ nosy = ['1' ,'2' ])
69+ if (i * 100 / numissues ) != pc :
70+ pc = (i * 100 / numissues )
71+ sys .stdout .write ("%d%%\r " % pc )
72+ sys .stdout .flush ()
73+ db .commit ()
74+ else :
75+ db = backend .Database (config , 'admin' )
76+ setupSchema (db , backend )
77+
6978 sys .stdout .write ('%7s: %-6d' % (backendname , numissues ))
7079 sys .stdout .flush ()
7180
7281 times .append (('start' , time ()))
7382
7483 # fetch
84+ db .clearCache ()
7585 for i in db .issue .list ():
7686 db .issue .get (i , 'title' )
7787 times .append (('fetch' , time ()))
7888
7989 # journals
90+ db .clearCache ()
8091 for i in db .issue .list ():
8192 db .issue .history (i )
8293 times .append (('journal' , time ()))
8394
8495 # "calculated" props
96+ db .clearCache ()
8597 for i in db .issue .list ():
8698 db .issue .get (i , 'activity' )
8799 db .issue .get (i , 'creator' )
88100 db .issue .get (i , 'creation' )
89101 times .append (('jprops' , time ()))
90102
91103 # lookup
104+ db .clearCache ()
92105 for i in range (numissues ):
93106 db .user .lookup ('user %s' % i )
94107 times .append (('lookup' , time ()))
95108
96109 # filter
110+ db .clearCache ()
111+ for i in range (100 ):
112+ db .issue .filter (None , {'assignedto' : '1' , 'title' :'issue' },
113+ ('+' , 'activity' ), ('+' , 'status' ))
114+ times .append (('filter' , time ()))
115+
116+ # filter with multilink
117+ db .clearCache ()
97118 for i in range (100 ):
98119 db .issue .filter (None , {'nosy' : ['1' ], 'assignedto' : '1' ,
99120 'title' :'issue' }, ('+' , 'activity' ), ('+' , 'status' ))
100- times .append (('filter ' , time ()))
121+ times .append (('filtml ' , time ()))
101122
102123 # results
103124 last = None
@@ -113,11 +134,11 @@ def main(backendname, time=time.time, numissues=10):
113134if __name__ == '__main__' :
114135 # 0 1 2 3 4 5 6
115136 # 01234567890123456789012345678901234567890123456789012345678901234
116- print 'Test name fetch journl jprops lookup filter TOTAL '
137+ print 'Test name fetch journl jprops lookup filter filtml TOTAL '
117138 for name in 'anydbm bsddb bsddb3 metakit sqlite' .split ():
118139 main (name )
119140 for name in 'anydbm bsddb bsddb3 metakit sqlite' .split ():
120141 main (name , numissues = 20 )
121- # for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
122- # main(name, numissues=100)
142+ for name in 'anydbm bsddb bsddb3 metakit sqlite' .split ():
143+ main (name , numissues = 100 )
123144
0 commit comments