Skip to content

Commit

Permalink
Merge pull request #567 from monstermunchkin/context
Browse files Browse the repository at this point in the history
Update context
  • Loading branch information
stgraber authored Feb 29, 2024
2 parents 16a7d30 + 3be19c7 commit 95bc49d
Show file tree
Hide file tree
Showing 35 changed files with 341 additions and 341 deletions.
2 changes: 1 addition & 1 deletion cmd/incusd/api_1.0.go
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ func doApi10Update(d *Daemon, r *http.Request, req api.ServerPut, patch bool) re
var newClusterConfig *clusterConfig.Config
oldClusterConfig := make(map[string]string)

err = s.DB.Cluster.Transaction(context.Background(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
var err error
newClusterConfig, err = clusterConfig.Load(ctx, tx)
if err != nil {
Expand Down
80 changes: 39 additions & 41 deletions cmd/incusd/api_cluster.go

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions cmd/incusd/api_internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func internalCreateWarning(d *Daemon, r *http.Request) response.Response {
return response.SmartError(fmt.Errorf("Invalid entity type"))
}

err = d.State().DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = d.State().DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
return tx.UpsertWarning(ctx, req.Location, req.Project, req.EntityTypeCode, req.EntityID, warningtype.Type(req.TypeCode), req.Message)
})
if err != nil {
Expand Down Expand Up @@ -571,7 +571,7 @@ func internalSQLExec(tx *sql.Tx, query string, result *internalSQL.SQLResult) er

// internalImportFromBackup creates instance, storage pool and volume DB records from an instance's backup file.
// It expects the instance volume to be mounted so that the backup.yaml file is readable.
func internalImportFromBackup(s *state.State, projectName string, instName string, allowNameOverride bool) error {
func internalImportFromBackup(ctx context.Context, s *state.State, projectName string, instName string, allowNameOverride bool) error {
if instName == "" {
return fmt.Errorf("The name of the instance is required")
}
Expand Down Expand Up @@ -661,7 +661,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
pool, err := storagePools.LoadByName(s, instancePoolName)
if response.IsNotFoundError(err) {
// Create the storage pool db entry if it doesn't exist.
_, err = storagePoolDBCreate(s, instancePoolName, "", backupConf.Pool.Driver, backupConf.Pool.Config)
_, err = storagePoolDBCreate(ctx, s, instancePoolName, "", backupConf.Pool.Driver, backupConf.Pool.Config)
if err != nil {
return fmt.Errorf("Create storage pool database entry: %w", err)
}
Expand Down Expand Up @@ -690,7 +690,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin

// Check if a storage volume entry for the instance already exists.
var dbVolume *db.StorageVolume
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
dbVolume, err = tx.GetStoragePoolVolume(ctx, pool.ID(), projectName, instanceDBVolType, backupConf.Container.Name, true)
if err != nil && !response.IsNotFoundError(err) {
return err
Expand All @@ -706,7 +706,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
return fmt.Errorf(`Storage volume for instance %q already exists in the database`, backupConf.Container.Name)
}

err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
// Check if an entry for the instance already exists in the db.
_, err := tx.GetInstanceID(ctx, projectName, backupConf.Container.Name)

Expand All @@ -726,7 +726,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin

var profiles []api.Profile

err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
profiles, err = tx.GetProfiles(ctx, projectName, backupConf.Container.Profiles)

return err
Expand Down Expand Up @@ -780,7 +780,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
for _, snap := range existingSnapshots {
snapInstName := fmt.Sprintf("%s%s%s", backupConf.Container.Name, internalInstance.SnapshotDelimiter, snap.Name)

snapErr := s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
snapErr := s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
// Check if an entry for the snapshot already exists in the db.
_, err := tx.GetInstanceSnapshotID(ctx, projectName, backupConf.Container.Name, snap.Name)

Expand All @@ -796,7 +796,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin

// Check if a storage volume entry for the snapshot already exists.
var dbVolume *db.StorageVolume
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
dbVolume, err = tx.GetStoragePoolVolume(ctx, pool.ID(), projectName, instanceDBVolType, snapInstName, true)
if err != nil && !response.IsNotFoundError(err) {
return err
Expand All @@ -814,7 +814,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
}

if snapErr == nil {
err := s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err := s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
return tx.DeleteInstance(ctx, projectName, snapInstName)
})
if err != nil {
Expand All @@ -823,7 +823,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
}

if dbVolume != nil {
err := s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err := s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
return tx.RemoveStoragePoolVolume(ctx, projectName, snapInstName, instanceDBVolType, pool.ID())
})
if err != nil {
Expand All @@ -838,7 +838,7 @@ func internalImportFromBackup(s *state.State, projectName string, instName strin
return err
}

err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
profiles, err = tx.GetProfiles(ctx, projectName, snap.Profiles)

return err
Expand Down
16 changes: 8 additions & 8 deletions cmd/incusd/api_internal_recover.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ func init() {
}

// internalRecoverScan provides the discovery and import functionality for both recovery validate and import steps.
func internalRecoverScan(s *state.State, userPools []api.StoragePoolsPost, validateOnly bool) response.Response {
func internalRecoverScan(ctx context.Context, s *state.State, userPools []api.StoragePoolsPost, validateOnly bool) response.Response {
var err error
var projects map[string]*api.Project
var projectProfiles map[string][]*api.Profile
var projectNetworks map[string]map[int64]api.Network

// Retrieve all project, profile and network info in a single transaction so we can use it for all
// imported instances and volumes, and avoid repeatedly querying the same information.
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
// Load list of projects for validation.
ps, err := dbCluster.GetProjects(ctx, tx.Tx())
if err != nil {
Expand Down Expand Up @@ -331,7 +331,7 @@ func internalRecoverScan(s *state.State, userPools []api.StoragePoolsPost, valid
if instPoolVol != nil {
// Create storage pool DB record from config in the instance.
logger.Info("Creating storage pool DB record from instance config", logger.Ctx{"name": instPoolVol.Pool.Name, "description": instPoolVol.Pool.Description, "driver": instPoolVol.Pool.Driver, "config": instPoolVol.Pool.Config})
poolID, err = dbStoragePoolCreateAndUpdateCache(s, instPoolVol.Pool.Name, instPoolVol.Pool.Description, instPoolVol.Pool.Driver, instPoolVol.Pool.Config)
poolID, err = dbStoragePoolCreateAndUpdateCache(ctx, s, instPoolVol.Pool.Name, instPoolVol.Pool.Description, instPoolVol.Pool.Driver, instPoolVol.Pool.Config)
if err != nil {
return response.SmartError(fmt.Errorf("Failed creating storage pool %q database entry: %w", pool.Name(), err))
}
Expand All @@ -341,19 +341,19 @@ func internalRecoverScan(s *state.State, userPools []api.StoragePoolsPost, valid
poolDriverName := pool.Driver().Info().Name
poolDriverConfig := pool.Driver().Config()
logger.Info("Creating storage pool DB record from user config", logger.Ctx{"name": pool.Name(), "driver": poolDriverName, "config": poolDriverConfig})
poolID, err = dbStoragePoolCreateAndUpdateCache(s, pool.Name(), "", poolDriverName, poolDriverConfig)
poolID, err = dbStoragePoolCreateAndUpdateCache(ctx, s, pool.Name(), "", poolDriverName, poolDriverConfig)
if err != nil {
return response.SmartError(fmt.Errorf("Failed creating storage pool %q database entry: %w", pool.Name(), err))
}
}

revert.Add(func() {
_ = dbStoragePoolDeleteAndUpdateCache(s, pool.Name())
_ = dbStoragePoolDeleteAndUpdateCache(context.Background(), s, pool.Name())
})

// Set storage pool node to storagePoolCreated.
// Must come before storage pool is loaded from the database.
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
return tx.StoragePoolNodeCreated(poolID)
})
if err != nil {
Expand Down Expand Up @@ -582,7 +582,7 @@ func internalRecoverValidate(d *Daemon, r *http.Request) response.Response {
return response.BadRequest(err)
}

return internalRecoverScan(d.State(), req.Pools, true)
return internalRecoverScan(r.Context(), d.State(), req.Pools, true)
}

// internalRecoverImport performs the pool volume recovery.
Expand All @@ -594,5 +594,5 @@ func internalRecoverImport(d *Daemon, r *http.Request) response.Response {
return response.BadRequest(err)
}

return internalRecoverScan(d.State(), req.Pools, false)
return internalRecoverScan(r.Context(), d.State(), req.Pools, false)
}
30 changes: 15 additions & 15 deletions cmd/incusd/api_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func projectsGet(d *Daemon, r *http.Request) response.Response {
}

var result any
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
projects, err := cluster.GetProjects(ctx, tx.Tx())
if err != nil {
return err
Expand Down Expand Up @@ -312,7 +312,7 @@ func projectsPost(d *Daemon, r *http.Request) response.Response {
}

var id int64
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
id, err = cluster.CreateProject(ctx, tx.Tx(), cluster.Project{Description: project.Description, Name: project.Name})
if err != nil {
return fmt.Errorf("Failed adding database record: %w", err)
Expand All @@ -324,7 +324,7 @@ func projectsPost(d *Daemon, r *http.Request) response.Response {
}

if util.IsTrue(project.Config["features.profiles"]) {
err = projectCreateDefaultProfile(tx, project.Name)
err = projectCreateDefaultProfile(ctx, tx, project.Name)
if err != nil {
return err
}
Expand Down Expand Up @@ -356,14 +356,14 @@ func projectsPost(d *Daemon, r *http.Request) response.Response {
}

// Create the default profile of a project.
func projectCreateDefaultProfile(tx *db.ClusterTx, project string) error {
func projectCreateDefaultProfile(ctx context.Context, tx *db.ClusterTx, project string) error {
// Create a default profile
profile := cluster.Profile{}
profile.Project = project
profile.Name = api.ProjectDefaultName
profile.Description = fmt.Sprintf("Default Incus profile for project %s", project)

_, err := cluster.CreateProfile(context.TODO(), tx.Tx(), profile)
_, err := cluster.CreateProfile(ctx, tx.Tx(), profile)
if err != nil {
return fmt.Errorf("Add default profile to database: %w", err)
}
Expand Down Expand Up @@ -415,7 +415,7 @@ func projectGet(d *Daemon, r *http.Request) response.Response {

// Get the database entry
var project *api.Project
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
dbProject, err := cluster.GetProject(ctx, tx.Tx(), name)
if err != nil {
return err
Expand Down Expand Up @@ -480,7 +480,7 @@ func projectPut(d *Daemon, r *http.Request) response.Response {

// Get the current data
var project *api.Project
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
dbProject, err := cluster.GetProject(ctx, tx.Tx(), name)
if err != nil {
return err
Expand Down Expand Up @@ -524,7 +524,7 @@ func projectPut(d *Daemon, r *http.Request) response.Response {
requestor := request.CreateRequestor(r)
s.Events.SendLifecycle(project.Name, lifecycle.ProjectUpdated.Event(project.Name, requestor, nil))

return projectChange(s, project, req)
return projectChange(r.Context(), s, project, req)
}

// swagger:operation PATCH /1.0/projects/{name} projects project_patch
Expand Down Expand Up @@ -566,7 +566,7 @@ func projectPatch(d *Daemon, r *http.Request) response.Response {

// Get the current data
var project *api.Project
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
dbProject, err := cluster.GetProject(ctx, tx.Tx(), name)
if err != nil {
return err
Expand Down Expand Up @@ -640,11 +640,11 @@ func projectPatch(d *Daemon, r *http.Request) response.Response {
requestor := request.CreateRequestor(r)
s.Events.SendLifecycle(project.Name, lifecycle.ProjectUpdated.Event(project.Name, requestor, nil))

return projectChange(s, project, req)
return projectChange(r.Context(), s, project, req)
}

// Common logic between PUT and PATCH.
func projectChange(s *state.State, project *api.Project, req api.ProjectPut) response.Response {
func projectChange(ctx context.Context, s *state.State, project *api.Project, req api.ProjectPut) response.Response {
// Make a list of config keys that have changed.
configChanged := []string{}
for key := range project.Config {
Expand Down Expand Up @@ -703,7 +703,7 @@ func projectChange(s *state.State, project *api.Project, req api.ProjectPut) res
}

// Update the database entry.
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(ctx, func(ctx context.Context, tx *db.ClusterTx) error {
err := projecthelpers.AllowProjectUpdate(tx, project.Name, req.Config, configChanged)
if err != nil {
return err
Expand All @@ -716,7 +716,7 @@ func projectChange(s *state.State, project *api.Project, req api.ProjectPut) res

if slices.Contains(configChanged, "features.profiles") {
if util.IsTrue(req.Config["features.profiles"]) {
err = projectCreateDefaultProfile(tx, project.Name)
err = projectCreateDefaultProfile(ctx, tx, project.Name)
if err != nil {
return err
}
Expand Down Expand Up @@ -888,7 +888,7 @@ func projectDelete(d *Daemon, r *http.Request) response.Response {
}

var id int64
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
project, err := cluster.GetProject(ctx, tx.Tx(), name)
if err != nil {
return fmt.Errorf("Fetch project %q: %w", name, err)
Expand Down Expand Up @@ -972,7 +972,7 @@ func projectStateGet(d *Daemon, r *http.Request) response.Response {
state := api.ProjectState{}

// Get current limits and usage.
err = s.DB.Cluster.Transaction(context.TODO(), func(ctx context.Context, tx *db.ClusterTx) error {
err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
result, err := projecthelpers.GetCurrentAllocations(ctx, tx, name)
if err != nil {
return err
Expand Down
Loading

0 comments on commit 95bc49d

Please sign in to comment.