101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
(tasks:server-am-i-the-server? mdb run-id)))
;; register that this server may come online (first to register goes though with the process)
(define (tasks:server-set-available mdb run-id)
(sqlite3:execute
mdb
"INSERT INTO servers (pid,hostname,port,pubport,start_time, priority,state,mt_version,heartbeat, interface,transport,run_id)
VALUES(?, ?, ?, ?, strftime('%s','now'), ?, ?, ?, strftime('%s','now'),?, ?, ?);"
(current-process-id) ;; pid
(get-host-name) ;; hostname
-1 ;; port
-1 ;; pubport
(random 1000) ;; priority (used a tiebreaker on get-available)
"available" ;; state
(common:version-signature) ;; mt_version
|
|
|
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
(tasks:server-am-i-the-server? mdb run-id)))
;; register that this server may come online (first to register goes though with the process)
(define (tasks:server-set-available mdb run-id)
(sqlite3:execute
mdb
"INSERT INTO servers (pid,hostname,port,pubport,start_time, priority,state,mt_version,heartbeat, interface,transport,run_id)
VALUES(?, ?, ?, ?, strftime('%s','now'), ?, ?, ?,-1,?, ?, ?);"
(current-process-id) ;; pid
(get-host-name) ;; hostname
-1 ;; port
-1 ;; pubport
(random 1000) ;; priority (used a tiebreaker on get-available)
"available" ;; state
(common:version-signature) ;; mt_version
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
(define (tasks:server-delete-records-for-this-pid mdb)
(sqlite3:execute mdb "DELETE FROM servers WHERE hostname=? AND pid=?;" (get-host-name) (current-process-id)))
(define (tasks:server-set-interface-port mdb server-id interface port)
(sqlite3:execute mdb "UPDATE servers SET interface=?,port=? WHERE id=?;" interface port server-id))
(define (tasks:server-am-i-the-server? mdb run-id)
(let* ((all (tasks:server-get-servers-vying-for-run-id mdb run-id))
(first (if (null? all)
(begin (debug:print 0 "ERROR: no servers listed, should be at least one by now.")
(sqlite3:finalize! mdb)
(exit 1))
(car (db:get-rows all))))
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
(define (tasks:server-delete-records-for-this-pid mdb)
(sqlite3:execute mdb "DELETE FROM servers WHERE hostname=? AND pid=?;" (get-host-name) (current-process-id)))
(define (tasks:server-set-interface-port mdb server-id interface port)
(sqlite3:execute mdb "UPDATE servers SET interface=?,port=? WHERE id=?;" interface port server-id))
(define (tasks:server-get-next-port mdb)
(let ((res #f)
(port-param (if (and (args:get-arg "-port")
(string->number (args:get-arg "-port")))
(string->number (args:get-arg "-port"))
#f))
(config-port (if (and (config-lookup *configdat* "server" "port")
(string->number (config-lookup *configdat* "server" "port")))
(string->number (config-lookup *configdat* "server" "port"))
#f)))
(sqlite3:for-each-row
(lambda (port)
(set! res (+ port 1))) ;; set to next
mdb
"SELECT max(port) FROM servers;")
(cond
((and port-param res) (if (> res port-param) res port-param))
(port-param port-param)
((and config-port res) (if (> res config-port) res config-port))
(config-port config-port)
((and res (> res 8080)) res)
(else (+ 5000 (random 1001))))))
(define (tasks:server-am-i-the-server? mdb run-id)
(let* ((all (tasks:server-get-servers-vying-for-run-id mdb run-id))
(first (if (null? all)
(begin (debug:print 0 "ERROR: no servers listed, should be at least one by now.")
(sqlite3:finalize! mdb)
(exit 1))
(car (db:get-rows all))))
|
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
(define (tasks:get-server mdb run-id)
(let ((res #f)
(best #f))
(sqlite3:for-each-row
(lambda (id interface port pubport transport pid hostname)
(set! res (vector id interface port pubport transport pid hostname)))
mdb
"SELECT id,interface,port,pubport,transport,pid,hostname FROM servers
WHERE strftime('%s','now')-heartbeat < 10
AND mt_version=? AND run_id=? AND state='running'
ORDER BY start_time DESC LIMIT 1;" (common:version-signature) run-id)
res))
;; (define (tasks:get-all-servers mdb)
;; (let ((res '()))
;; (sqlite3:for-each-row
;; (lambda (id interface port pubport transport pid hostname)
|
>
>
<
|
|
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
(define (tasks:get-server mdb run-id)
(let ((res #f)
(best #f))
(sqlite3:for-each-row
(lambda (id interface port pubport transport pid hostname)
(set! res (vector id interface port pubport transport pid hostname)))
mdb
;; removed:
;; strftime('%s','now')-heartbeat < 10 AND
"SELECT id,interface,port,pubport,transport,pid,hostname FROM servers
WHERE mt_version=? AND run_id=? AND state='running'
ORDER BY start_time DESC LIMIT 1;" (common:version-signature) run-id)
res))
;; (define (tasks:get-all-servers mdb)
;; (let ((res '()))
;; (sqlite3:for-each-row
;; (lambda (id interface port pubport transport pid hostname)
|