Skip to content

Commit d1ef7e7

Browse files
author
Haihui.Wang
committed
Manual sync GitLab MR !2680
1 parent a0ccabb commit d1ef7e7

6 files changed

Lines changed: 276 additions & 0 deletions

File tree

_mocks/opencsg.com/csghub-server/builder/store/database/mock_ClusterInfoStore.go

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

_mocks/opencsg.com/csghub-server/component/mock_ClusterComponent.go

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

builder/store/database/cluster.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type ClusterInfoStore interface {
3838
UpdateClusterNodeByNode(ctx context.Context, node ClusterNode) error
3939
AddNodeOwnership(ctx context.Context, ownership ClusterNodeOwnership) error
4040
DeleteNodeOwnership(ctx context.Context, clusterNodeID int64) error
41+
DeleteClusterNodeByID(ctx context.Context, id int64) error
4142
GetNodeOwnership(ctx context.Context, clusterNodeID int64) (*ClusterNodeOwnership, error)
4243
GetNodeOwnershipByNameSpace(ctx context.Context, nameSpace string) ([]ClusterNodeOwnership, error)
4344
UpdateNodeOwnership(ctx context.Context, ownership ClusterNodeOwnership) error
@@ -507,6 +508,47 @@ func (s *clusterInfoStoreImpl) DeleteNodeOwnership(ctx context.Context, clusterN
507508
_, err := s.db.Operator.Core.NewDelete().Model(&ClusterNodeOwnership{}).Where("cluster_node_id = ?", clusterNodeID).Exec(ctx)
508509
return errorx.HandleDBError(err, nil)
509510
}
511+
func (s *clusterInfoStoreImpl) DeleteClusterNodeByID(ctx context.Context, id int64) error {
512+
err := s.db.Operator.Core.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error {
513+
var node ClusterNode
514+
err := tx.NewSelect().Model(&node).Where("id = ?", id).Scan(ctx)
515+
if err != nil {
516+
return err
517+
}
518+
clusterID := node.ClusterID
519+
_, err = tx.NewDelete().Model(&ClusterNodeOwnership{}).Where("cluster_node_id = ?", id).Exec(ctx)
520+
if err != nil {
521+
return err
522+
}
523+
524+
_, err = tx.NewDelete().Model(&ClusterNode{}).Where("id = ?", id).Exec(ctx)
525+
if err != nil {
526+
return err
527+
}
528+
529+
count, err := tx.NewSelect().Model(&ClusterNode{}).Where("cluster_id = ?", clusterID).Count(ctx)
530+
if err != nil {
531+
return err
532+
}
533+
if count < 1 {
534+
_, err = tx.NewDelete().Model(&ClusterInfo{}).Where("cluster_id = ?", clusterID).Exec(ctx)
535+
if err != nil {
536+
return err
537+
}
538+
_, err = tx.NewDelete().Model(&SpaceResource{}).Where("cluster_id = ?", clusterID).Exec(ctx)
539+
if err != nil {
540+
return err
541+
}
542+
}
543+
544+
return nil
545+
})
546+
547+
if err != nil {
548+
return errorx.HandleDBError(err, nil)
549+
}
550+
return nil
551+
}
510552

