MCPcopy Create free account
hub / github.com/GoEdgeLab/EdgeNode / open

Function open

internal/utils/dbs/db.go:50–101  ·  view source on GitHub ↗
(dsn string, lock bool)

Source from the content-addressed store, hash-verified

48}
49
50func open(dsn string, lock bool) (*DB, error) {
51 if teaconst.IsQuiting {
52 return nil, errors.New("can not open database when process is quiting")
53 }
54
55 // decode path
56 var path = dsn
57 var queryIndex = strings.Index(dsn, "?")
58 if queryIndex >= 0 {
59 path = path[:queryIndex]
60 }
61 path = strings.TrimSpace(strings.TrimPrefix(path, "file:"))
62
63 // locker
64 var locker *fsutils.Locker
65 if lock {
66 locker = fsutils.NewLocker(path)
67 err := locker.Lock()
68 if err != nil {
69 remotelogs.Warn("DB", "lock '"+path+"' failed: "+err.Error())
70 locker = nil
71 }
72 }
73
74 // check if closed successfully last time, if not we recover it
75 var walPath = path + "-wal"
76 _, statWalErr := os.Stat(walPath)
77 var shouldRecover = statWalErr == nil
78
79 // open
80 rawDB, err := sql.Open("sqlite3", dsn)
81 if err != nil {
82 return nil, err
83 }
84
85 if shouldRecover {
86 err = rawDB.Close()
87 if err != nil {
88 return nil, err
89 }
90
91 // open again
92 rawDB, err = sql.Open("sqlite3", dsn)
93 if err != nil {
94 return nil, err
95 }
96 }
97
98 var db = NewDB(rawDB, dsn)
99 db.locker = locker
100 return db, nil
101}
102
103func NewDB(rawDB *sql.DB, dsn string) *DB {
104 var db = &DB{

Callers 2

OpenWriterFunction · 0.85
OpenReaderFunction · 0.85

Calls 7

LockMethod · 0.95
WarnFunction · 0.92
NewDBFunction · 0.70
StatMethod · 0.65
CloseMethod · 0.65
ErrorMethod · 0.45
OpenMethod · 0.45

Tested by

no test coverage detected