func volumeStartHandler(w http.ResponseWriter, r *http.Request) { p := mux.Vars(r) volname := p["volname"] log.Info("In Volume start API") vol, e := volume.GetVolume(volname) if e != nil { rest.SendHTTPError(w, http.StatusBadRequest, errors.ErrVolNotFound.Error()) return } if vol.Status == volume.VolStarted { rest.SendHTTPError(w, http.StatusBadRequest, errors.ErrVolAlreadyStarted.Error()) return } vol.Status = volume.VolStarted e = volume.AddOrUpdateVolumeFunc(vol) if e != nil { rest.SendHTTPError(w, http.StatusInternalServerError, e.Error()) return } log.WithField("volume", vol.Name).Debug("Volume updated into the store") rest.SendHTTPResponse(w, http.StatusOK, vol) }
func volumeStartHandler(w http.ResponseWriter, r *http.Request) { p := mux.Vars(r) volname := p["volname"] log.Info("In Volume start API") vol, e := volume.GetVolume(volname) if e != nil { rest.SendHTTPError(w, http.StatusBadRequest, errors.ErrVolNotFound.Error()) return } if vol.Status == volume.VolStarted { rest.SendHTTPError(w, http.StatusBadRequest, errors.ErrVolAlreadyStarted.Error()) return } // A simple one-step transaction to start the brick processes txn := transaction.NewTxn() defer txn.Cleanup() lock, unlock, err := transaction.CreateLockSteps(volname) if err != nil { rest.SendHTTPError(w, http.StatusInternalServerError, err.Error()) return } txn.Nodes = vol.Nodes() txn.Steps = []*transaction.Step{ lock, &transaction.Step{ DoFunc: "vol-start.Commit", UndoFunc: "vol-start.Undo", Nodes: txn.Nodes, }, unlock, } txn.Ctx.Set("volname", volname) _, e = txn.Do() if e != nil { log.WithFields(log.Fields{ "error": e.Error(), "volume": volname, }).Error("failed to start volume") rest.SendHTTPError(w, http.StatusInternalServerError, e.Error()) return } vol.Status = volume.VolStarted e = volume.AddOrUpdateVolumeFunc(vol) if e != nil { rest.SendHTTPError(w, http.StatusInternalServerError, e.Error()) return } log.WithField("volume", vol.Name).Debug("Volume updated into the store") rest.SendHTTPResponse(w, http.StatusOK, vol) }
func storeVolume(c transaction.TxnCtx) error { var vol volume.Volinfo e := c.Get("volinfo", &vol) if e != nil { return errors.New("failed to get volinfo from context") } e = volume.AddOrUpdateVolumeFunc(&vol) if e != nil { c.Logger().WithFields(log.Fields{"error": e.Error(), "volume": vol.Name, }).Error("Failed to create volume") return e } log.WithField("volume", vol.Name).Debug("new volume added") return nil }
func commitVolumeCreate(vol *volume.Volinfo) (int, error) { // Creating client and server volfile e := volgen.GenerateVolfileFunc(vol) if e != nil { log.WithFields(log.Fields{"error": e.Error(), "volume": vol.Name, }).Error("Failed to generate volfile") return http.StatusInternalServerError, e } e = volume.AddOrUpdateVolumeFunc(vol) if e != nil { log.WithFields(log.Fields{"error": e.Error(), "volume": vol.Name, }).Error("Failed to create volume") return http.StatusInternalServerError, e } log.WithField("volume", vol.Name).Debug("NewVolume added to store") return 0, nil }