142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
-
-
+
+
|
(debug:print 0 "WARNING: failed to start on portnum: " portnum ", trying next port")
(thread-sleep! 0.1)
;; get_next_port goes here
(http-transport:try-start-server run-id
ipaddrstr
(portlogger:open-run-close
(lambda (db server-id)
(portlogger:find-port db area-dat server-id))
(lambda (db)
(portlogger:find-port db area-dat))
area-dat)
server-id
area-dat))
(begin
(tasks:server-force-clean-run-record (db:delay-if-busy tdbdat area-dat) run-id ipaddrstr portnum " http-transport:try-start-server")
(print "ERROR: Tried and tried but could not start the server"))))
;; any error in following steps will result in a retry
|
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
|
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
|
-
+
|
;; Use this opportunity to sync the inmemdb to db
(if *inmemdb*
(let ((start-time (current-milliseconds))
(sync-time #f)
(rem-time #f))
;; inmemdb is a dbstruct
(condition-case
(db:sync-touched *inmemdb* *run-id* force-sync: #t)
(db:sync-touched *inmemdb* area-dat *run-id* force-sync: #t)
((sync-failed)(cond
((> bad-sync-count 10) ;; time to give up
(http-transport:server-shutdown server-id port area-dat))
(else ;; (> bad-sync-count 0) ;; we've had a fail or two, delay and loop
(thread-sleep! 5)
(loop count server-state (+ bad-sync-count 1)))))
((exn)
|
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
|
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
|
-
+
|
(http-transport:server-shutdown server-id port area-dat)))))
(define (http-transport:server-shutdown server-id port area-dat)
(let ((tdbdat (tasks:open-db area-dat)))
(debug:print-info 0 "Starting to shutdown the server.")
;; need to delete only *my* server entry (future use)
(set! *time-to-exit* #t)
(if *inmemdb* (db:sync-touched *inmemdb* *run-id* force-sync: #t))
(if *inmemdb* (db:sync-touched *inmemdb* area-dat *run-id* force-sync: #t))
;;
;; start_shutdown
;;
(tasks:server-set-state! (db:delay-if-busy tdbdat area-dat) server-id "shutting-down")
(portlogger:open-run-close
(lambda (db port yada)
(portlogger:set-port db area-dat port yada))
|