UndeleteInstance undeletes an instance.
(ctx context.Context, req *connect.Request[v1pb.UndeleteInstanceRequest])
| 700 | |
| 701 | // UndeleteInstance undeletes an instance. |
| 702 | func (s *InstanceService) UndeleteInstance(ctx context.Context, req *connect.Request[v1pb.UndeleteInstanceRequest]) (*connect.Response[v1pb.Instance], error) { |
| 703 | instance, err := getInstanceMessage(ctx, s.store, req.Msg.Name) |
| 704 | if err != nil { |
| 705 | return nil, err |
| 706 | } |
| 707 | // Idempotent: if already active, return the instance |
| 708 | if !instance.Deleted { |
| 709 | result := s.convertToV1Instance(ctx, instance) |
| 710 | return connect.NewResponse(result), nil |
| 711 | } |
| 712 | if err := s.instanceCountGuard(ctx); err != nil { |
| 713 | return nil, err |
| 714 | } |
| 715 | |
| 716 | ins, err := s.store.UpdateInstance(ctx, &store.UpdateInstanceMessage{ |
| 717 | ResourceID: &instance.ResourceID, |
| 718 | Workspace: instance.Workspace, |
| 719 | Deleted: &undeletePatch, |
| 720 | }) |
| 721 | if err != nil { |
| 722 | return nil, connect.NewError(connect.CodeInternal, err) |
| 723 | } |
| 724 | |
| 725 | // Handle sample instance undelete (restart) if applicable |
| 726 | if s.sampleInstanceManager != nil { |
| 727 | if err := s.sampleInstanceManager.HandleInstanceCreation(ctx, ins.ResourceID); err != nil { |
| 728 | slog.Warn("failed to handle sample instance undelete", log.BBError(err), slog.String("instance", ins.ResourceID)) |
| 729 | } |
| 730 | } |
| 731 | |
| 732 | result := s.convertToV1Instance(ctx, ins) |
| 733 | return connect.NewResponse(result), nil |
| 734 | } |
| 735 | |
| 736 | // SyncInstance syncs the instance. |
| 737 | func (s *InstanceService) SyncInstance(ctx context.Context, req *connect.Request[v1pb.SyncInstanceRequest]) (*connect.Response[v1pb.SyncInstanceResponse], error) { |
nothing calls this directly
no test coverage detected