-
Notifications
You must be signed in to change notification settings - Fork 16
/
service.go
69 lines (57 loc) · 1.5 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package scheduler
import (
"context"
"github.com/beam-cloud/beta9/pkg/types"
pb "github.com/beam-cloud/beta9/proto"
)
type SchedulerService struct {
pb.UnimplementedSchedulerServer
Scheduler *Scheduler
}
func NewSchedulerService(scheduler *Scheduler) (*SchedulerService, error) {
go scheduler.StartProcessingRequests() // Start processing ContainerRequests
return &SchedulerService{
Scheduler: scheduler,
}, nil
}
// Get Scheduler version
func (wbs *SchedulerService) GetVersion(ctx context.Context, in *pb.VersionRequest) (*pb.VersionResponse, error) {
return &pb.VersionResponse{Version: SchedulerConfig.Version}, nil
}
// Run a container
func (wbs *SchedulerService) RunContainer(ctx context.Context, in *pb.RunContainerRequest) (*pb.RunContainerResponse, error) {
cpuRequest, err := ParseCPU(in.Cpu)
if err != nil {
return &pb.RunContainerResponse{
Success: false,
Error: err.Error(),
}, nil
}
memoryRequest, err := ParseMemory(in.Memory)
if err != nil {
return &pb.RunContainerResponse{
Success: false,
Error: err.Error(),
}, nil
}
err = wbs.Scheduler.Run(&types.ContainerRequest{
ContainerId: in.ContainerId,
EntryPoint: in.EntryPoint,
Env: in.Env,
Cpu: cpuRequest,
Memory: memoryRequest,
Gpu: in.Gpu,
ImageId: in.ImageId,
RetryCount: 0,
})
if err != nil {
return &pb.RunContainerResponse{
Success: false,
Error: err.Error(),
}, nil
}
return &pb.RunContainerResponse{
Success: true,
Error: "",
}, nil
}