@@ -22,6 +22,7 @@ package main
22
22
23
23
import (
24
24
"bytes"
25
+ "context"
25
26
"strings"
26
27
27
28
"github.com/apple/foundationdb/bindings/go/src/fdb"
@@ -105,7 +106,7 @@ var createOps = map[string]bool{
105
106
"OPEN_SUBSPACE" : true ,
106
107
}
107
108
108
- func (de * DirectoryExtension ) processOp (sm * StackMachine , op string , isDB bool , idx int , t fdb.Transactor , rt fdb.ReadTransactor ) {
109
+ func (de * DirectoryExtension ) processOp (ctx context. Context , sm * StackMachine , op string , isDB bool , idx int , t fdb.Transactor , rt fdb.ReadTransactor ) {
109
110
defer func () {
110
111
if r := recover (); r != nil {
111
112
sm .store (idx , []byte ("DIRECTORY_ERROR" ))
@@ -142,7 +143,7 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
142
143
if l != nil {
143
144
layer = l .([]byte )
144
145
}
145
- d , err := de .cwd ().CreateOrOpen (t , tupleToPath (tuples [0 ]), layer )
146
+ d , err := de .cwd ().CreateOrOpen (ctx , t , tupleToPath (tuples [0 ]), layer )
146
147
if err != nil {
147
148
panic (err )
148
149
}
@@ -157,10 +158,10 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
157
158
p := sm .waitAndPop ().item
158
159
var d directory.Directory
159
160
if p == nil {
160
- d , err = de .cwd ().Create (t , tupleToPath (tuples [0 ]), layer )
161
+ d , err = de .cwd ().Create (ctx , t , tupleToPath (tuples [0 ]), layer )
161
162
} else {
162
163
// p.([]byte) itself may be nil, but CreatePrefix handles that appropriately
163
- d , err = de .cwd ().CreatePrefix (t , tupleToPath (tuples [0 ]), layer , p .([]byte ))
164
+ d , err = de .cwd ().CreatePrefix (ctx , t , tupleToPath (tuples [0 ]), layer , p .([]byte ))
164
165
}
165
166
if err != nil {
166
167
panic (err )
@@ -173,7 +174,7 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
173
174
if l != nil {
174
175
layer = l .([]byte )
175
176
}
176
- d , err := de .cwd ().Open (rt , tupleToPath (tuples [0 ]), layer )
177
+ d , err := de .cwd ().Open (ctx , rt , tupleToPath (tuples [0 ]), layer )
177
178
if err != nil {
178
179
panic (err )
179
180
}
@@ -188,14 +189,14 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
188
189
de .errorIndex = sm .waitAndPop ().item .(int64 )
189
190
case op == "MOVE" :
190
191
tuples := sm .popTuples (2 )
191
- d , err := de .cwd ().Move (t , tupleToPath (tuples [0 ]), tupleToPath (tuples [1 ]))
192
+ d , err := de .cwd ().Move (ctx , t , tupleToPath (tuples [0 ]), tupleToPath (tuples [1 ]))
192
193
if err != nil {
193
194
panic (err )
194
195
}
195
196
de .store (d )
196
197
case op == "MOVE_TO" :
197
198
tuples := sm .popTuples (1 )
198
- d , err := de .cwd ().MoveTo (t , tupleToPath (tuples [0 ]))
199
+ d , err := de .cwd ().MoveTo (ctx , t , tupleToPath (tuples [0 ]))
199
200
if err != nil {
200
201
panic (err )
201
202
}
@@ -208,8 +209,8 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
208
209
// doesn't end up committing the version key. (Other languages have
209
210
// separate remove() and remove_if_exists() so don't have this tricky
210
211
// issue).
211
- _ , err := t .Transact (func (tr fdb.Transaction ) (interface {}, error ) {
212
- ok , err := de .cwd ().Remove (tr , path )
212
+ _ , txClose , err := t .Transact (ctx , func (tr fdb.Transaction ) (interface {}, error ) {
213
+ ok , err := de .cwd ().Remove (ctx , tr , path )
213
214
if err != nil {
214
215
panic (err )
215
216
}
@@ -225,8 +226,9 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
225
226
if err != nil {
226
227
panic (err )
227
228
}
229
+ txClose ()
228
230
case op == "LIST" :
229
- subs , err := de .cwd ().List (rt , sm .maybePath ())
231
+ subs , err := de .cwd ().List (ctx , rt , sm .maybePath ())
230
232
if err != nil {
231
233
panic (err )
232
234
}
@@ -236,7 +238,7 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
236
238
}
237
239
sm .store (idx , t .Pack ())
238
240
case op == "EXISTS" :
239
- b , err := de .cwd ().Exists (rt , sm .maybePath ())
241
+ b , err := de .cwd ().Exists (ctx , rt , sm .maybePath ())
240
242
if err != nil {
241
243
panic (err )
242
244
}
@@ -275,10 +277,14 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
275
277
k := sm .waitAndPop ().item .([]byte )
276
278
k = append (k , tuple.Tuple {de .index }.Pack ()... )
277
279
v := de .css ().Bytes ()
278
- t .Transact (func (tr fdb.Transaction ) (interface {}, error ) {
280
+ _ , txClose , err := t .Transact (ctx , func (tr fdb.Transaction ) (interface {}, error ) {
279
281
tr .Set (fdb .Key (k ), v )
280
282
return nil , nil
281
283
})
284
+ if err != nil {
285
+ panic (err )
286
+ }
287
+ txClose ()
282
288
case op == "LOG_DIRECTORY" :
283
289
rp := sm .waitAndPop ().item .([]byte )
284
290
ss := subspace .FromBytes (rp ).Sub (de .index )
@@ -288,7 +294,7 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
288
294
v2 := tuple.Tuple {de .cwd ().GetLayer ()}.Pack ()
289
295
k3 := ss .Pack (tuple.Tuple {"exists" })
290
296
var v3 []byte
291
- exists , err := de .cwd ().Exists (rt , nil )
297
+ exists , err := de .cwd ().Exists (ctx , rt , nil )
292
298
if err != nil {
293
299
panic (err )
294
300
}
@@ -300,19 +306,23 @@ func (de *DirectoryExtension) processOp(sm *StackMachine, op string, isDB bool,
300
306
k4 := ss .Pack (tuple.Tuple {"children" })
301
307
var subs []string
302
308
if exists {
303
- subs , err = de .cwd ().List (rt , nil )
309
+ subs , err = de .cwd ().List (ctx , rt , nil )
304
310
if err != nil {
305
311
panic (err )
306
312
}
307
313
}
308
314
v4 := tuplePackStrings (subs )
309
- t .Transact (func (tr fdb.Transaction ) (interface {}, error ) {
315
+ _ , txClose , err := t .Transact (ctx , func (tr fdb.Transaction ) (interface {}, error ) {
310
316
tr .Set (k1 , v1 )
311
317
tr .Set (k2 , v2 )
312
318
tr .Set (k3 , v3 )
313
319
tr .Set (k4 , v4 )
314
320
return nil , nil
315
321
})
322
+ if err != nil {
323
+ panic (err )
324
+ }
325
+ txClose ()
316
326
case op == "STRIP_PREFIX" :
317
327
ba := sm .waitAndPop ().item .([]byte )
318
328
ssb := de .css ().Bytes ()
0 commit comments