Skip to content

Commit cee262b

Browse files
Asmir SelimovicFaruk Kasumovic
Asmir Selimovic
authored and
Faruk Kasumovic
committed
- Option to resume interrupted send
1 parent c0a3acf commit cee262b

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

sendrecv.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,40 @@ func (d *Dataset) SendResume(outf *os.File, flags *SendFlags, receiveResumeToken
160160
return
161161
}
162162

163+
func (d *Dataset) SendResume(outf *os.File, flags *SendFlags, receiveResumeToken string) (err error) {
164+
if d.Type != DatasetTypeSnapshot {
165+
err = fmt.Errorf("Unsupported method on filesystem or bookmark. Use func SendOne() for that purpose.")
166+
return
167+
}
168+
169+
var dpath string
170+
var pd Dataset
171+
172+
cflags := to_sendflags_t(flags)
173+
defer C.free(unsafe.Pointer(cflags))
174+
if dpath, err = d.Path(); err != nil {
175+
return
176+
}
177+
sendparams := strings.Split(dpath, "@")
178+
parent := sendparams[0]
179+
180+
if pd, err = DatasetOpen(parent); err != nil {
181+
return
182+
}
183+
defer pd.Close()
184+
185+
cReceiveResumeToken := C.CString(receiveResumeToken)
186+
defer C.free(unsafe.Pointer(cReceiveResumeToken))
187+
188+
clerr := C.zfs_send_resume(C.libzfsHandle, cflags, C.int(outf.Fd()), cReceiveResumeToken)
189+
if clerr != 0 {
190+
err = LastError()
191+
fmt.Println(err.Error())
192+
}
193+
194+
return
195+
}
196+
163197
func (d *Dataset) Send(outf *os.File, flags SendFlags) (err error) {
164198
if flags.Replicate {
165199
flags.DoAll = true

0 commit comments

Comments
 (0)