add set-coordinator endpoint

This commit is contained in:
Travis Turner 2017-11-15 09:06:07 -06:00
parent d741649d00
commit 426992bc59
No known key found for this signature in database
GPG key ID: 7F08008DFD9314C9
8 changed files with 384 additions and 76 deletions

View file

@ -125,6 +125,7 @@ const (
MessageTypeClusterStatus = 9
MessageTypeResizeInstruction = 10
MessageTypeResizeInstructionComplete = 11
MessageTypeSetCoordinator = 12
)
// MarshalMessage encodes the protobuf message into a byte slice.
@ -153,6 +154,8 @@ func MarshalMessage(m proto.Message) ([]byte, error) {
typ = MessageTypeResizeInstruction
case *internal.ResizeInstructionComplete:
typ = MessageTypeResizeInstructionComplete
case *internal.SetCoordinatorMessage:
typ = MessageTypeSetCoordinator
default:
return nil, fmt.Errorf("message type not implemented for marshalling: %s", reflect.TypeOf(obj))
}
@ -191,6 +194,8 @@ func UnmarshalMessage(buf []byte) (proto.Message, error) {
m = &internal.ResizeInstruction{}
case MessageTypeResizeInstructionComplete:
m = &internal.ResizeInstructionComplete{}
case MessageTypeSetCoordinator:
m = &internal.SetCoordinatorMessage{}
default:
return nil, fmt.Errorf("invalid message type: %d", typ)
}

View file

@ -200,6 +200,16 @@ func (c *Cluster) IsCoordinator() bool {
return c.Coordinator == c.URI
}
// SetCoordinator updates the Coordinator to new if it is
// currently old. Returns true if the Coordinator changed.
func (c *Cluster) SetCoordinator(oldURI, newURI URI) bool {
if c.Coordinator == oldURI && oldURI != newURI {
c.Coordinator = newURI
return true
}
return false
}
// AddNode adds a node to the Cluster and updates and saves the
// new topology.
func (c *Cluster) AddNode(uri URI) error {

View file

@ -305,7 +305,7 @@ func TestCluster_Resize(t *testing.T) {
})
}
// TestTestCluster ensures that general cluster functionality works as expected.
// Ensure that general cluster functionality works as expected.
func TestCluster_ResizeStates(t *testing.T) {
t.Run("Single node, no data", func(t *testing.T) {
@ -538,3 +538,32 @@ func TestCluster_ResizeStates(t *testing.T) {
}
})
}
// Ensures that coordinator can be changed.
func TestCluster_SetCoordinator(t *testing.T) {
t.Run("SetCoordinator", func(t *testing.T) {
c := test.NewCluster(1)
oldURI, err := pilosa.NewURIFromAddress("localhost:8888")
if err != nil {
t.Fatal(err)
}
c.Coordinator = *oldURI
newURI, err := pilosa.NewURIFromAddress("localhost:9999")
if err != nil {
t.Fatal(err)
}
// Set coordinator to the same value.
c.SetCoordinator(c.Coordinator, *oldURI)
if c.Coordinator != *oldURI {
t.Errorf("expected coordinator: %s, but got: %s", c.Coordinator, *oldURI)
}
// Set coordinator to a new value.
c.SetCoordinator(c.Coordinator, *newURI)
if c.Coordinator != *newURI {
t.Errorf("expected coordinator: %s, but got: %s", c.Coordinator, *newURI)
}
})
}

View file

