X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fxdsserver%2Fsdk.go;h=cda334c8cee99681a0d6019ae8b97f90dfaa10ee;hb=5dc2ff003106f0ced38caadb06033f24c792f9b9;hp=374fb12390710d8e85cc3b26f9d7c2201303a704;hpb=0a53346ecd92e1281587c724631fdf76dc756fc7;p=src%2Fxds%2Fxds-server.git diff --git a/lib/xdsserver/sdk.go b/lib/xdsserver/sdk.go index 374fb12..cda334c 100644 --- a/lib/xdsserver/sdk.go +++ b/lib/xdsserver/sdk.go @@ -26,9 +26,9 @@ import ( "strings" "time" - common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" - "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib/eows" - "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" + common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/eows" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1" "github.com/Sirupsen/logrus" uuid "github.com/satori/go.uuid" ) @@ -92,7 +92,7 @@ func ListCrossSDK(scriptDir string, update bool, log *logrus.Logger) ([]xsapiv1. } // GetSDKInfo Used get-sdk-info script to extract SDK get info from a SDK file/tarball -func GetSDKInfo(scriptDir, url, filename, md5sum string, log *logrus.Logger) (xsapiv1.SDK, error) { +func GetSDKInfo(scriptDir, url, filename, md5sum, uuid string, log *logrus.Logger) (xsapiv1.SDK, error) { sdk := xsapiv1.SDK{} args := []string{} @@ -106,6 +106,9 @@ func GetSDKInfo(scriptDir, url, filename, md5sum string, log *logrus.Logger) (xs } else { return sdk, fmt.Errorf("url of filename must be set") } + if uuid != "" { + args = append(args, "--uuid", uuid) + } cmd := exec.Command(path.Join(scriptDir, scriptGetSdkInfo), args...) stdout, err := cmd.CombinedOutput() @@ -217,7 +220,7 @@ func NewCrossSDK(ctx *Context, sdk xsapiv1.SDK, scriptDir string) (*CrossSDK, er // Install a SDK (non blocking command, IOW run in background) func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, sess *ClientSession) error { - if s.sdk.Status == xsapiv1.SdkStatusInstalled { + if s.sdk.Status == xsapiv1.SdkStatusInstalled && !force { return fmt.Errorf("already installed") } if s.sdk.Status == xsapiv1.SdkStatusInstalling { @@ -247,6 +250,7 @@ func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, // Create new instance to execute command and sent output over WS s.installCmd = eows.New(s.scripts[scriptAdd], cmdArgs, sess.IOSocket, sess.ID, cmdID) s.installCmd.Log = s.Log + // TODO: enable Term s.installCmd.PtyMode = true s.installCmd.LineTimeSpan = 500 * time.Millisecond.Nanoseconds() if timeout > 0 { s.installCmd.CmdExecTimeout = timeout @@ -255,12 +259,16 @@ func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, } // Define callback for output (stdout+stderr) - s.installCmd.OutputCB = func(e *eows.ExecOverWS, stdout, stderr string) { + s.installCmd.OutputCB = func(e *eows.ExecOverWS, bStdout, bStderr []byte) { + + stdout := string(bStdout) + stderr := string(bStderr) + // paranoia data := e.UserData sdkID := (*data)["SDKID"].(string) if sdkID != s.sdk.ID { - s.Log.Errorln("BUG: sdk ID differs: %v != %v", sdkID, s.sdk.ID) + s.Log.Errorf("BUG: sdk ID differs: %v != %v", sdkID, s.sdk.ID) } // IO socket can be nil when disconnected @@ -297,11 +305,13 @@ func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, // Define callback for output s.installCmd.ExitCB = func(e *eows.ExecOverWS, code int, exitError error) { + defer LockXdsUpdateCounter(s.Context, false) + // paranoia data := e.UserData sdkID := (*data)["SDKID"].(string) if sdkID != s.sdk.ID { - s.Log.Errorln("BUG: sdk ID differs: %v != %v", sdkID, s.sdk.ID) + s.Log.Errorf("BUG: sdk ID differs: %v != %v", sdkID, s.sdk.ID) } s.Log.Infof("Command SDK ID %s [Cmd ID %s] exited: code %d, exitError: %v", sdkID[:16], e.CmdID, code, exitError) @@ -322,8 +332,9 @@ func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, // (see sdks.go / monitorSDKInstallation ) // Update SetupFile when n if s.sdk.SetupFile == "" { - sdkDef, err := GetSDKInfo(s.sdk.FamilyConf.ScriptsDir, s.sdk.URL, "", "", s.Log) + sdkDef, err := GetSDKInfo(s.sdk.FamilyConf.ScriptsDir, s.sdk.URL, "", "", s.sdk.UUID, s.Log) if err != nil || sdkDef.SetupFile == "" { + s.Log.Errorf("GetSDKInfo error: %v", err) code = 1 s.sdk.LastError = "Installation failed (cannot init SetupFile path)" s.sdk.Status = xsapiv1.SdkStatusNotInstalled @@ -384,6 +395,10 @@ func (s *CrossSDK) Install(file string, force bool, timeout int, args []string, s.sdk.Status = xsapiv1.SdkStatusInstalling s.sdk.LastError = "" + if err := s.events.Emit(xsapiv1.EVTSDKStateChange, s.sdk, sess.ID); err != nil { + s.Log.Errorf("WS Emit EVTSDKStateChange installing : %v", err) + } + err := s.installCmd.Start() return err