美文网首页
聊聊dbsync的Schedulable

聊聊dbsync的Schedulable

作者: go4it | 来源:发表于2021-04-22 23:13 被阅读0次

本文主要研究一下dbsync的Schedulable

Schedulable

//Schedulable represent an abstraction that can be schedule
type Schedulable struct {
    URL string
    ID  string
    *contract.Sync
    Schedule *contract.Schedule
    Status   string
    status   uint32
}

//NewSchedulableFromURL create a new scheduleable from URL
func NewSchedulableFromURL(URL string) (*Schedulable, error) {
    result := &Schedulable{}
    resource := url.NewResource(URL)
    err := resource.Decode(result)
    return result, err
}

Schedulable定义了URL、ID、*contract.Sync、Schedule、Status、status属性;NewSchedulableFromURL方法根据URL来创建Schedulable

Clone

func (s *Schedulable) Clone() *Schedulable {
    return &Schedulable{
        URL:      s.URL,
        ID:       s.ID,
        Sync:     s.Sync.Clone(),
        Schedule: s.Schedule,
        Status:   s.Status,
    }
}

Clone方法会复制一份Schedulable

Done

//Done return true if schedulable is not running
func (s *Schedulable) Done() {
    atomic.StoreUint32(&s.status, statusScheduled)
}

Done方法更新status为statusScheduled

IsRunning

//IsRunning return true if schedulable is running
func (s *Schedulable) IsRunning() bool {
    return atomic.LoadUint32(&s.status) == statusRunning
}

IsRunning方法更新status为statusRunning

ScheduleNexRun

//ScheduleNexRun schedules next run
func (s *Schedulable) ScheduleNexRun(baseTime time.Time) error {
    return s.Schedule.Next(baseTime)
}

ScheduleNexRun方法执行Schedule.Next(baseTime)

Init

//Init initializes scheduleable
func (s *Schedulable) Init() error {
    if s.ID == "" {
        s.ID = uRLToID(s.URL)
    }
    now := time.Now()
    if s.Schedule == nil {
        return nil
    }

    if s.Schedule.Frequency != nil && s.Schedule.Frequency.Value == 0 {
        s.Schedule.Frequency.Value = 1
    }
    if s.Schedule.NextRun == nil {
        if s.Schedule.Frequency != nil {
            s.Schedule.NextRun = &now
        } else {
            return s.Schedule.Next(now)
        }
    }
    return nil

}

Init方法执行Schedulable的初始化

Validate

//Validate checks if Schedulable is valid
func (s *Schedulable) Validate() error {
    if s.Schedule == nil {
        return fmt.Errorf("schedule was emtpy")
    }
    if s.Schedule.Frequency == nil && s.Schedule.At == nil {
        return fmt.Errorf("schedule.Frequency and schedule.At were emtpy")
    }
    if s.ID == "" {
        return fmt.Errorf("ID were emtpy")
    }
    return nil
}

Validate方法校验Schedule、Schedule.Frequency、Schedule.At、ID值

小结

dbsync的Schedulable定义了URL、ID、*contract.Sync、Schedule、Status、status属性,它提供了Clone、Done、IsRunning、ScheduleNexRun、Init、Validate方法。

doc

相关文章

  • 聊聊dbsync的Schedulable

    序 本文主要研究一下dbsync的Schedulable Schedulable Schedulable定义了UR...

  • 聊聊dbsync的Criterion

    序 本文主要研究一下dbsync的Criterion Criterion Criterion是一个fmt.Stri...

  • 聊聊dbsync的jobs

    序 本文主要研究一下dbsync的jobs Job Job方法定义了ID、Error、Status、Progres...

  • 使用Golang实现MySQL数据库之间的表同步

    代码库地址:https://github.com/cuckoopark/dbsync 这是用来实现两个MySQL数...

  • 聊聊…聊聊?

    世界不大,一座城市里,用高楼大厦圈出来的的圈子更小了… 心再大,也会被城市里喧嚣的汽笛压抑自己 不记得有多久没有好...

  • 聊聊聊

    今天主要的时间是和阿q过的,非常开心我们有了这么一次聊天! 我觉得自己不孤单了。我俩目前拥有的感情非常相似,是比较...

  • 聊聊聊出来的感情!

    刚好回学校那天晚上,我有个比赛,以此草草结束了聊天。等忙完,我吱了一声,就直接洗洗睡了,用行动加强自己的决心。 没...

  • 无聊聊聊

  • 聊聊,聊聊选择

    今早梦到一杯豆浆15元,我给自己的孩子买了一杯50元的奶茶,对她感叹“在我们那个年代一杯奶茶才10元”孩子问我那么...

  • 聊聊,聊聊闲时

    有段时间着了迷一样的看伍迪艾伦电影,印象最深的就是电影开场他一张大脸挤满了屏幕,絮絮叨叨两分钟,正片开始。 后来得...

网友评论

      本文标题:聊聊dbsync的Schedulable

      本文链接:https://www.haomeiwen.com/subject/cadqrltx.html