@ -123,6 +123,7 @@ func (h *Handler) SetRestricted() {
}
func loadCommon(router *mux.Router, handler *Handler) {
router.HandleFunc("/cluster/resize/set-coordinator", handler.handlePostClusterResizeSetCoordinator).Methods("POST")
router.HandleFunc("/schema", handler.handleGetSchema).Methods("GET")
router.HandleFunc("/status", handler.handleGetStatus).Methods("GET")
router.HandleFunc("/version", handler.handleGetVersion).Methods("GET")
@ -140,7 +141,6 @@ func loadRestricted(router *mux.Router, handler *Handler) {
func loadNormal(router *mux.Router, handler *Handler) {
router.HandleFunc("/assets/{file}", handler.handleWebUI).Methods("GET")
router.HandleFunc("/cluster/resize/abort", handler.handlePostClusterResizeAbort).Methods("POST")
router.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux).Methods("GET")
router.HandleFunc("/debug/vars", handler.handleExpvar).Methods("GET")
router.HandleFunc("/export", handler.handleGetExport).Methods("GET")
@ -1927,7 +1927,67 @@ func (h *Handler) handlePostInput(w http.ResponseWriter, r *http.Request) {
}
}
//handlePostClusterResizeAbort handles POST /cluster/resize/abort request.
// handlePostClusterResizeSetCoordinator handles POST /cluster/resize/set-coordinator request.
func (h *Handler) handlePostClusterResizeSetCoordinator(w http.ResponseWriter, r *http.Request) {
// Decode request.
var req setCoordinatorRequest
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
oldURI := h.Cluster.Coordinator
var newURI *URI
if err := func() error {
newURI, err = NewURIFromAddress(req.Address)
if err != nil {
return fmt.Errorf("problem with set-coordinator address: %s", err)
}
//if !Nodes(h.Cluster.Nodes).ContainsURI(*newURI) {
// return fmt.Errorf("set-coordinator node does not exist: %s", newURI)
//}
// Send the set-coordinator message to all nodes.
err := h.Broadcaster.SendSync(
&internal.SetCoordinatorMessage{
Old: (&h.Cluster.Coordinator).Encode(),
New: newURI.Encode(),
})
if err != nil {
return fmt.Errorf("problem sending SetCoordinator message: %s", err)
}
// Set Coordinator on local node.
h.Cluster.SetCoordinator(oldURI, *newURI)
return nil
}(); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Encode response.
if err := json.NewEncoder(w).Encode(setCoordinatorResponse{
Old: &oldURI,
New: newURI,
}); err != nil {
h.logger().Printf("response encoding error: %s", err)
}
}
type setCoordinatorRequest struct {
Address string `json:"address"`
}
type setCoordinatorResponse struct {
Old *URI `json:"old"`
New *URI `json:"new"`
}
// handlePostClusterResizeAbort handles POST /cluster/resize/abort request.
func (h *Handler) handlePostClusterResizeAbort(w http.ResponseWriter, r *http.Request) {
var msg string

View file

@ -158,6 +158,7 @@ func TestHandler_ClusterResizeAbort(t *testing.T) {
t.Run("No resize job", func(t *testing.T) {
h := test.NewHandler()
h.Cluster = test.NewCluster(1)
h.SetRestricted()
w := httptest.NewRecorder()
h.ServeHTTP(w, test.MustNewHTTPRequest("POST", "/cluster/resize/abort", nil))

View file

@ -36,6 +36,7 @@
ResizeInstruction
ResizeSource
ResizeInstructionComplete
SetCoordinatorMessage
Topology
*/
package internal
@ -927,6 +928,30 @@ func (m *ResizeInstructionComplete) GetError() string {
return ""
}
type SetCoordinatorMessage struct {
Old *URI `protobuf:"bytes,1,opt,name=Old" json:"Old,omitempty"`
New *URI `protobuf:"bytes,2,opt,name=New" json:"New,omitempty"`
}
func (m *SetCoordinatorMessage) Reset() { *m = SetCoordinatorMessage{} }
func (m *SetCoordinatorMessage) String() string { return proto.CompactTextString(m) }
func (*SetCoordinatorMessage) ProtoMessage() {}
func (*SetCoordinatorMessage) Descriptor() ([]byte, []int) { return fileDescriptorPrivate, []int{28} }
func (m *SetCoordinatorMessage) GetOld() *URI {
if m != nil {
return m.Old
}
return nil
}
func (m *SetCoordinatorMessage) GetNew() *URI {
if m != nil {
return m.New
}
return nil
}
type Topology struct {
NodeSet []*URI `protobuf:"bytes,1,rep,name=NodeSet" json:"NodeSet,omitempty"`
}
@ -934,7 +959,7 @@ type Topology struct {
func (m *Topology) Reset() { *m = Topology{} }
func (m *Topology) String() string { return proto.CompactTextString(m) }
func (*Topology) ProtoMessage() {}
func (*Topology) Descriptor() ([]byte, []int) { return fileDescriptorPrivate, []int{28} }
func (*Topology) Descriptor() ([]byte, []int) { return fileDescriptorPrivate, []int{29} }
func (m *Topology) GetNodeSet() []*URI {
if m != nil {
@ -972,6 +997,7 @@ func init() {
proto.RegisterType((*ResizeInstruction)(nil), "internal.ResizeInstruction")
proto.RegisterType((*ResizeSource)(nil), "internal.ResizeSource")
proto.RegisterType((*ResizeInstructionComplete)(nil), "internal.ResizeInstructionComplete")
proto.RegisterType((*SetCoordinatorMessage)(nil), "internal.SetCoordinatorMessage")
proto.RegisterType((*Topology)(nil), "internal.Topology")
}
func (m *IndexMeta) Marshal() (dAtA []byte, err error) {
@ -2137,6 +2163,44 @@ func (m *ResizeInstructionComplete) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *SetCoordinatorMessage) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *SetCoordinatorMessage) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if m.Old != nil {
dAtA[i] = 0xa
i++
i = encodeVarintPrivate(dAtA, i, uint64(m.Old.Size()))
n19, err := m.Old.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n19
}
if m.New != nil {
dAtA[i] = 0x12
i++
i = encodeVarintPrivate(dAtA, i, uint64(m.New.Size()))
n20, err := m.New.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n20
}
return i, nil
}
func (m *Topology) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -2690,6 +2754,20 @@ func (m *ResizeInstructionComplete) Size() (n int) {
return n
}
func (m *SetCoordinatorMessage) Size() (n int) {
var l int
_ = l
if m.Old != nil {
l = m.Old.Size()
n += 1 + l + sovPrivate(uint64(l))
}
if m.New != nil {
l = m.New.Size()
n += 1 + l + sovPrivate(uint64(l))
}
return n
}
func (m *Topology) Size() (n int) {
var l int
_ = l
@ -6688,6 +6766,122 @@ func (m *ResizeInstructionComplete) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *SetCoordinatorMessage) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPrivate
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: SetCoordinatorMessage: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: SetCoordinatorMessage: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Old", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPrivate
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthPrivate
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Old == nil {
m.Old = &URI{}
}
if err := m.Old.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field New", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPrivate
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthPrivate
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.New == nil {
m.New = &URI{}
}
if err := m.New.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipPrivate(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthPrivate
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *Topology) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@ -6877,77 +7071,79 @@ var (
func init() { proto.RegisterFile("private.proto", fileDescriptorPrivate) }
var fileDescriptorPrivate = []byte{
// 1149 bytes of a gzipped FileDescriptorProto
// 1179 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4f, 0x6f, 0xe3, 0x44,
0x14, 0xc7, 0x71, 0x92, 0x26, 0x2f, 0xcd, 0x36, 0x1d, 0x4a, 0x95, 0x56, 0x55, 0x36, 0xcc, 0x81,
0x96, 0x95, 0x28, 0xd0, 0x4a, 0x08, 0x8a, 0x90, 0x60, 0x9b, 0xac, 0xd6, 0x40, 0xcb, 0x32, 0xe9,
0x2e, 0x12, 0x07, 0xa4, 0x69, 0x32, 0xb4, 0x56, 0x1d, 0x3b, 0xd8, 0x93, 0xb6, 0xd9, 0x03, 0x37,
0x38, 0xc0, 0x17, 0xe0, 0xce, 0x97, 0xe1, 0xc8, 0x8d, 0x2b, 0x2a, 0x1f, 0x02, 0x89, 0x0b, 0xab,
0x79, 0x9e, 0xb1, 0x9d, 0x7f, 0x8d, 0xda, 0x9b, 0xdf, 0x9b, 0xf7, 0xde, 0xfc, 0xe6, 0xf7, 0xfe,
0xcc, 0x18, 0xaa, 0x83, 0xd0, 0xbd, 0xe4, 0x52, 0xec, 0x0e, 0xc2, 0x40, 0x06, 0xa4, 0xe4, 0xfa,
0x52, 0x84, 0x3e, 0xf7, 0xe8, 0x57, 0x50, 0x76, 0xfc, 0x9e, 0xb8, 0x3e, 0x12, 0x92, 0x93, 0x26,
0x54, 0x0e, 0x03, 0x6f, 0xd8, 0xf7, 0xbf, 0xe4, 0xa7, 0xc2, 0xab, 0x5b, 0x4d, 0x6b, 0xa7, 0xcc,
0xb2, 0x2a, 0x65, 0x71, 0xe2, 0xf6, 0xc5, 0xd7, 0x43, 0xee, 0xcb, 0x61, 0xbf, 0x9e, 0x8b, 0x2d,
0x32, 0x2a, 0xfa, 0x9f, 0x05, 0xe5, 0x27, 0x21, 0xef, 0x0b, 0x8c, 0xb8, 0x09, 0x25, 0x16, 0x5c,
0x65, 0xc3, 0x25, 0x32, 0x79, 0x0b, 0x1e, 0x38, 0xfe, 0xa5, 0x08, 0x23, 0xd1, 0xf6, 0xf9, 0xa9,
0x27, 0x7a, 0x18, 0xae, 0xc4, 0x26, 0xb4, 0x64, 0x0b, 0xca, 0x87, 0xbc, 0x7b, 0x2e, 0x4e, 0x46,
0x03, 0x51, 0xb7, 0x31, 0x48, 0xaa, 0x48, 0x56, 0x3b, 0xee, 0x4b, 0x51, 0xcf, 0x37, 0xad, 0x9d,
0x2a, 0x4b, 0x15, 0x93, 0x78, 0x0b, 0x53, 0x78, 0x09, 0x85, 0x65, 0xc6, 0xfd, 0xb3, 0x04, 0x43,
0x11, 0x31, 0x8c, 0xe9, 0xc8, 0x36, 0x14, 0x9f, 0xb8, 0xc2, 0xeb, 0x45, 0xf5, 0xa5, 0xa6, 0xbd,
0x53, 0xd9, 0x5b, 0xd9, 0x35, 0xfc, 0xed, 0xa2, 0x9e, 0xe9, 0x65, 0x4a, 0xe1, 0x81, 0xd3, 0x1f,
0x04, 0xa1, 0x64, 0x22, 0x1a, 0x04, 0x7e, 0x24, 0x48, 0x0d, 0xec, 0x76, 0x18, 0xea, 0xb3, 0xab,
0x4f, 0xfa, 0x23, 0xd4, 0x1e, 0x7b, 0x41, 0xf7, 0xa2, 0xc5, 0x25, 0x67, 0xe2, 0x87, 0xa1, 0x88,
0x24, 0x59, 0x83, 0x02, 0x66, 0x41, 0xdb, 0xc5, 0x82, 0xd2, 0x22, 0x93, 0x9a, 0xe6, 0x58, 0x50,
0x5a, 0xf4, 0x47, 0x2a, 0xf2, 0x2c, 0x16, 0x94, 0xb6, 0xe3, 0xb9, 0xdd, 0x98, 0x82, 0x3c, 0x8b,
0x05, 0x42, 0x20, 0xff, 0xc2, 0x15, 0x57, 0xfa, 0xdc, 0xf8, 0x4d, 0x1d, 0x58, 0xcd, 0xec, 0xaf,
0x61, 0xae, 0x43, 0x91, 0x05, 0x57, 0x4e, 0x2b, 0xaa, 0x5b, 0x4d, 0x7b, 0x27, 0xcf, 0xb4, 0x84,
0xec, 0x62, 0xfa, 0xd5, 0x52, 0x0e, 0x97, 0x52, 0x05, 0xdd, 0x80, 0x02, 0x52, 0xad, 0x4e, 0x99,
0xfa, 0xaa, 0x4f, 0xfa, 0xbf, 0x05, 0xe5, 0x23, 0x7e, 0x8d, 0x30, 0x22, 0xf2, 0x09, 0x94, 0x3a,
0x92, 0xfb, 0x3d, 0x1e, 0xf6, 0xd0, 0xa8, 0xb2, 0xf7, 0x66, 0x4a, 0x61, 0x62, 0xb6, 0x6b, 0x6c,
0xda, 0xbe, 0x0c, 0x47, 0x2c, 0x71, 0x21, 0x07, 0xb0, 0xa4, 0x6b, 0x02, 0x31, 0x54, 0xf6, 0x9a,
0xb3, 0xbc, 0x93, 0xb2, 0x51, 0xce, 0xc6, 0x61, 0xf3, 0x63, 0xa8, 0x8e, 0x85, 0x55, 0x58, 0x2f,
0xc4, 0xc8, 0x64, 0xe4, 0x42, 0x8c, 0x14, 0x77, 0x97, 0xdc, 0x1b, 0xc6, 0x3c, 0xe7, 0x59, 0x2c,
0x1c, 0xe4, 0x3e, 0xb4, 0x36, 0x0f, 0x60, 0x39, 0x1b, 0xf5, 0x2e, 0xbe, 0xf4, 0x3b, 0x20, 0x87,
0xa1, 0xe0, 0x52, 0x20, 0xbc, 0x23, 0x11, 0x45, 0xfc, 0x4c, 0xcc, 0xcf, 0x74, 0x9c, 0xbd, 0x5c,
0x36, 0x7b, 0x5b, 0x50, 0x76, 0x22, 0x73, 0x70, 0x1b, 0xeb, 0x32, 0x55, 0xd0, 0x47, 0x40, 0x5a,
0xc2, 0x13, 0x52, 0xe8, 0xfe, 0xbd, 0x25, 0x3e, 0xed, 0x18, 0x2c, 0x8b, 0x6d, 0xc9, 0x36, 0xe4,
0x55, 0xeb, 0x22, 0x94, 0xca, 0xde, 0xeb, 0x29, 0xd3, 0xc9, 0x9c, 0x60, 0x68, 0x40, 0x5d, 0x13,
0x54, 0xb7, 0xfb, 0x82, 0x03, 0xce, 0x28, 0x65, 0xb3, 0x95, 0x3d, 0xb9, 0x55, 0x32, 0x40, 0xf4,
0x56, 0x9f, 0x9a, 0xb3, 0xde, 0x77, 0x2b, 0xfa, 0xad, 0xd6, 0xaa, 0x96, 0x38, 0x56, 0xab, 0xb1,
0x0f, 0x7e, 0xcf, 0x3f, 0xf2, 0x04, 0x0e, 0x15, 0x5b, 0xf5, 0x50, 0x54, 0xb7, 0x9b, 0xb6, 0x8a,
0x8d, 0x02, 0xdd, 0x87, 0x62, 0xa7, 0x7b, 0x2e, 0xfa, 0x9c, 0xbc, 0xad, 0x0a, 0xb5, 0x27, 0xae,
0x45, 0xa4, 0xcb, 0x7c, 0x65, 0x82, 0x3e, 0x66, 0xd6, 0xe9, 0xaf, 0x96, 0x46, 0x3f, 0x07, 0x51,
0x11, 0xf7, 0x8e, 0xea, 0xf9, 0xa9, 0x89, 0xa3, 0xf4, 0x4c, 0x2f, 0x93, 0x36, 0xd4, 0x1c, 0x7f,
0x30, 0x94, 0x2d, 0xf1, 0xbd, 0xeb, 0xbb, 0xd2, 0x0d, 0xfc, 0xa8, 0x5e, 0x44, 0x97, 0x8d, 0xec,
0xd6, 0x63, 0x16, 0x6c, 0xca, 0x85, 0xfe, 0x6c, 0xc1, 0xca, 0x84, 0x72, 0x01, 0xae, 0xdc, 0xed,
0xb8, 0x3e, 0x48, 0x46, 0xa6, 0x8d, 0x86, 0x8d, 0xb9, 0x68, 0xc6, 0x27, 0xe8, 0xef, 0x16, 0xac,
0xcd, 0x32, 0x98, 0x89, 0xa6, 0x01, 0xf0, 0x2c, 0x74, 0xfb, 0x3c, 0x1c, 0x7d, 0x21, 0x46, 0xfa,
0xf6, 0xc8, 0x68, 0xc8, 0x37, 0xb0, 0x3e, 0x11, 0xeb, 0xb3, 0x6e, 0x4c, 0x51, 0x0c, 0xea, 0xe1,
0x5c, 0x50, 0xb1, 0x1d, 0x9b, 0xe3, 0x4e, 0xff, 0xb5, 0xe0, 0x8d, 0x99, 0x4b, 0x69, 0xf5, 0x59,
0xd9, 0x42, 0x7f, 0x04, 0xb5, 0x17, 0x6a, 0x30, 0xb4, 0x44, 0x24, 0x5d, 0x9f, 0x2b, 0x4b, 0x5d,
0x9e, 0x53, 0x7a, 0xe2, 0x40, 0x09, 0x75, 0x47, 0x7c, 0xa0, 0x61, 0xbe, 0xb3, 0x00, 0xe6, 0xae,
0xb1, 0xd7, 0x73, 0xd3, 0x88, 0x0a, 0x0c, 0xce, 0x71, 0x73, 0x29, 0xa0, 0xa0, 0x26, 0xe2, 0x98,
0xc3, 0x9d, 0xa6, 0x5a, 0x00, 0x5b, 0x66, 0x92, 0x8c, 0x21, 0xb9, 0xbd, 0x27, 0x3f, 0x02, 0x48,
0x4d, 0x75, 0xbb, 0xdf, 0x52, 0x9f, 0x19, 0x63, 0xfa, 0x14, 0xb6, 0xcc, 0x98, 0xbb, 0xc3, 0x86,
0xa6, 0x5a, 0x72, 0x69, 0xb5, 0xd0, 0x36, 0xd8, 0xcf, 0x99, 0xa3, 0xae, 0x3a, 0xec, 0x56, 0x93,
0x22, 0x2d, 0x29, 0x97, 0xa7, 0x41, 0x24, 0x8d, 0x8b, 0xfa, 0x56, 0xba, 0x67, 0x41, 0x28, 0x11,
0x71, 0x95, 0xe1, 0x37, 0xfd, 0xc5, 0x02, 0x38, 0x0e, 0x7a, 0xa2, 0x23, 0xb9, 0x1c, 0x46, 0xe4,
0x21, 0x46, 0xc5, 0x58, 0x95, 0xbd, 0x6a, 0x7a, 0xa6, 0xe7, 0xcc, 0x61, 0xb8, 0xdf, 0xfb, 0x99,
0x8b, 0x70, 0x7a, 0xc2, 0x24, 0x4b, 0x2c, 0x73, 0x5d, 0xee, 0x98, 0x81, 0xa2, 0xa9, 0xaa, 0xa5,
0xf6, 0xb1, 0x5e, 0x83, 0xe6, 0xf4, 0x18, 0xaa, 0x87, 0xde, 0x30, 0x92, 0x22, 0xd4, 0x70, 0xd4,
0x4d, 0x22, 0xb9, 0x4c, 0xea, 0x0f, 0x05, 0xb2, 0x0d, 0x4b, 0x08, 0x59, 0x48, 0xdd, 0xb7, 0x13,
0x40, 0xcd, 0x2a, 0xed, 0x40, 0x61, 0x7e, 0xbb, 0x11, 0xc8, 0xe3, 0x1b, 0x4c, 0x33, 0x84, 0xcf,
0xaf, 0x1a, 0xd8, 0x47, 0x6e, 0x9c, 0x52, 0x9b, 0xa9, 0x4f, 0xd4, 0xf0, 0x6b, 0x2c, 0x39, 0xa5,
0xe1, 0xea, 0xf6, 0x59, 0x8d, 0x53, 0xa8, 0xc6, 0xe5, 0x7d, 0xee, 0x09, 0xf3, 0x8c, 0xb1, 0x33,
0xcf, 0x98, 0xbf, 0x2c, 0x58, 0x65, 0x22, 0x72, 0x5f, 0x0a, 0xc7, 0x8f, 0x64, 0x38, 0x4c, 0xda,
0xef, 0xf3, 0xe0, 0xd4, 0x69, 0x61, 0x54, 0x9b, 0xc5, 0x82, 0xc9, 0x51, 0x6e, 0x6e, 0x8e, 0xde,
0x55, 0x0f, 0xdf, 0x20, 0xec, 0xa9, 0x1e, 0x0c, 0x42, 0xcd, 0xfa, 0x84, 0x61, 0xd6, 0x82, 0xbc,
0x07, 0x4b, 0x9d, 0x60, 0x18, 0x76, 0x93, 0x01, 0xbd, 0x9e, 0x1a, 0xc7, 0xa8, 0xe2, 0x65, 0x66,
0xcc, 0x32, 0x39, 0x2d, 0x2c, 0xc8, 0xe9, 0x4f, 0x16, 0x2c, 0x67, 0x63, 0x2c, 0x2e, 0xb1, 0x84,
0xcb, 0xdc, 0x4c, 0x2e, 0xed, 0x59, 0x5c, 0xe6, 0x53, 0x2e, 0xd3, 0xe7, 0x47, 0x21, 0xf3, 0xfc,
0xa0, 0xe7, 0xb0, 0x31, 0x45, 0xf0, 0x61, 0xd0, 0x1f, 0xa8, 0x4c, 0xde, 0x97, 0xe8, 0x35, 0x28,
0xb4, 0xc3, 0x50, 0x53, 0x5c, 0x66, 0xb1, 0x40, 0xf7, 0xa1, 0x74, 0x12, 0x0c, 0x02, 0x2f, 0x38,
0x1b, 0x65, 0x4b, 0xd5, 0xba, 0xad, 0x54, 0x1f, 0xd7, 0xfe, 0xb8, 0x69, 0x58, 0x7f, 0xde, 0x34,
0xac, 0xbf, 0x6f, 0x1a, 0xd6, 0x6f, 0xff, 0x34, 0x5e, 0x3b, 0x2d, 0xe2, 0xcf, 0xcd, 0xfe, 0xab,
0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x09, 0x36, 0x2c, 0xed, 0x0c, 0x00, 0x00,
0x14, 0xc7, 0x71, 0x92, 0x26, 0x2f, 0x9b, 0xdd, 0xec, 0xd0, 0xad, 0xd2, 0xaa, 0x4a, 0xc3, 0x1c,
0x68, 0x59, 0x89, 0x02, 0xad, 0x84, 0xa0, 0x08, 0x09, 0xb6, 0xc9, 0x6a, 0x0d, 0xb4, 0x5d, 0x26,
0xdd, 0x45, 0x70, 0x40, 0x9a, 0x26, 0x43, 0x6b, 0xd5, 0xb1, 0x83, 0x3d, 0x69, 0x9b, 0x3d, 0x70,
0x83, 0x03, 0x7c, 0x01, 0xee, 0x7c, 0x19, 0x8e, 0xdc, 0xb8, 0xa2, 0xf2, 0x21, 0x90, 0xb8, 0x80,
0xe6, 0x79, 0xc6, 0x76, 0xfe, 0x35, 0x6a, 0x6f, 0x7e, 0x6f, 0xde, 0x7b, 0xf3, 0x9b, 0xdf, 0xfb,
0x33, 0x63, 0xa8, 0x0e, 0x42, 0xf7, 0x82, 0x4b, 0xb1, 0x3d, 0x08, 0x03, 0x19, 0x90, 0x92, 0xeb,
0x4b, 0x11, 0xfa, 0xdc, 0xa3, 0x47, 0x50, 0x76, 0xfc, 0x9e, 0xb8, 0x3a, 0x10, 0x92, 0x93, 0x26,
0x54, 0xf6, 0x03, 0x6f, 0xd8, 0xf7, 0xbf, 0xe0, 0x27, 0xc2, 0xab, 0x5b, 0x4d, 0x6b, 0xab, 0xcc,
0xb2, 0x2a, 0x65, 0x71, 0xec, 0xf6, 0xc5, 0x97, 0x43, 0xee, 0xcb, 0x61, 0xbf, 0x9e, 0x8b, 0x2d,
0x32, 0x2a, 0xfa, 0xaf, 0x05, 0xe5, 0xa7, 0x21, 0xef, 0x0b, 0x8c, 0xb8, 0x06, 0x25, 0x16, 0x5c,
0x66, 0xc3, 0x25, 0x32, 0x79, 0x13, 0xee, 0x3b, 0xfe, 0x85, 0x08, 0x23, 0xd1, 0xf6, 0xf9, 0x89,
0x27, 0x7a, 0x18, 0xae, 0xc4, 0x26, 0xb4, 0x64, 0x1d, 0xca, 0xfb, 0xbc, 0x7b, 0x26, 0x8e, 0x47,
0x03, 0x51, 0xb7, 0x31, 0x48, 0xaa, 0x48, 0x56, 0x3b, 0xee, 0x2b, 0x51, 0xcf, 0x37, 0xad, 0xad,
0x2a, 0x4b, 0x15, 0x93, 0x78, 0x0b, 0x53, 0x78, 0x09, 0x85, 0x7b, 0x8c, 0xfb, 0xa7, 0x09, 0x86,
0x22, 0x62, 0x18, 0xd3, 0x91, 0x4d, 0x28, 0x3e, 0x75, 0x85, 0xd7, 0x8b, 0xea, 0x4b, 0x4d, 0x7b,
0xab, 0xb2, 0xf3, 0x60, 0xdb, 0xf0, 0xb7, 0x8d, 0x7a, 0xa6, 0x97, 0x29, 0x85, 0xfb, 0x4e, 0x7f,
0x10, 0x84, 0x92, 0x89, 0x68, 0x10, 0xf8, 0x91, 0x20, 0x35, 0xb0, 0xdb, 0x61, 0xa8, 0xcf, 0xae,
0x3e, 0xe9, 0x0f, 0x50, 0x7b, 0xe2, 0x05, 0xdd, 0xf3, 0x16, 0x97, 0x9c, 0x89, 0xef, 0x87, 0x22,
0x92, 0x64, 0x19, 0x0a, 0x98, 0x05, 0x6d, 0x17, 0x0b, 0x4a, 0x8b, 0x4c, 0x6a, 0x9a, 0x63, 0x41,
0x69, 0xd1, 0x1f, 0xa9, 0xc8, 0xb3, 0x58, 0x50, 0xda, 0x8e, 0xe7, 0x76, 0x63, 0x0a, 0xf2, 0x2c,
0x16, 0x08, 0x81, 0xfc, 0x4b, 0x57, 0x5c, 0xea, 0x73, 0xe3, 0x37, 0x75, 0xe0, 0x61, 0x66, 0x7f,
0x0d, 0x73, 0x05, 0x8a, 0x2c, 0xb8, 0x74, 0x5a, 0x51, 0xdd, 0x6a, 0xda, 0x5b, 0x79, 0xa6, 0x25,
0x64, 0x17, 0xd3, 0xaf, 0x96, 0x72, 0xb8, 0x94, 0x2a, 0xe8, 0x2a, 0x14, 0x90, 0x6a, 0x75, 0xca,
0xd4, 0x57, 0x7d, 0xd2, 0xff, 0x2c, 0x28, 0x1f, 0xf0, 0x2b, 0x84, 0x11, 0x91, 0x8f, 0xa1, 0xd4,
0x91, 0xdc, 0xef, 0xf1, 0xb0, 0x87, 0x46, 0x95, 0x9d, 0x37, 0x52, 0x0a, 0x13, 0xb3, 0x6d, 0x63,
0xd3, 0xf6, 0x65, 0x38, 0x62, 0x89, 0x0b, 0xd9, 0x83, 0x25, 0x5d, 0x13, 0x88, 0xa1, 0xb2, 0xd3,
0x9c, 0xe5, 0x9d, 0x94, 0x8d, 0x72, 0x36, 0x0e, 0x6b, 0x1f, 0x41, 0x75, 0x2c, 0xac, 0xc2, 0x7a,
0x2e, 0x46, 0x26, 0x23, 0xe7, 0x62, 0xa4, 0xb8, 0xbb, 0xe0, 0xde, 0x30, 0xe6, 0x39, 0xcf, 0x62,
0x61, 0x2f, 0xf7, 0x81, 0xb5, 0xb6, 0x07, 0xf7, 0xb2, 0x51, 0x6f, 0xe3, 0x4b, 0xbf, 0x05, 0xb2,
0x1f, 0x0a, 0x2e, 0x05, 0xc2, 0x3b, 0x10, 0x51, 0xc4, 0x4f, 0xc5, 0xfc, 0x4c, 0xc7, 0xd9, 0xcb,
0x65, 0xb3, 0xb7, 0x0e, 0x65, 0x27, 0x32, 0x07, 0xb7, 0xb1, 0x2e, 0x53, 0x05, 0x7d, 0x0c, 0xa4,
0x25, 0x3c, 0x21, 0x85, 0xee, 0xdf, 0x1b, 0xe2, 0xd3, 0x8e, 0xc1, 0xb2, 0xd8, 0x96, 0x6c, 0x42,
0x5e, 0xb5, 0x2e, 0x42, 0xa9, 0xec, 0xbc, 0x9e, 0x32, 0x9d, 0xcc, 0x09, 0x86, 0x06, 0xd4, 0x35,
0x41, 0x75, 0xbb, 0x2f, 0x38, 0xe0, 0x8c, 0x52, 0x36, 0x5b, 0xd9, 0x93, 0x5b, 0x25, 0x03, 0x44,
0x6f, 0xf5, 0x89, 0x39, 0xeb, 0x5d, 0xb7, 0xa2, 0xdf, 0x68, 0xad, 0x6a, 0x89, 0x43, 0xb5, 0x1a,
0xfb, 0xe0, 0xf7, 0xfc, 0x23, 0x4f, 0xe0, 0x50, 0xb1, 0x55, 0x0f, 0x45, 0x75, 0xbb, 0x69, 0xab,
0xd8, 0x28, 0xd0, 0x5d, 0x28, 0x76, 0xba, 0x67, 0xa2, 0xcf, 0xc9, 0x5b, 0xaa, 0x50, 0x7b, 0xe2,
0x4a, 0x44, 0xba, 0xcc, 0x1f, 0x4c, 0xd0, 0xc7, 0xcc, 0x3a, 0xfd, 0xc5, 0xd2, 0xe8, 0xe7, 0x20,
0x2a, 0xe2, 0xde, 0x51, 0x3d, 0x3f, 0x35, 0x71, 0x94, 0x9e, 0xe9, 0x65, 0xd2, 0x86, 0x9a, 0xe3,
0x0f, 0x86, 0xb2, 0x25, 0xbe, 0x73, 0x7d, 0x57, 0xba, 0x81, 0x1f, 0xd5, 0x8b, 0xe8, 0xb2, 0x9a,
0xdd, 0x7a, 0xcc, 0x82, 0x4d, 0xb9, 0xd0, 0x9f, 0x2c, 0x78, 0x30, 0xa1, 0x5c, 0x80, 0x2b, 0x77,
0x33, 0xae, 0xf7, 0x93, 0x91, 0x69, 0xa3, 0x61, 0x63, 0x2e, 0x9a, 0xf1, 0x09, 0xfa, 0x9b, 0x05,
0xcb, 0xb3, 0x0c, 0x66, 0xa2, 0x69, 0x00, 0x3c, 0x0f, 0xdd, 0x3e, 0x0f, 0x47, 0x9f, 0x8b, 0x91,
0xbe, 0x3d, 0x32, 0x1a, 0xf2, 0x15, 0xac, 0x4c, 0xc4, 0xfa, 0xb4, 0x1b, 0x53, 0x14, 0x83, 0xda,
0x98, 0x0b, 0x2a, 0xb6, 0x63, 0x73, 0xdc, 0xe9, 0x3f, 0x16, 0x3c, 0x9a, 0xb9, 0x94, 0x56, 0x9f,
0x95, 0x2d, 0xf4, 0xc7, 0x50, 0x7b, 0xa9, 0x06, 0x43, 0x4b, 0x44, 0xd2, 0xf5, 0xb9, 0xb2, 0xd4,
0xe5, 0x39, 0xa5, 0x27, 0x0e, 0x94, 0x50, 0x77, 0xc0, 0x07, 0x1a, 0xe6, 0xdb, 0x0b, 0x60, 0x6e,
0x1b, 0x7b, 0x3d, 0x37, 0x8d, 0xa8, 0xc0, 0xe0, 0x1c, 0x37, 0x97, 0x02, 0x0a, 0x6a, 0x22, 0x8e,
0x39, 0xdc, 0x6a, 0xaa, 0x05, 0xb0, 0x6e, 0x26, 0xc9, 0x18, 0x92, 0x9b, 0x7b, 0xf2, 0x43, 0x80,
0xd4, 0x54, 0xb7, 0xfb, 0x0d, 0xf5, 0x99, 0x31, 0xa6, 0xcf, 0x60, 0xdd, 0x8c, 0xb9, 0x5b, 0x6c,
0x68, 0xaa, 0x25, 0x97, 0x56, 0x0b, 0x6d, 0x83, 0xfd, 0x82, 0x39, 0xea, 0xaa, 0xc3, 0x6e, 0x35,
0x29, 0xd2, 0x92, 0x72, 0x79, 0x16, 0x44, 0xd2, 0xb8, 0xa8, 0x6f, 0xa5, 0x7b, 0x1e, 0x84, 0x12,
0x11, 0x57, 0x19, 0x7e, 0xd3, 0x9f, 0x2d, 0x80, 0xc3, 0xa0, 0x27, 0x3a, 0x92, 0xcb, 0x61, 0x44,
0x36, 0x30, 0x2a, 0xc6, 0xaa, 0xec, 0x54, 0xd3, 0x33, 0xbd, 0x60, 0x0e, 0xc3, 0xfd, 0xde, 0xcb,
0x5c, 0x84, 0xd3, 0x13, 0x26, 0x59, 0x62, 0x99, 0xeb, 0x72, 0xcb, 0x0c, 0x14, 0x4d, 0x55, 0x2d,
0xb5, 0x8f, 0xf5, 0x1a, 0x34, 0xa7, 0x87, 0x50, 0xdd, 0xf7, 0x86, 0x91, 0x14, 0xa1, 0x86, 0xa3,
0x6e, 0x12, 0xc9, 0x65, 0x52, 0x7f, 0x28, 0x90, 0x4d, 0x58, 0x42, 0xc8, 0x42, 0xea, 0xbe, 0x9d,
0x00, 0x6a, 0x56, 0x69, 0x07, 0x0a, 0xf3, 0xdb, 0x8d, 0x40, 0x1e, 0xdf, 0x60, 0x9a, 0x21, 0x7c,
0x7e, 0xd5, 0xc0, 0x3e, 0x70, 0xe3, 0x94, 0xda, 0x4c, 0x7d, 0xa2, 0x86, 0x5f, 0x61, 0xc9, 0x29,
0x0d, 0x57, 0xb7, 0xcf, 0xc3, 0x38, 0x85, 0x6a, 0x5c, 0xde, 0xe5, 0x9e, 0x30, 0xcf, 0x18, 0x3b,
0xf3, 0x8c, 0xf9, 0xd3, 0x82, 0x87, 0x4c, 0x44, 0xee, 0x2b, 0xe1, 0xf8, 0x91, 0x0c, 0x87, 0x49,
0xfb, 0x7d, 0x16, 0x9c, 0x38, 0x2d, 0x8c, 0x6a, 0xb3, 0x58, 0x30, 0x39, 0xca, 0xcd, 0xcd, 0xd1,
0x3b, 0xea, 0xe1, 0x1b, 0x84, 0x3d, 0xd5, 0x83, 0x41, 0xa8, 0x59, 0x9f, 0x30, 0xcc, 0x5a, 0x90,
0x77, 0x61, 0xa9, 0x13, 0x0c, 0xc3, 0x6e, 0x32, 0xa0, 0x57, 0x52, 0xe3, 0x18, 0x55, 0xbc, 0xcc,
0x8c, 0x59, 0x26, 0xa7, 0x85, 0x05, 0x39, 0xfd, 0xd1, 0x82, 0x7b, 0xd9, 0x18, 0x8b, 0x4b, 0x2c,
0xe1, 0x32, 0x37, 0x93, 0x4b, 0x7b, 0x16, 0x97, 0xf9, 0x94, 0xcb, 0xf4, 0xf9, 0x51, 0xc8, 0x3c,
0x3f, 0xe8, 0x19, 0xac, 0x4e, 0x11, 0xbc, 0x1f, 0xf4, 0x07, 0x2a, 0x93, 0x77, 0x25, 0x7a, 0x19,
0x0a, 0xed, 0x30, 0xd4, 0x14, 0x97, 0x59, 0x2c, 0xd0, 0xaf, 0xe1, 0x51, 0x47, 0xc8, 0x0c, 0xbf,
0xa6, 0x48, 0x36, 0xc0, 0x3e, 0xf2, 0x7a, 0x73, 0x4e, 0x7e, 0xe4, 0xf5, 0x94, 0xc1, 0xa1, 0xb8,
0x9c, 0xb3, 0xe1, 0xa1, 0xb8, 0xa4, 0xbb, 0x50, 0x3a, 0x0e, 0x06, 0x81, 0x17, 0x9c, 0x8e, 0xb2,
0x5d, 0x60, 0xdd, 0xd4, 0x05, 0x4f, 0x6a, 0xbf, 0x5f, 0x37, 0xac, 0x3f, 0xae, 0x1b, 0xd6, 0x5f,
0xd7, 0x0d, 0xeb, 0xd7, 0xbf, 0x1b, 0xaf, 0x9d, 0x14, 0xf1, 0xbf, 0x69, 0xf7, 0xff, 0x00, 0x00,
0x00, 0xff, 0xff, 0x80, 0x0a, 0xbc, 0x80, 0x48, 0x0d, 0x00, 0x00,
}

View file

@ -167,6 +167,11 @@ message ResizeInstructionComplete {
string Error = 3;
}
message SetCoordinatorMessage {
URI Old = 1;
URI New = 2;
}
message Topology {
repeated URI NodeSet = 1;
}

View file

@ -356,6 +356,8 @@ func (s *Server) ReceiveMessage(pb proto.Message) error {
if err != nil {
return err
}
case *internal.SetCoordinatorMessage:
s.Cluster.SetCoordinator(DecodeURI(obj.Old), DecodeURI(obj.New))
}
return nil