mirror of https://github.com/harness/drone.git
feat: [CDE-336]: call gitspaces stop only when required. (#2762)
* feat: [CDE-336]: call stop only when required. * feat: [CDE-336]: call stop only when required. * feat: [CDE-336]: call stop only when required.abhinav-harness-patch-1
parent
40a9472d4d
commit
a802fc8d29
|
@ -43,56 +43,53 @@ func (c *Controller) Delete(
|
|||
if err != nil {
|
||||
return fmt.Errorf("failed to authorize: %w", err)
|
||||
}
|
||||
|
||||
gitspaceConfig, err := c.gitspaceConfigStore.FindByIdentifier(ctx, space.ID, identifier)
|
||||
gitspaceConfig.SpacePath = space.Path
|
||||
if err != nil || gitspaceConfig == nil {
|
||||
log.Err(err).Msg(gitspaceConfigNotFound + identifier)
|
||||
return err
|
||||
}
|
||||
instance, _ := c.gitspaceInstanceStore.FindLatestByGitspaceConfigID(ctx, gitspaceConfig.ID)
|
||||
gitspaceConfig.GitspaceInstance = instance
|
||||
gitspaceConfig.SpacePath = space.Path
|
||||
if instance == nil || instance.State.IsFinalStatus() {
|
||||
if instance == nil || instance.State == enum.GitspaceInstanceStateUninitialized {
|
||||
gitspaceConfig.IsDeleted = true
|
||||
err = c.gitspaceSvc.UpdateConfig(ctx, gitspaceConfig)
|
||||
if err != nil {
|
||||
if err = c.gitspaceSvc.UpdateConfig(ctx, gitspaceConfig); err != nil {
|
||||
return fmt.Errorf("failed to mark gitspace config as deleted: %w", err)
|
||||
}
|
||||
} else {
|
||||
if instance.State.IsBusyStatus() {
|
||||
return fmt.Errorf("in busy operation, please try again later")
|
||||
}
|
||||
ctxWithoutCancel := context.WithoutCancel(ctx)
|
||||
go c.stopRunningGitspace(ctxWithoutCancel, *gitspaceConfig)
|
||||
go c.removeGitspace(ctxWithoutCancel, *gitspaceConfig)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Controller) stopRunningGitspace(ctx context.Context, config types.GitspaceConfig) {
|
||||
func (c *Controller) removeGitspace(ctx context.Context, config types.GitspaceConfig) {
|
||||
activeTimeEnded := time.Now().UnixMilli()
|
||||
config.GitspaceInstance.ActiveTimeEnded = &activeTimeEnded
|
||||
config.GitspaceInstance.TotalTimeUsed =
|
||||
*(config.GitspaceInstance.ActiveTimeEnded) - *(config.GitspaceInstance.ActiveTimeStarted)
|
||||
config.GitspaceInstance.State = enum.GitspaceInstanceStateStopping
|
||||
err := c.gitspaceSvc.UpdateInstance(ctx, config.GitspaceInstance)
|
||||
if err != nil {
|
||||
log.Ctx(ctx).Err(err).Msgf("failed to update instance %s before triggering delete",
|
||||
config.GitspaceInstance.Identifier)
|
||||
return
|
||||
if config.GitspaceInstance.State == enum.GitspaceInstanceStateRunning {
|
||||
config.GitspaceInstance.State = enum.GitspaceInstanceStateStopping
|
||||
err := c.gitspaceSvc.UpdateInstance(ctx, config.GitspaceInstance)
|
||||
if err != nil {
|
||||
log.Ctx(ctx).Err(err).Msgf("failed to update instance %s before triggering delete",
|
||||
config.GitspaceInstance.Identifier)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
err = c.gitspaceSvc.TriggerDelete(ctx, config)
|
||||
if err != nil {
|
||||
if err := c.gitspaceSvc.TriggerDelete(ctx, config); err != nil {
|
||||
log.Ctx(ctx).Err(err).Msgf("error during triggering delete for gitspace instance %s",
|
||||
config.GitspaceInstance.Identifier)
|
||||
|
||||
config.GitspaceInstance.State = enum.GitspaceInstanceStateError
|
||||
updateErr := c.gitspaceSvc.UpdateInstance(ctx, config.GitspaceInstance)
|
||||
if updateErr != nil {
|
||||
if updateErr := c.gitspaceSvc.UpdateInstance(ctx, config.GitspaceInstance); updateErr != nil {
|
||||
log.Ctx(ctx).Err(updateErr).Msgf("failed to update instance %s after error in triggering delete",
|
||||
config.GitspaceInstance.Identifier)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
log.Ctx(ctx).Debug().Msgf("successfully triggered delete for gitspace instance %s",
|
||||
config.GitspaceInstance.Identifier)
|
||||
}
|
||||
|
|
|
@ -114,8 +114,9 @@ func (o orchestrator) TriggerStopGitspace(
|
|||
"unable to find provisioned infra while triggering stop for gitspace instance %s: %w",
|
||||
gitspaceConfig.GitspaceInstance.Identifier, err)
|
||||
}
|
||||
|
||||
err = o.stopGitspaceContainer(ctx, gitspaceConfig, *infra)
|
||||
if gitspaceConfig.GitspaceInstance.State == enum.GitspaceInstanceStateRunning {
|
||||
err = o.stopGitspaceContainer(ctx, gitspaceConfig, *infra)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -207,12 +208,9 @@ func (o orchestrator) TriggerDeleteGitspace(
|
|||
"unable to find provisioned infra while triggering delete for gitspace instance %s: %w",
|
||||
gitspaceConfig.GitspaceInstance.Identifier, err)
|
||||
}
|
||||
|
||||
err = o.stopAndRemoveGitspaceContainer(ctx, gitspaceConfig, *infra)
|
||||
if err != nil {
|
||||
if err = o.stopAndRemoveGitspaceContainer(ctx, gitspaceConfig, *infra); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
o.emitGitspaceEvent(ctx, gitspaceConfig, enum.GitspaceEventTypeInfraDeprovisioningStart)
|
||||
|
||||
err = o.infraProvisioner.TriggerDeprovision(ctx, gitspaceConfig, *infra)
|
||||
|
|
Loading…
Reference in New Issue