Megatest

Diff
Login

Differences From Artifact [cdffa82ac9]:

To Artifact [30f0478d92]:


254
255
256
257
258
259
260
261

262
263
264
265
266
267
268


269
270
271
272
273
274
275
254
255
256
257
258
259
260

261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277







-
+







+
+







         (exn (io-error)  (debug:print 0 *default-log-port* "ERROR: i/o error with " fname ". Check permissions, disk space etc. and try again."))
         (exn (corrupt)   (debug:print 0 *default-log-port* "ERROR: database " fname " is corrupt. Repair it to proceed."))
         (exn (busy)      (debug:print 0 *default-log-port* "ERROR: database " fname " is locked. Try copying to another location, remove original and copy back."))
         (exn (permission)(debug:print 0 *default-log-port* "ERROR: database " fname " has some permissions problem."))
         (exn () (debug:print 0 *default-log-port* "ERROR: Unknown error with database " fname " message: " ((condition-property-accessor 'exn 'message) exn))))
	)))


;; this routine is used to determine if we are in write mode or read-only mode
(define (db:mtdbpath-writable? mtdbpath)
  (let* ((parent-dir (pathname-directory mtdbpath))
         (logdir     (conc parent-dir "/logs")))
    (and
     (file-write-access? parent-dir)
     (file-write-access? mtdbpath)
     (or (not (common:file-exists? logdir)) (file-write-access? logdir))
     (or (not (configf:lookup *configdat* "setup" "write-requires-ownership"))
         (equal? (file-owner mtdbpath)(current-effective-user-id)))
     )))



;; ;; This routine creates the db. It is only called if the db is not already opened
;; ;; 
;; (define (db:open-rundb dbstruct run-id #!key (attemptnum 0)(do-not-open #f)) ;;  (conc *toppath* "/megatest.db") (car *configinfo*)))
385
386
387
388
389
390
391
392

393
394
395
396
397
398
399
387
388
389
390
391
392
393

394
395
396
397
398
399
400
401







-
+







         (dbpath       (conc  dbdir "/" (or name "megatest.db")))
	 (dbexists     (common:file-exists? dbpath))
	 (db           (db:lock-create-open dbpath
					    (lambda (db)
                                              (db:initialize-main-db db)
					      ;;(db:initialize-run-id-db db)
					      )))
	 (write-access (file-write-access? dbpath)))
	 (write-access (db:mtdbpath-writable? dbpath)))
    (debug:print-info 13 *default-log-port* "db:open-megatest-db "dbpath)
    (if (and dbexists (not write-access))
	(set! *db-write-access* #f))
    (cons db dbpath)))

;; sync run to disk if touched
;;