From 8dd3cc45da7c8f1f377bd4fb987d8e570c61817b Mon Sep 17 00:00:00 2001 From: site0801 <0801site@gmail.com> Date: Wed, 11 Oct 2023 15:54:45 +0900 Subject: [PATCH] Revert "Revert "Set resource cache when a LXD instance creating"" This reverts commit fb71dc9495517994a0831f5b180d75e6f9bbf4b8. --- server/go.mod | 2 +- server/go.sum | 2 ++ server/pkg/api/server.go | 4 ++++ server/pkg/api/server_add_instance.go | 24 ++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/server/go.mod b/server/go.mod index 8279b17..de483e5 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module github.com/whywaita/shoes-lxd-multi/server go 1.19 require ( - github.com/docker/go-units v0.4.0 + github.com/docker/go-units v0.5.0 github.com/lxc/lxd v0.0.0-20211202222358-a293da71aeb0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/prometheus/client_golang v1.12.1 diff --git a/server/go.sum b/server/go.sum index 6ee2ece..ca3f516 100644 --- a/server/go.sum +++ b/server/go.sum @@ -60,6 +60,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= diff --git a/server/pkg/api/server.go b/server/pkg/api/server.go index 86ca346..c52d4a7 100644 --- a/server/pkg/api/server.go +++ b/server/pkg/api/server.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "net" + "sync" myshoespb "github.com/whywaita/myshoes/api/proto.go" pb "github.com/whywaita/shoes-lxd-multi/proto.go" @@ -20,6 +21,8 @@ type ShoesLXDMultiServer struct { resourceMapping map[myshoespb.ResourceType]config.Mapping overCommitPercent uint64 + + mu sync.Mutex } // New create gRPC server @@ -28,6 +31,7 @@ func New(hostConfigs *config.HostConfigMap, mapping map[myshoespb.ResourceType]c hostConfigs: hostConfigs, resourceMapping: mapping, overCommitPercent: overCommitPercent, + mu: sync.Mutex{}, }, nil } diff --git a/server/pkg/api/server_add_instance.go b/server/pkg/api/server_add_instance.go index 791bddc..144c481 100644 --- a/server/pkg/api/server_add_instance.go +++ b/server/pkg/api/server_add_instance.go @@ -22,6 +22,8 @@ import ( pb "github.com/whywaita/shoes-lxd-multi/proto.go" "github.com/whywaita/shoes-lxd-multi/server/pkg/lxdclient" + "github.com/docker/go-units" + "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -66,6 +68,28 @@ func (s *ShoesLXDMultiServer) AddInstance(ctx context.Context, req *pb.AddInstan Source: *instanceSource, } + cpu, err := strconv.ParseUint(reqInstance.InstancePut.Config["limits.cpu"], 10, 64) + if err != nil { + return nil, fmt.Errorf("failde to parse limits.cpu: %w", err) + } + + memory, err := units.FromHumanSize(reqInstance.InstancePut.Config["limits.memory"]) + if err != nil { + return nil, fmt.Errorf("failde to parse limits.memory: %w", err) + } + + s.mu.Lock() + cache, err := lxdclient.GetStatusCache(host.HostConfig.LxdHost) + if err != nil { + return nil, err + } + cache.Resource.CPUUsed += cpu + cache.Resource.MemoryUsed += uint64(memory) + if err := lxdclient.SetStatusCache(host.HostConfig.LxdHost, cache); err != nil { + return nil, fmt.Errorf("failed to set status cache: %s", err) + } + s.mu.Unlock() + client = host.Client op, err := client.CreateInstance(reqInstance) if err != nil {