Skip to content

Commit

Permalink
Merge pull request #383 from 0xff-dev/main
Browse files Browse the repository at this point in the history
fix: check if the resource is in deletion
  • Loading branch information
bjwswang authored Dec 18, 2023
2 parents 62ea64b + 3ad9182 commit 7c9937d
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 11 deletions.
45 changes: 45 additions & 0 deletions apiserver/pkg/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"k8s.io/client-go/dynamic"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/kubeagi/arcadia/api/base/v1alpha1"
"github.com/kubeagi/arcadia/apiserver/graph/generated"
"github.com/kubeagi/arcadia/pkg/config"
"github.com/kubeagi/arcadia/pkg/datasource"
Expand Down Expand Up @@ -91,3 +92,47 @@ func GetAPIServer(ctx context.Context, dynamicClient dynamic.Interface, external
}
return api, nil
}

// GetObjStatus is used to calculate the state of the resource, unified management,
// in general, a resource will only record its own state,
// then the state calculation of this resource, should be written to this function.
// But for some special resources. For example, VersionedDataset,
// he needs to calculate multiple states, it is not suitable for this function.
func GetObjStatus(obj client.Object) string {
if obj == nil {
return ""
}
if obj.GetDeletionTimestamp() != nil {
return "Deleting"
}

var (
condition v1alpha1.Condition
)
switch obj.GetObjectKind().GroupVersionKind().Kind {
case "Datasource":
v := obj.(*v1alpha1.Datasource)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
case "Embedder":
v := obj.(*v1alpha1.Embedder)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
case "KnowledgeBase":
v := obj.(*v1alpha1.KnowledgeBase)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
case "LLM":
v := obj.(*v1alpha1.LLM)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
case "Model":
v := obj.(*v1alpha1.Model)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
case "Worker":
// Worker can better represent the state of resources through Reason.
v := obj.(*v1alpha1.Worker)
condition = v.Status.GetCondition(v1alpha1.TypeReady)
return string(condition.Reason)
default:
return ""
}

return string(condition.Status)
}
2 changes: 1 addition & 1 deletion apiserver/pkg/datasource/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ func datasource2model(obj *unstructured.Unstructured) *generated.Datasource {
// conditioned status
condition := datasource.Status.GetCondition(v1alpha1.TypeReady)
updateTime := condition.LastTransitionTime.Time
status := string(condition.Status)
message := string(condition.Message)
status := common.GetObjStatus(datasource)

// parse endpoint
endpoint := generated.Endpoint{
Expand Down
2 changes: 1 addition & 1 deletion apiserver/pkg/embedder/embedder.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func embedder2model(ctx context.Context, c dynamic.Interface, obj *unstructured.
// conditioned status
condition := embedder.Status.GetCondition(v1alpha1.TypeReady)
updateTime := condition.LastTransitionTime.Time
status := string(condition.Status)
status := common.GetObjStatus(embedder)
message := string(condition.Message)

// provider type
Expand Down
3 changes: 2 additions & 1 deletion apiserver/pkg/knowledgebase/knowledgebase.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (

"github.com/kubeagi/arcadia/api/base/v1alpha1"
"github.com/kubeagi/arcadia/apiserver/graph/generated"
"github.com/kubeagi/arcadia/apiserver/pkg/common"
graphqlutils "github.com/kubeagi/arcadia/apiserver/pkg/utils"
"github.com/kubeagi/arcadia/pkg/utils"
)
Expand All @@ -45,7 +46,7 @@ func knowledgebase2model(obj *unstructured.Unstructured) *generated.KnowledgeBas

// conditioned status
condition := knowledgebase.Status.GetCondition(v1alpha1.TypeReady)
status := string(condition.Status)
status := common.GetObjStatus(knowledgebase)
reason := string(condition.Reason)
message := condition.Message

Expand Down
2 changes: 1 addition & 1 deletion apiserver/pkg/llm/llm.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func unstructured2LLM(ctx context.Context, c dynamic.Interface, obj *unstructure
// conditioned status
condition := llm.Status.GetCondition(v1alpha1.TypeReady)
updateTime := condition.LastTransitionTime.Time
status := string(condition.Status)
status := common.GetObjStatus(llm)
message := string(condition.Message)

llmType := string(llm.Spec.Type)
Expand Down
2 changes: 1 addition & 1 deletion apiserver/pkg/model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func obj2model(obj *unstructured.Unstructured) *generated.Model {
// conditioned status
condition := model.Status.GetCondition(v1alpha1.TypeReady)
updateTime := condition.LastTransitionTime.Time
status := string(condition.Status)
status := common.GetObjStatus(model)
message := string(condition.Message)

var systemModel bool
Expand Down
12 changes: 7 additions & 5 deletions apiserver/pkg/versioneddataset/versioned_dataset.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,16 +74,15 @@ func versionedDataset2model(obj *unstructured.Unstructured) (*generated.Versione
vds.UpdateTimestamp = &now

vds.Version = versioneddataset.Spec.Version

vds.SyncStatus = new(string)
vds.DataProcessStatus = new(string)
first := true
for _, cond := range versioneddataset.Status.Conditions {
if cond.Type == v1alpha1.TypeReady {
syncStatus := string(cond.Reason)
vds.SyncStatus = &syncStatus
*vds.SyncStatus = string(cond.Reason)
}
if cond.Type == v1alpha1.TypeDataProcessing {
dataProcessStatus := string(cond.Reason)
vds.DataProcessStatus = &dataProcessStatus
*vds.DataProcessStatus = string(cond.Reason)
}
if !cond.LastTransitionTime.IsZero() {
if first || vds.UpdateTimestamp.Before(cond.LastSuccessfulTime.Time) {
Expand All @@ -93,6 +92,9 @@ func versionedDataset2model(obj *unstructured.Unstructured) (*generated.Versione
}
}

if s := common.GetObjStatus(obj); s != "" {
*vds.SyncStatus = s
}
vds.Released = int(versioneddataset.Spec.Released)
return vds, nil
}
Expand Down
2 changes: 1 addition & 1 deletion apiserver/pkg/worker/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func worker2model(ctx context.Context, c dynamic.Interface, obj *unstructured.Un
updateTime := condition.LastTransitionTime.Time

// Unknown,Pending ,Running ,Error
status := string(condition.Reason)
status := common.GetObjStatus(worker)

// resources
cpu := worker.Spec.Resources.Limits[v1.ResourceCPU]
Expand Down

0 comments on commit 7c9937d

Please sign in to comment.