Megatest

Check-in [4174f38be9]
Login
Overview
Comment:Release the lock in cases where there is an sqlite3 error.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | v1.60
Files: files | file ages | folders
SHA1: 4174f38be9b1188359e01974e6f876f7a7b77898
User & Date: mrwellan on 2014-09-03 13:41:17
Other Links: branch diff | manifest | tags
Context
2014-09-03
15:22
Increased timeouts in dot lock for portlogger check-in: c832c39e64 user: mrwellan tags: v1.60
13:41
Release the lock in cases where there is an sqlite3 error. check-in: 4174f38be9 user: mrwellan tags: v1.60
11:44
Added dot-locking around access to the portlogger db. Sqlite3 locking seems to have trouble on fast local disk sometimes (worked when system was loaded, failed when system was lightly loaded). check-in: 9db808f9fe user: mrwellan tags: v1.60
Changes

Modified portlogger.scm from [1c366728ef] to [266c8500b0].

32
33
34
35
36
37
38

39
40
41

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
            port INTEGER PRIMARY KEY,
            state TEXT DEFAULT 'not-used',
            fail_count INTEGER DEFAULT 0,
            update_time TIMESTAMP DEFAULT (strftime('%s','now')) );"))
    db))

(define (portlogger:open-run-close proc . params)

  (handle-exceptions
   exn
   (begin

     (debug:print 0 "ERROR: portlogger:open-run-close failed. " proc " " params)
     (debug:print 0 " message: " ((condition-property-accessor 'exn 'message) exn))
     (debug:print 0 "exn=" (condition->list exn))
     (print-call-chain))
   (let* ((fname  (conc "/tmp/." (current-user-name) "-portlogger.db"))
	  (lock   (obtain-dot-lock fname 1 5 10))
	  (db     (portlogger:open-db fname))
	  (res    (apply proc db params)))
     (sqlite3:finalize! db)
     (release-dot-lock fname)
     res)))

;; (fold-row PROC INIT DATABASE SQL . PARAMETERS) 
(define (portlogger:take-port db portnum)
  (let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);"))
	 (qry2 (sqlite3:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;"))
	 (qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;"))
	 (res  (sqlite3:with-transaction







>
|
|
|
>
|
|
|
|
<
|
|
|
|
|
|







32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

48
49
50
51
52
53
54
55
56
57
58
59
60
            port INTEGER PRIMARY KEY,
            state TEXT DEFAULT 'not-used',
            fail_count INTEGER DEFAULT 0,
            update_time TIMESTAMP DEFAULT (strftime('%s','now')) );"))
    db))

(define (portlogger:open-run-close proc . params)
  (let ((fname  (conc "/tmp/." (current-user-name) "-portlogger.db")))
    (handle-exceptions
     exn
     (begin
       (release-dot-lock fname)
       (debug:print 0 "ERROR: portlogger:open-run-close failed. " proc " " params)
       (debug:print 0 " message: " ((condition-property-accessor 'exn 'message) exn))
       (debug:print 0 "exn=" (condition->list exn))
       (print-call-chain))

     (let* ((lock   (obtain-dot-lock fname 1 5 10))
	    (db     (portlogger:open-db fname))
	    (res    (apply proc db params)))
       (sqlite3:finalize! db)
       (release-dot-lock fname)
       res))))

;; (fold-row PROC INIT DATABASE SQL . PARAMETERS) 
(define (portlogger:take-port db portnum)
  (let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);"))
	 (qry2 (sqlite3:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;"))
	 (qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;"))
	 (res  (sqlite3:with-transaction