| 449 | } |
| 450 | |
| 451 | func (s *Topom) SyncCreateAction(addr string) error { |
| 452 | s.mu.Lock() |
| 453 | defer s.mu.Unlock() |
| 454 | ctx, err := s.newContext() |
| 455 | if err != nil { |
| 456 | return err |
| 457 | } |
| 458 | |
| 459 | g, index, err := ctx.getGroupByServer(addr) |
| 460 | if err != nil { |
| 461 | return err |
| 462 | } |
| 463 | if g.Promoting.State != models.ActionNothing { |
| 464 | return errors.Errorf("group-[%d] is promoting", g.Id) |
| 465 | } |
| 466 | |
| 467 | if g.Servers[index].Action.State == models.ActionPending { |
| 468 | return errors.Errorf("server-[%s] action already exist", addr) |
| 469 | } |
| 470 | defer s.dirtyGroupCache(g.Id) |
| 471 | |
| 472 | g.Servers[index].Action.Index = ctx.maxSyncActionIndex() + 1 |
| 473 | g.Servers[index].Action.State = models.ActionPending |
| 474 | return s.storeUpdateGroup(g) |
| 475 | } |
| 476 | |
| 477 | func (s *Topom) SyncRemoveAction(addr string) error { |
| 478 | s.mu.Lock() |