511553
func (s *clusterInfoStoreImpl) GetNodeOwnership(ctx context.Context, clusterNodeID int64) (*ClusterNodeOwnership, error) {
512554
var ownership ClusterNodeOwnership

builder/store/database/cluster_test.go

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,3 +624,138 @@ func TestClusterStore_ClusterNodeOperations(t *testing.T) {
624624
require.NoError(t, err)
625625
require.Nil(t, deletedOwnership)
626626
}
627+
628+
func TestClusterStore_DeleteClusterNodeByID_NotLastNode(t *testing.T) {
629+
db := tests.InitTestDB()
630+
defer db.Close()
631+
ctx := context.TODO()
632+
633+
store := database.NewClusterInfoStoreWithDB(db)
634+
635+
cluster, err := store.Add(ctx, "config-delete-not-last", "region-1", types.ConnectModeKubeConfig)
636+
require.NoError(t, err)
637+
638+
node1 := &database.ClusterNode{
639+
ClusterID: cluster.ClusterID,
640+
Name: "node-1",
641+
Status: "Ready",
642+
}
643+
_, err = db.Core.NewInsert().Model(node1).Exec(ctx)
644+
require.NoError(t, err)
645+
646+
node2 := &database.ClusterNode{
647+
ClusterID: cluster.ClusterID,
648+
Name: "node-2",
649+
Status: "Ready",
650+
}
651+
_, err = db.Core.NewInsert().Model(node2).Exec(ctx)
652+
require.NoError(t, err)
653+
654+
ownership := database.ClusterNodeOwnership{
655+
ClusterNodeID: node1.ID,
656+
ClusterID: cluster.ClusterID,
657+
Namespace: "ns-1",
658+
}
659+
err = store.AddNodeOwnership(ctx, ownership)
660+
require.NoError(t, err)
661+
662+
sr := &database.SpaceResource{
663+
Name: "resource-1",
664+
Resources: "{}",
665+
ClusterID: cluster.ClusterID,
666+
}
667+
_, err = db.Core.NewInsert().Model(sr).Exec(ctx)
668+
require.NoError(t, err)
669+
670+
err = store.DeleteClusterNodeByID(ctx, node1.ID)
671+
require.NoError(t, err)
672+
673+
_, err = store.GetClusterNodeByID(ctx, node1.ID)
674+
require.Error(t, err)
675+
676+
fetchedOwnership, err := store.GetNodeOwnership(ctx, node1.ID)
677+
require.NoError(t, err)
678+
require.Nil(t, fetchedOwnership)
679+
680+
nodes, err := store.FindNodeByClusterID(ctx, cluster.ClusterID)
681+
require.NoError(t, err)
682+
require.Len(t, nodes, 1)
683+
require.Equal(t, node2.ID, nodes[0].ID)
684+
685+
existingCluster, err := store.ByClusterID(ctx, cluster.ClusterID)
686+
require.NoError(t, err)
687+
require.Equal(t, cluster.ClusterID, existingCluster.ClusterID)
688+
689+
var remainingSR []database.SpaceResource
690+
err = db.Core.NewSelect().Model(&remainingSR).Where("cluster_id = ?", cluster.ClusterID).Scan(ctx)
691+
require.NoError(t, err)
692+
require.Len(t, remainingSR, 1)
693+
}
694+
695+
func TestClusterStore_DeleteClusterNodeByID_LastNode(t *testing.T) {
696+
db := tests.InitTestDB()
697+
defer db.Close()
698+
ctx := context.TODO()
699+
700+
store := database.NewClusterInfoStoreWithDB(db)
701+
702+
cluster, err := store.Add(ctx, "config-delete-last", "region-1", types.ConnectModeKubeConfig)
703+
require.NoError(t, err)
704+
705+
node := &database.ClusterNode{
706+
ClusterID: cluster.ClusterID,
707+
Name: "node-only",
708+
Status: "Ready",
709+
}
710+
_, err = db.Core.NewInsert().Model(node).Exec(ctx)
711+
require.NoError(t, err)
712+
713+
ownership := database.ClusterNodeOwnership{
714+
ClusterNodeID: node.ID,
715+
ClusterID: cluster.ClusterID,
716+
Namespace: "ns-1",
717+
}
718+
err = store.AddNodeOwnership(ctx, ownership)
719+
require.NoError(t, err)
720+
721+
sr := &database.SpaceResource{
722+
Name: "resource-1",
723+
Resources: "{}",
724+
ClusterID: cluster.ClusterID,
725+
}
726+
_, err = db.Core.NewInsert().Model(sr).Exec(ctx)
727+
require.NoError(t, err)
728+
729+
err = store.DeleteClusterNodeByID(ctx, node.ID)
730+
require.NoError(t, err)
731+
732+
_, err = store.GetClusterNodeByID(ctx, node.ID)
733+
require.Error(t, err)
734+
735+
fetchedOwnership, err := store.GetNodeOwnership(ctx, node.ID)
736+
require.NoError(t, err)
737+
require.Nil(t, fetchedOwnership)
738+
739+
nodes, err := store.FindNodeByClusterID(ctx, cluster.ClusterID)
740+
require.NoError(t, err)
741+
require.Len(t, nodes, 0)
742+
743+
_, err = store.ByClusterID(ctx, cluster.ClusterID)
744+
require.Error(t, err)
745+
746+
var remainingSR []database.SpaceResource
747+
err = db.Core.NewSelect().Model(&remainingSR).Where("cluster_id = ?", cluster.ClusterID).Scan(ctx)
748+
require.NoError(t, err)
749+
require.Len(t, remainingSR, 0)
750+
}
751+
752+
func TestClusterStore_DeleteClusterNodeByID_NonExistentNode(t *testing.T) {
753+
db := tests.InitTestDB()
754+
defer db.Close()
755+
ctx := context.TODO()
756+
757+
store := database.NewClusterInfoStoreWithDB(db)
758+
759+
err := store.DeleteClusterNodeByID(ctx, 99999)
760+
require.Error(t, err)
761+
}

component/cluster.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type ClusterComponent interface {
4040
GetWorkflowsByTimeRangeStream(ctx context.Context, req types.WorkflowTimeRangeReq) (<-chan []string, <-chan error)
4141
StopDeploy(ctx context.Context, stopReq types.DeployActReq) error
4242
StopWorkflow(ctx context.Context, stopReq types.ArgoWorkFlowDeleteReq) error
43+
DeleteClusterNode(ctx context.Context, id int64) error
4344
}
4445

4546
func NewClusterComponent(config *config.Config) (ClusterComponent, error) {

component/cluster_ce.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,7 @@ func (c *clusterComponentImpl) StopDeploy(ctx context.Context, stopReq types.Dep
7676
func (c *clusterComponentImpl) StopWorkflow(ctx context.Context, stopReq types.ArgoWorkFlowDeleteReq) error {
7777
return nil
7878
}
79+
80+
func (c *clusterComponentImpl) DeleteClusterNode(ctx context.Context, id int64) error {
81+
return nil
82+
}

0 commit comments

Comments
 (0)