| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package server
- import (
- "github.com/coreos/etcd/log"
- "github.com/coreos/etcd/third_party/github.com/coreos/raft"
- )
- func init() {
- raft.RegisterCommand(&DemoteCommand{})
- }
- // DemoteCommand represents a command to change a peer to a proxy.
- type DemoteCommand struct {
- Name string `json:"name"`
- }
- // CommandName returns the name of the command.
- func (c *DemoteCommand) CommandName() string {
- return "etcd:demote"
- }
- // Apply executes the command.
- func (c *DemoteCommand) Apply(context raft.Context) (interface{}, error) {
- ps, _ := context.Server().Context().(*PeerServer)
- // Save URLs.
- clientURL, _ := ps.registry.ClientURL(c.Name)
- peerURL, _ := ps.registry.PeerURL(c.Name)
- // Perform a removal.
- (&RemoveCommand{Name: c.Name}).Apply(context)
- // Register node as a proxy.
- ps.registry.RegisterProxy(c.Name, peerURL, clientURL)
- // Update mode if this change applies to this server.
- if c.Name == ps.Config.Name {
- log.Infof("Set mode after demotion: %s", c.Name)
- ps.SetMode(ProxyMode)
- }
- return nil, nil
- }
- // NodeName returns the name of the affected node.
- func (c *DemoteCommand) NodeName() string {
- return c.Name
- }
|