diff --git a/internal/db/models/dns/dns_task_dao.go b/internal/db/models/dns/dns_task_dao.go index 4b8b34a8..d7c94034 100644 --- a/internal/db/models/dns/dns_task_dao.go +++ b/internal/db/models/dns/dns_task_dao.go @@ -201,6 +201,27 @@ func (this *DNSTaskDAO) UpdateDNSTaskDone(tx *dbs.Tx, taskId int64, taskVersion return this.Save(tx, op) } +// GenerateVersion 生成最新的版本号 +func (this *DNSTaskDAO) GenerateVersion() int64 { + return time.Now().UnixNano() +} + +// UpdateClusterDNSTasksDone 设置所有集群任务完成 +func (this *DNSTaskDAO) UpdateClusterDNSTasksDone(tx *dbs.Tx, clusterId int64, maxVersion int64) error { + if clusterId <= 0 || maxVersion <= 0 { + return nil + } + + return this.Query(tx). + Attr("clusterId", clusterId). + Attr("isOk", false). + Lte("version", maxVersion). + Set("isDone", true). + Set("isOk", true). + Set("error", ""). + UpdateQuickly() +} + // DeleteDNSTasksWithClusterId 删除集群相关任务 func (this *DNSTaskDAO) DeleteDNSTasksWithClusterId(tx *dbs.Tx, clusterId int64) error { if clusterId <= 0 { diff --git a/internal/db/models/dns/dns_task_dao_test.go b/internal/db/models/dns/dns_task_dao_test.go index 17449080..5c8fcdee 100644 --- a/internal/db/models/dns/dns_task_dao_test.go +++ b/internal/db/models/dns/dns_task_dao_test.go @@ -1,17 +1,28 @@ -package dns +package dns_test import ( + "github.com/TeaOSLab/EdgeAPI/internal/db/models/dns" _ "github.com/go-sql-driver/mysql" _ "github.com/iwind/TeaGo/bootstrap" "github.com/iwind/TeaGo/dbs" "testing" + "time" ) func TestDNSTaskDAO_CreateDNSTask(t *testing.T) { dbs.NotifyReady() - err := SharedDNSTaskDAO.CreateDNSTask(nil, 1, 2, 3, 0, "cdn", "taskType") + err := dns.SharedDNSTaskDAO.CreateDNSTask(nil, 1, 2, 3, 0, "cdn", "taskType") if err != nil { t.Fatal(err) } t.Log("ok") } + +func TestDNSTaskDAO_UpdateClusterDNSTasksDone(t *testing.T) { + var dao = dns.NewDNSTaskDAO() + var tx *dbs.Tx + err := dao.UpdateClusterDNSTasksDone(tx, 46, time.Now().UnixNano()) + if err != nil { + t.Fatal(err) + } +} diff --git a/internal/rpc/services/service_dns_domain.go b/internal/rpc/services/service_dns_domain.go index 3161d0bd..416b8084 100644 --- a/internal/rpc/services/service_dns_domain.go +++ b/internal/rpc/services/service_dns_domain.go @@ -303,7 +303,24 @@ func (this *DNSDomainService) SyncDNSDomainData(ctx context.Context, req *pb.Syn if err != nil { return nil, err } - return this.syncClusterDNS(req) + + var latestVersion = dns.SharedDNSTaskDAO.GenerateVersion() + + resp, err := this.syncClusterDNS(req) + if err != nil { + return resp, err + } + + // 标记集群所有任务已完成 + if req.NodeClusterId > 0 && resp != nil && resp.IsOk { + var tx = this.NullTx() + err = dns.SharedDNSTaskDAO.UpdateClusterDNSTasksDone(tx, req.NodeClusterId, latestVersion) + if err != nil { + return resp, err + } + } + + return resp, err } // FindAllDNSDomainRoutes 查看支持的线路