Merge pull request #3224 from haraldh/varlink_upgrade

Fix for varlink upgrade connections
This commit is contained in:
OpenShift Merge Robot 2019-05-31 04:53:29 +02:00 committed by GitHub
commit 558ce8d141
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 4 deletions

View File

@ -583,7 +583,15 @@ func (r *LocalRuntime) attach(ctx context.Context, stdin, stdout *os.File, cid s
} }
// TODO add detach keys support // TODO add detach keys support
_, err = iopodman.Attach().Send(r.Conn, varlink.Upgrade, cid, detachKeys, start) reply, err := iopodman.Attach().Send(r.Conn, varlink.Upgrade, cid, detachKeys, start)
if err != nil {
restoreTerminal(oldTermState)
return nil, err
}
// See if the server accepts the upgraded connection or returns an error
_, err = reply()
if err != nil { if err != nil {
restoreTerminal(oldTermState) restoreTerminal(oldTermState)
return nil, err return nil, err

View File

@ -60,7 +60,10 @@ func (i *LibpodAPI) Attach(call iopodman.VarlinkCall, name string, detachKeys st
if !start && state != libpod.ContainerStateRunning { if !start && state != libpod.ContainerStateRunning {
return call.ReplyErrorOccurred("container must be running to attach") return call.ReplyErrorOccurred("container must be running to attach")
} }
call.Reply(nil)
// ACK the client upgrade request
call.ReplyAttach()
reader, writer, _, pw, streams := setupStreams(call) reader, writer, _, pw, streams := setupStreams(call)
go func() { go func() {

View File

@ -29,6 +29,12 @@ func (i *LibpodAPI) SendFile(call iopodman.VarlinkCall, ftype string, length int
return call.ReplyErrorOccurred(err.Error()) return call.ReplyErrorOccurred(err.Error())
} }
// FIXME return parameter
if err = call.ReplySendFile("FIXME_file_handle"); err != nil {
// If an error occurs while sending the reply, return the error
return err
}
writer := bufio.NewWriter(outputFile) writer := bufio.NewWriter(outputFile)
defer writer.Flush() defer writer.Flush()
@ -60,9 +66,10 @@ func (i *LibpodAPI) ReceiveFile(call iopodman.VarlinkCall, filepath string, dele
} }
// Send the file length down to client // Send the file length down to client
// Varlink connection upraded // Varlink connection upgraded
if err = call.ReplyReceiveFile(fileInfo.Size()); err != nil { if err = call.ReplyReceiveFile(fileInfo.Size()); err != nil {
return call.ReplyErrorOccurred(err.Error()) // If an error occurs while sending the reply, return the error
return err
} }
reader := bufio.NewReader(fs) reader := bufio.NewReader(fs)