MYNEWT-300 newtmgr cli - add timeouts and retries to image upload messages.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/264a3ddc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/264a3ddc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/264a3ddc

Branch: refs/heads/develop
Commit: 264a3ddc055a057391c435807c63b4a36172630f
Parents: 87076df
Author: Marko Kiiskila <[email protected]>
Authored: Tue May 24 14:42:00 2016 -0700
Committer: Marko Kiiskila <[email protected]>
Committed: Tue May 24 14:42:00 2016 -0700

----------------------------------------------------------------------
 newtmgr/cli/image.go | 42 +++++++++++++++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/264a3ddc/newtmgr/cli/image.go
----------------------------------------------------------------------
diff --git a/newtmgr/cli/image.go b/newtmgr/cli/image.go
index 74a3764..c85ff4c 100644
--- a/newtmgr/cli/image.go
+++ b/newtmgr/cli/image.go
@@ -24,6 +24,7 @@ import (
        "io"
        "io/ioutil"
        "os"
+       "time"
 
        "mynewt.apache.org/newt/newtmgr/config"
        "mynewt.apache.org/newt/newtmgr/core"
@@ -45,7 +46,7 @@ func imageListCmd(cmd *cobra.Command, args []string) {
                nmUsage(cmd, err)
        }
 
-       conn, err := transport.NewConn(profile)
+       conn, err := transport.NewConnWithTimeout(profile, time.Second * 3)
        if err != nil {
                nmUsage(nil, err)
        }
@@ -154,7 +155,7 @@ func imageUploadCmd(cmd *cobra.Command, args []string) {
                nmUsage(cmd, err)
        }
 
-       conn, err := transport.NewConn(profile)
+       conn, err := transport.NewConnWithTimeout(profile, time.Second)
        if err != nil {
                nmUsage(nil, err)
        }
@@ -169,6 +170,7 @@ func imageUploadCmd(cmd *cobra.Command, args []string) {
        }
        var currOff uint32 = 0
        imageSz := uint32(len(imageFile))
+       rexmits := 0
 
        for currOff < imageSz {
                imageUpload, err := protocol.NewImageUpload()
@@ -180,7 +182,6 @@ func imageUploadCmd(cmd *cobra.Command, args []string) {
                if blockSz > 36 {
                        blockSz = 36
                }
-
                imageUpload.Offset = currOff
                imageUpload.Size = imageSz
                imageUpload.Data = imageFile[currOff : currOff+blockSz]
@@ -190,11 +191,35 @@ func imageUploadCmd(cmd *cobra.Command, args []string) {
                        nmUsage(cmd, err)
                }
 
-               if err := runner.WriteReq(nmr); err != nil {
-                       nmUsage(cmd, err)
-               }
+               var rsp *protocol.NmgrReq
+               var i int
+               for i = 0; i < 5; i++ {
+                       if err := runner.WriteReq(nmr); err != nil {
+                               nmUsage(cmd, err)
+                       }
 
-               rsp, err := runner.ReadResp()
+                       rsp, err = runner.ReadResp()
+                       if err == nil {
+                               break;
+                       }
+
+                       /*
+                        * Failed. Reopening tty.
+                        */
+                       conn, err = transport.NewConnWithTimeout(profile, 
time.Second)
+                       if err != nil {
+                               nmUsage(nil, err)
+                       }
+
+                       runner, err = protocol.NewCmdRunner(conn)
+                       if err != nil {
+                               nmUsage(cmd, err)
+                       }
+               }
+               rexmits += i
+               if i == 5 {
+                       err = util.NewNewtError("Maximum number of TX retries 
reached")
+               }
                if err != nil {
                        nmUsage(cmd, err)
                }
@@ -210,6 +235,9 @@ func imageUploadCmd(cmd *cobra.Command, args []string) {
        if err != nil {
                nmUsage(cmd, err)
        }
+       if rexmits != 0 {
+               fmt.Printf(" %d retransmits\n", rexmits)
+       }
        fmt.Println("Done")
 }
 

Reply via email to