diff --git a/models/resource_scene.go b/models/resource_scene.go index 61b44a77a..6c458f0cd 100644 --- a/models/resource_scene.go +++ b/models/resource_scene.go @@ -17,7 +17,6 @@ type ResourceScene struct { JobType string IsExclusive bool ExclusiveOrg string - QueueId int64 CreatedTime timeutil.TimeStamp `xorm:"created"` CreatedBy int64 UpdatedTime timeutil.TimeStamp `xorm:"updated"` @@ -39,7 +38,6 @@ type ResourceSceneReq struct { JobType string IsExclusive bool ExclusiveOrg string - QueueId int64 CreatorId int64 SpecIds []int64 } @@ -65,18 +63,12 @@ func NewResourceSceneListRes(totalSize int64, list []ResourceSceneRes) *Resource } type ResourceSceneRes struct { - ID int64 - SceneName string - JobType JobType - IsExclusive bool - ExclusiveOrg string - Cluster string - AiCenterCode string - QueueCode string - QueueId int64 - ComputeResource string - AccCardType string - Specs []ResourceSpecWithSceneId + ID int64 + SceneName string + JobType JobType + IsExclusive bool + ExclusiveOrg string + Specs []ResourceSpecWithSceneId } func (ResourceSceneRes) TableName() string { @@ -104,6 +96,13 @@ type ResourceSpecWithSceneId struct { Status int UpdatedTime timeutil.TimeStamp SceneId int64 + //queue + Cluster string + AiCenterCode string + QueueCode string + QueueId int64 + ComputeResource string + AccCardType string } func (ResourceSpecWithSceneId) TableName() string { @@ -116,7 +115,7 @@ func InsertResourceScene(r ResourceSceneReq) error { //check specs := make([]ResourceSpecification, 0) - cond := builder.In("id", r.SpecIds).And(builder.Eq{"queue_id": r.QueueId}).And(builder.Eq{"status": SpecOnShelf}) + cond := builder.In("id", r.SpecIds).And(builder.Eq{"status": SpecOnShelf}) if err := sess.Where(cond).Find(&specs); err != nil { return err } @@ -129,7 +128,6 @@ func InsertResourceScene(r ResourceSceneReq) error { JobType: r.JobType, IsExclusive: r.IsExclusive, ExclusiveOrg: r.ExclusiveOrg, - QueueId: r.QueueId, CreatedBy: r.CreatorId, UpdatedBy: r.CreatorId, } @@ -176,7 +174,7 @@ func UpdateResourceScene(r ResourceSceneReq) error { } //check specification specs := make([]ResourceSpecification, 0) - cond := builder.In("id", r.SpecIds).And(builder.Eq{"queue_id": old.QueueId}).And(builder.Eq{"status": SpecOnShelf}) + cond := builder.In("id", r.SpecIds).And(builder.Eq{"status": SpecOnShelf}) if err := sess.Where(cond).Find(&specs); err != nil { return err } @@ -258,16 +256,20 @@ func SearchResourceScene(opts SearchResourceSceneOptions) (int64, []ResourceScen cond = cond.And(builder.Eq{"resource_scene.queue_id": opts.QueueId}) } cond = cond.And(builder.NewCond().Or(builder.Eq{"resource_scene.delete_time": 0}).Or(builder.IsNull{"resource_scene.delete_time"})) - count, err := x.Where(cond).Join("INNER", "resource_queue", "resource_queue.id = resource_scene.queue_id").Count(&ResourceSceneRes{}) + count, err := x.Where(cond). + Join("INNER", "resource_scene_spec", "resource_scene_spec.scene_id = resource_scene.id"). + Join("INNER", "resource_specification", "resource_specification.id = resource_scene_spec.spec_id"). + Join("INNER", "resource_queue", "resource_queue.id = resource_specification.queue_id").Count(&ResourceSceneRes{}) if err != nil { return 0, nil, err } cols := []string{"resource_scene.id", "resource_scene.scene_name", "resource_scene.job_type", "resource_scene.is_exclusive", - "resource_scene.exclusive_org", "resource_queue.cluster", "resource_queue.ai_center_code", "resource_queue.acc_card_type", - "resource_queue.id as queue_id", "resource_queue.compute_resource", "resource_queue.queue_code"} + "resource_scene.exclusive_org"} r := make([]ResourceSceneRes, 0) if err = x.Where(cond).Cols(cols...). - Join("INNER", "resource_queue", "resource_queue.id = resource_scene.queue_id"). + Join("INNER", "resource_scene_spec", "resource_scene_spec.scene_id = resource_scene.id"). + Join("INNER", "resource_specification", "resource_specification.id = resource_scene_spec.spec_id"). + Join("INNER", "resource_queue", "resource_queue.id = resource_specification.queue_id"). Desc("resource_scene.id"). Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). Find(&r); err != nil { @@ -285,19 +287,18 @@ func SearchResourceScene(opts SearchResourceSceneOptions) (int64, []ResourceScen specs := make([]ResourceSpecWithSceneId, 0) - if err := x.Cols("resource_specification.id", - "resource_specification.source_spec_id", - "resource_specification.acc_cards_num", - "resource_specification.cpu_cores", - "resource_specification.mem_gi_b", - "resource_specification.gpu_mem_gi_b", - "resource_specification.share_mem_gi_b", - "resource_specification.unit_price", - "resource_specification.status", - "resource_specification.updated_time", - "resource_scene_spec.scene_id", + if err := x.Cols("resource_specification.id", "resource_specification.source_spec_id", + "resource_specification.acc_cards_num", "resource_specification.cpu_cores", + "resource_specification.mem_gi_b", "resource_specification.gpu_mem_gi_b", + "resource_specification.share_mem_gi_b", "resource_specification.unit_price", + "resource_specification.status", "resource_specification.updated_time", + "resource_scene_spec.scene_id", "resource_queue.cluster", + "resource_queue.ai_center_code", "resource_queue.acc_card_type", + "resource_queue.id as queue_id", "resource_queue.compute_resource", + "resource_queue.queue_code", ).In("resource_scene_spec.scene_id", sceneIds). Join("INNER", "resource_scene_spec", "resource_scene_spec.spec_id = resource_specification.id"). + Join("INNER", "resource_queue", "resource_queue.ID = resource_specification.queue_id"). OrderBy("resource_specification.acc_cards_num"). Find(&specs); err != nil { return 0, nil, err diff --git a/services/cloudbrain/resource/resource_queue.go b/services/cloudbrain/resource/resource_queue.go index ff3f00b69..202642d55 100644 --- a/services/cloudbrain/resource/resource_queue.go +++ b/services/cloudbrain/resource/resource_queue.go @@ -3,6 +3,8 @@ package resource import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/grampus" + "code.gitea.io/gitea/modules/log" + "fmt" "strings" ) @@ -106,6 +108,12 @@ func SyncGrampusQueue(doerId int64) error { } func SyncGrampusQueueAndSpecs() { + defer func() { + if err := recover(); err != nil { + combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2)) + log.Error("PANIC:", combinedErr) + } + }() SyncGrampusQueue(0) SyncGrampusSpecs(0) }