Megatest

Check-in [5258070648]
Login
Overview
Comment:Increased the number of clients to 520, added random wait and run times for clients
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | interleaved-queries
Files: files | file ages | folders
SHA1: 5258070648b1b4fbad734a8c28e0bbb322bf2477
User & Date: matt on 2012-11-17 16:20:20
Other Links: branch diff | manifest | tags
Context
2012-11-17
17:07
Increased rigour of mocktest, added timeout and retry on dbaccess and added count of all accesses check-in: 79ae44c0b4 user: matt tags: interleaved-queries
16:20
Increased the number of clients to 520, added random wait and run times for clients check-in: 5258070648 user: matt tags: interleaved-queries
15:17
Made mockup more realistic, works. check-in: a742cdc5a5 user: matt tags: interleaved-queries
Changes

Modified testzmq/mockupclient.scm from [b38730b037] to [1b460b4b52].

1
2
3

4
5

6
7

8

9


10
11
12
13


14
15
16
17

18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
1
2
3
4
5

6
7

8
9
10

11
12
13



14
15
16



17
18
19
20
21
22
23
24
25
26

27
28
29
30
31
32
33
34



+

-
+

-
+

+
-
+
+

-
-
-
+
+

-
-
-
+









-
+







(use zmq posix)

(define cname "Bob")
(define runtime 10)
(let ((args (argv)))
  (if (< (length args) 2)
  (if (< (length args) 3)
      (begin
	(print "Usage: mockupclient clientname")
	(print "Usage: mockupclient clientname runtime")
	(exit))
      (begin
      (set! cname (cadr args))))
	(set! cname (cadr args))
	(set! runtime (string->number (caddr args))))))
      
(randomize)
(define start-delay (/ (random 100) 9))
(define runtime     (+ 1 (/ (random 200) 2)))
;; (define start-delay (/ (random 100) 9))
;; (define runtime     (+ 1 (/ (random 200) 2)))

(print "client " cname " with start delay " start-delay " and runtime " runtime)
(thread-sleep! start-delay)
(print "client " cname " started")
(print "Starting client " cname " with runtime " runtime)

(include "mockupclientlib.scm")

(set! endtime (+ (current-seconds) runtime))

(let loop ()
  (let ((x (random 15))
	(varname (list-ref (list "hello" "goodbye" "saluton" "kiaorana")(random 4))))
    (case x
      ((1)(dbaccess cname 'sync "nodat"    #f))
      ;; ((1)(dbaccess cname 'sync "nodat"    #f))
      ((2 3 4 5)(dbaccess cname 'set varname (random 999)))
      ((6 7 8 9 10)(print cname ": Get \"" varname "\" " (dbaccess cname 'get varname #f)))
      (else
       (thread-sleep! 0.1)))
    (if (< (current-seconds) endtime)
	(loop))))

Modified testzmq/mockupserver.scm from [cab71edb67] to [49da501f89].

49
50
51
52
53
54
55

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77






















78
79
80
81
82
83
84
49
50
51
52
53
54
55
56






















57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85







+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    (execute db "UPDATE clients SET num_accesses=num_accesses+1 WHERE id=?;" cid)))

(define db (open-db))
;; (define queuelst '())
;; (define mx1 (make-mutex))

(define (process-queue queuelst)
  (let ((queuelen (length queuelst)))
  (for-each
   (lambda (item)
     (let ((cname (vector-ref item 1))
	   (clcmd (vector-ref item 2))
	   (cdata (vector-ref item 3)))
       (send-message pub cname send-more: #t)
       (send-message pub (case clcmd
			   ((sync)
			    "ok")
			   ((set)
			    (apply execute db "INSERT OR REPLACE INTO vars (var,val) VALUES (?,?);" (string-split cdata))
			    "ok")
			   ((get)
			    (let ((res "noval"))
			      (for-each-row
			       (lambda (val)
				 (set! res val))
			       db 
			       "SELECT val FROM vars WHERE var=?;" cdata)
			      res))
			   (else (conc "unk cmd: " clcmd))))))
   queuelst))
    (for-each
     (lambda (item)
       (let ((cname (vector-ref item 1))
	     (clcmd (vector-ref item 2))
	     (cdata (vector-ref item 3)))
	 (send-message pub cname send-more: #t)
	 (send-message pub (case clcmd
			     ((sync)
			      (conc queuelen))
			     ((set)
			      (apply execute db "INSERT OR REPLACE INTO vars (var,val) VALUES (?,?);" (string-split cdata))
			      "ok")
			     ((get)
			      (let ((res "noval"))
				(for-each-row
				 (lambda (val)
				   (set! res val))
				 db 
				 "SELECT val FROM vars WHERE var=?;" cdata)
				res))
			     (else (conc "unk cmd: " clcmd))))))
     queuelst)))

(define th1 (make-thread 
	     (lambda ()
	       (let ((last-run 0)) ;; current-seconds when run last
		 (let loop ((queuelst '()))
		   (let* ((indat (receive-message* pull))
			  (parts (string-split indat ":"))
100
101
102
103
104
105
106

107
108


109
110
111







112
113
114
115
116



101
102
103
104
105
106
107
108


109
110



111
112
113
114
115
116
117
118
119
120
121

122
123
124







+
-
-
+
+
-
-
-
+
+
+
+
+
+
+




-
+
+
+
	     "server thread"))

(include "mockupclientlib.scm")

;; send a sync to the pull port
(define th2 (make-thread
	     (lambda ()
	       (let ((last-action-time (current-seconds)))
	       (let loop ()
		 (thread-sleep! 5)
		 (let loop ()
		   (thread-sleep! 5)
		 ;; (print "Sending sync from server")
		 (dbaccess "server" 'sync "nada" #f)
		 (loop)))
		   (let ((queuelen (string->number (dbaccess "server" 'sync "nada" #f)))
			 (last-action-delta (- (current-seconds) last-action-time)))
		     (print "Server: Got queuelen=" queuelen ", last-action-delta=" last-action-delta)
		     (if (> queuelen 1)(set! last-action-time (current-seconds)))
		     (if (< last-action-delta 15)
			 (loop)
			 (print "Server exiting, 15 seconds since last access"))))))
	     "sync thread"))

(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
(thread-join! th2)

(print "Server exited!")

Modified testzmq/testmockup.sh from [422a24aae3] to [0f5907e5cc].

9
10
11
12
13
14
15
16

17


18
19
20
21







22
23
24
25
26
27
28
9
10
11
12
13
14
15

16
17
18
19




20
21
22
23
24
25
26
27
28
29
30
31
32
33







-
+

+
+
-
-
-
-
+
+
+
+
+
+
+







echo Starting server
./mockupserver &

sleep 1

echo Starting clients
IVALS=
for i in a b c d e f g h i j k l m n o p q s t u v w x y z;
for i in a b c d e f g h i j k l m n o p q s t u v w x y z; 
  do
  for k in a b;
    do
  for j in 0 1 2 3 4 5 6 7 8 9;
    do
    echo Starting client $i$j
    ./mockupclient $i$j &
    for j in 0 1 2 3 4 5 6 7 8 9;
      do
      waittime=`random 0 20`
      runtime=`random 5 20`
      echo "Starting client $i$k$j with waittime $waittime and runtime $runtime" 
      (sleep $waittime;./mockupclient $i$k$j $runtime) &
    done
  done
done

wait
# echo "Running for one minute then killing all mockupserver and mockupclient processes"
# sleep 60
# killall -v mockupserver mockupclient