@@ -12,13 +12,10 @@ import (
12
12
"github.com/syndtr/goleveldb/leveldb/util"
13
13
)
14
14
15
- // Flush batches to disk when they contain this many records.
16
- const batchFlushSize = 64
17
-
18
15
// A readOnlyTransaction represents a database snapshot.
19
16
type readOnlyTransaction struct {
20
17
* leveldb.Snapshot
21
- db * instance
18
+ keyer keyer
22
19
}
23
20
24
21
func (db * instance ) newReadOnlyTransaction () readOnlyTransaction {
@@ -28,7 +25,7 @@ func (db *instance) newReadOnlyTransaction() readOnlyTransaction {
28
25
}
29
26
return readOnlyTransaction {
30
27
Snapshot : snap ,
31
- db : db ,
28
+ keyer : db . keyer ,
32
29
}
33
30
}
34
31
@@ -37,7 +34,7 @@ func (t readOnlyTransaction) close() {
37
34
}
38
35
39
36
func (t readOnlyTransaction ) getFile (folder , device , file []byte ) (protocol.FileInfo , bool ) {
40
- return t .getFileByKey (t .db . keyer .GenerateDeviceFileKey (nil , folder , device , file ))
37
+ return t .getFileByKey (t .keyer .GenerateDeviceFileKey (nil , folder , device , file ))
41
38
}
42
39
43
40
func (t readOnlyTransaction ) getFileByKey (key []byte ) (protocol.FileInfo , bool ) {
@@ -65,7 +62,7 @@ func (t readOnlyTransaction) getFileTrunc(key []byte, trunc bool) (FileIntf, boo
65
62
}
66
63
67
64
func (t readOnlyTransaction ) getGlobal (keyBuf , folder , file []byte , truncate bool ) ([]byte , FileIntf , bool ) {
68
- keyBuf = t .db . keyer .GenerateGlobalVersionKey (keyBuf , folder , file )
65
+ keyBuf = t .keyer .GenerateGlobalVersionKey (keyBuf , folder , file )
69
66
70
67
bs , err := t .Get (keyBuf , nil )
71
68
if err != nil {
@@ -77,7 +74,7 @@ func (t readOnlyTransaction) getGlobal(keyBuf, folder, file []byte, truncate boo
77
74
return keyBuf , nil , false
78
75
}
79
76
80
- keyBuf = t .db . keyer .GenerateDeviceFileKey (keyBuf , folder , vl .Versions [0 ].Device , file )
77
+ keyBuf = t .keyer .GenerateDeviceFileKey (keyBuf , folder , vl .Versions [0 ].Device , file )
81
78
if fi , ok := t .getFileTrunc (keyBuf , truncate ); ok {
82
79
return keyBuf , fi , true
83
80
}
@@ -90,14 +87,13 @@ func (t readOnlyTransaction) getGlobal(keyBuf, folder, file []byte, truncate boo
90
87
// batch size.
91
88
type readWriteTransaction struct {
92
89
readOnlyTransaction
93
- * leveldb. Batch
90
+ * batch
94
91
}
95
92
96
93
func (db * instance ) newReadWriteTransaction () readWriteTransaction {
97
- t := db .newReadOnlyTransaction ()
98
94
return readWriteTransaction {
99
- readOnlyTransaction : t ,
100
- Batch : new (leveldb. Batch ),
95
+ readOnlyTransaction : db . newReadOnlyTransaction () ,
96
+ batch : db . newBatch ( ),
101
97
}
102
98
}
103
99
@@ -106,19 +102,6 @@ func (t readWriteTransaction) close() {
106
102
t .readOnlyTransaction .close ()
107
103
}
108
104
109
- func (t readWriteTransaction ) checkFlush () {
110
- if t .Batch .Len () > batchFlushSize {
111
- t .flush ()
112
- t .Batch .Reset ()
113
- }
114
- }
115
-
116
- func (t readWriteTransaction ) flush () {
117
- if err := t .db .Write (t .Batch , nil ); err != nil {
118
- panic (err )
119
- }
120
- }
121
-
122
105
// updateGlobal adds this device+version to the version list for the given
123
106
// file. If the device is already present in the list, the version is updated.
124
107
// If the file does not have an entry in the global list, it is created.
@@ -142,7 +125,7 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
142
125
// Inserted a new newest version
143
126
global = file
144
127
} else {
145
- keyBuf = t .db . keyer .GenerateDeviceFileKey (keyBuf , folder , fl .Versions [0 ].Device , name )
128
+ keyBuf = t .keyer .GenerateDeviceFileKey (keyBuf , folder , fl .Versions [0 ].Device , name )
146
129
if new , ok := t .getFileByKey (keyBuf ); ok {
147
130
global = new
148
131
} else {
@@ -167,7 +150,7 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
167
150
// The previous newest version is now at index 1
168
151
oldGlobalFV = fl .Versions [1 ]
169
152
}
170
- keyBuf = t .db . keyer .GenerateDeviceFileKey (keyBuf , folder , oldGlobalFV .Device , name )
153
+ keyBuf = t .keyer .GenerateDeviceFileKey (keyBuf , folder , oldGlobalFV .Device , name )
171
154
if oldFile , ok := t .getFileByKey (keyBuf ); ok {
172
155
// A failure to get the file here is surprising and our
173
156
// global size data will be incorrect until a restart...
@@ -187,7 +170,7 @@ func (t readWriteTransaction) updateGlobal(gk, keyBuf, folder, device []byte, fi
187
170
// device according to the version list and global FileInfo given and updates
188
171
// the db accordingly.
189
172
func (t readWriteTransaction ) updateLocalNeed (keyBuf , folder , name []byte , fl VersionList , global protocol.FileInfo ) []byte {
190
- keyBuf = t .db . keyer .GenerateNeedFileKey (keyBuf , folder , name )
173
+ keyBuf = t .keyer .GenerateNeedFileKey (keyBuf , folder , name )
191
174
hasNeeded , _ := t .Has (keyBuf , nil )
192
175
if localFV , haveLocalFV := fl .Get (protocol .LocalDeviceID [:]); need (global , haveLocalFV , localFV .Version ) {
193
176
if ! hasNeeded {
@@ -246,21 +229,21 @@ func (t readWriteTransaction) removeFromGlobal(gk, keyBuf, folder, device []byte
246
229
if removedAt == 0 {
247
230
// A failure to get the file here is surprising and our
248
231
// global size data will be incorrect until a restart...
249
- keyBuf = t .db . keyer .GenerateDeviceFileKey (keyBuf , folder , device , file )
232
+ keyBuf = t .keyer .GenerateDeviceFileKey (keyBuf , folder , device , file )
250
233
if f , ok := t .getFileByKey (keyBuf ); ok {
251
234
meta .removeFile (protocol .GlobalDeviceID , f )
252
235
}
253
236
}
254
237
255
238
if len (fl .Versions ) == 0 {
256
- keyBuf = t .db . keyer .GenerateNeedFileKey (keyBuf , folder , file )
239
+ keyBuf = t .keyer .GenerateNeedFileKey (keyBuf , folder , file )
257
240
t .Delete (keyBuf )
258
241
t .Delete (gk )
259
242
return keyBuf
260
243
}
261
244
262
245
if removedAt == 0 {
263
- keyBuf = t .db . keyer .GenerateDeviceFileKey (keyBuf , folder , fl .Versions [0 ].Device , file )
246
+ keyBuf = t .keyer .GenerateDeviceFileKey (keyBuf , folder , fl .Versions [0 ].Device , file )
264
247
global , ok := t .getFileByKey (keyBuf )
265
248
if ! ok {
266
249
panic ("This file must exist in the db" )
0 commit comments