enable master election

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
Evan Hazlett 2019-10-06 22:10:29 -04:00
parent bde4dba555
commit 9b07492180
No known key found for this signature in database
GPG key ID: A519480096146526
8 changed files with 112 additions and 63 deletions

View file

@ -13,12 +13,14 @@ import (
codes "google.golang.org/grpc/codes" codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status" status "google.golang.org/grpc/status"
math "math" math "math"
time "time"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal var _ = proto.Marshal
var _ = fmt.Errorf var _ = fmt.Errorf
var _ = math.Inf var _ = math.Inf
var _ = time.Kitchen
// This is a compile-time assertion to ensure that this generated file // This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against. // is compatible with the proto package it is being compiled against.
@ -217,6 +219,7 @@ type Node struct {
EndpointIP string `protobuf:"bytes,4,opt,name=endpoint_ip,json=endpointIp,proto3" json:"endpoint_ip,omitempty"` EndpointIP string `protobuf:"bytes,4,opt,name=endpoint_ip,json=endpointIp,proto3" json:"endpoint_ip,omitempty"`
EndpointPort uint64 `protobuf:"varint,5,opt,name=endpoint_port,json=endpointPort,proto3" json:"endpoint_port,omitempty"` EndpointPort uint64 `protobuf:"varint,5,opt,name=endpoint_port,json=endpointPort,proto3" json:"endpoint_port,omitempty"`
GatewayIP string `protobuf:"bytes,6,opt,name=gateway_ip,json=gatewayIp,proto3" json:"gateway_ip,omitempty"` GatewayIP string `protobuf:"bytes,6,opt,name=gateway_ip,json=gatewayIp,proto3" json:"gateway_ip,omitempty"`
Updated time.Time `protobuf:"bytes,7,opt,name=updated,proto3,stdtime" json:"updated"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -288,6 +291,13 @@ func (m *Node) GetGatewayIP() string {
return "" return ""
} }
func (m *Node) GetUpdated() time.Time {
if m != nil {
return m.Updated
}
return time.Time{}
}
type NodesRequest struct { type NodesRequest struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -707,56 +717,59 @@ func init() {
} }
var fileDescriptor_b6184fc395da86b1 = []byte{ var fileDescriptor_b6184fc395da86b1 = []byte{
// 784 bytes of a gzipped FileDescriptorProto // 831 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6a, 0xeb, 0x46, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x8e, 0xe3, 0x34,
0x18, 0xc5, 0x7f, 0xb2, 0xfd, 0xc9, 0x76, 0x60, 0x28, 0x41, 0xb8, 0x14, 0xb9, 0xca, 0xa2, 0x4e, 0x14, 0x26, 0x9d, 0x36, 0x6d, 0x4f, 0xe6, 0x47, 0xb2, 0xd0, 0x2a, 0x2a, 0x42, 0x19, 0xb2, 0x17,
0x09, 0x52, 0xec, 0x52, 0x28, 0x94, 0x42, 0xf3, 0xd7, 0x54, 0xa4, 0x0d, 0xee, 0xb4, 0xd9, 0x94, 0xcc, 0xa2, 0x55, 0xb2, 0x2d, 0x42, 0x42, 0x42, 0x20, 0xe6, 0x67, 0x59, 0xa2, 0x81, 0x55, 0x31,
0x82, 0x91, 0xad, 0xa9, 0xa3, 0x44, 0xf6, 0x4c, 0x47, 0x63, 0x07, 0xaf, 0xba, 0xee, 0x4b, 0xf5, 0xbb, 0x37, 0x08, 0xa9, 0x4a, 0x1b, 0xd3, 0xf5, 0x4c, 0x5a, 0x1b, 0xc7, 0xe9, 0xa8, 0x57, 0xbc,
0x51, 0xbc, 0xf0, 0x8b, 0xb4, 0xcc, 0x68, 0xa4, 0x6b, 0xdf, 0x90, 0x7b, 0x15, 0xee, 0xdd, 0xf9, 0x02, 0x4f, 0xc4, 0x35, 0xbc, 0x44, 0x90, 0xfa, 0x22, 0x20, 0x3b, 0x4e, 0x68, 0x67, 0x34, 0x90,
0x3b, 0xfa, 0xce, 0x99, 0x33, 0x67, 0xfe, 0x0c, 0xdf, 0xcc, 0x22, 0x71, 0xbf, 0x9c, 0xb8, 0x53, 0x11, 0x7b, 0x97, 0x73, 0x7c, 0xbe, 0xcf, 0x9f, 0xbf, 0x73, 0xec, 0x16, 0x3e, 0x9d, 0x53, 0xf9,
0x3a, 0xf7, 0x12, 0x41, 0xe2, 0x38, 0xe0, 0x8c, 0xd3, 0x07, 0x32, 0x15, 0xde, 0x3d, 0x89, 0xe6, 0x26, 0x9f, 0x06, 0x33, 0xb6, 0x08, 0x33, 0x49, 0xd2, 0x34, 0x16, 0x5c, 0xb0, 0x2b, 0x32, 0x93,
0x61, 0x10, 0xc7, 0x5e, 0xc0, 0x22, 0x6f, 0x35, 0xc8, 0x6b, 0x97, 0x71, 0x2a, 0x28, 0xfa, 0x3c, 0xe1, 0x1b, 0x42, 0x17, 0x49, 0x9c, 0xa6, 0x61, 0xcc, 0x69, 0xb8, 0x1a, 0xd6, 0x71, 0xc0, 0x05,
0xa2, 0xee, 0x3e, 0xc3, 0xcd, 0x3b, 0x02, 0x16, 0xb9, 0xab, 0x41, 0xf7, 0x93, 0x19, 0x9d, 0x51, 0x93, 0x0c, 0x7d, 0x40, 0x59, 0xb0, 0x8b, 0x08, 0xea, 0x8a, 0x98, 0xd3, 0x60, 0x35, 0x1c, 0xbc,
0xd5, 0xed, 0xc9, 0x5f, 0x29, 0xb1, 0xfb, 0xe9, 0x8c, 0xd2, 0x59, 0x4c, 0x3c, 0x55, 0x4d, 0x96, 0x3b, 0x67, 0x73, 0xa6, 0xab, 0x43, 0xf5, 0x55, 0x02, 0x07, 0xef, 0xcd, 0x19, 0x9b, 0xa7, 0x24,
0x7f, 0x7a, 0x64, 0xce, 0xc4, 0x3a, 0xfd, 0xe8, 0xfc, 0x0d, 0xc6, 0xcf, 0x41, 0x22, 0x08, 0x47, 0xd4, 0xd1, 0x34, 0xff, 0x29, 0x24, 0x0b, 0x2e, 0xd7, 0x66, 0xd1, 0xbb, 0xbd, 0x28, 0xe9, 0x82,
0x87, 0x50, 0x8e, 0x42, 0xab, 0xd4, 0x2b, 0xf5, 0x9b, 0xe7, 0xc6, 0x76, 0x63, 0x97, 0xfd, 0x4b, 0x64, 0x32, 0x5e, 0xf0, 0xb2, 0xc0, 0xff, 0x05, 0xec, 0x6f, 0xe3, 0x4c, 0x12, 0x81, 0x1e, 0x41,
0x5c, 0x8e, 0x42, 0x34, 0x84, 0xd6, 0x8c, 0xb3, 0xe9, 0x38, 0x08, 0x43, 0x4e, 0x92, 0xc4, 0x2a, 0x8b, 0x26, 0xae, 0x75, 0x6c, 0x9d, 0xf4, 0xcf, 0xec, 0x4d, 0xe1, 0xb5, 0xa2, 0x0b, 0xdc, 0xa2,
0xab, 0x8e, 0x83, 0xed, 0xc6, 0x36, 0xaf, 0xf1, 0xe8, 0xe2, 0x2c, 0x85, 0xb1, 0x29, 0x9b, 0x74, 0x09, 0x1a, 0xc1, 0xfe, 0x5c, 0xf0, 0xd9, 0x24, 0x4e, 0x12, 0x41, 0xb2, 0xcc, 0x6d, 0xe9, 0x8a,
0x81, 0x8e, 0xa1, 0xc9, 0x49, 0x18, 0x25, 0xe3, 0x25, 0x8f, 0xad, 0x8a, 0x22, 0xb4, 0xb6, 0x1b, 0xa3, 0x4d, 0xe1, 0x39, 0x2f, 0xf0, 0xf8, 0xfc, 0xb4, 0x4c, 0x63, 0x47, 0x15, 0x99, 0x00, 0x3d,
0xbb, 0x81, 0x25, 0x78, 0x87, 0x7f, 0xc2, 0x0d, 0xf5, 0xf9, 0x8e, 0xc7, 0x8e, 0x0f, 0x9d, 0x0b, 0x81, 0xbe, 0x20, 0x09, 0xcd, 0x26, 0xb9, 0x48, 0xdd, 0x3d, 0x0d, 0xd8, 0xdf, 0x14, 0x5e, 0x0f,
0xba, 0x58, 0x90, 0xa9, 0xc0, 0xe4, 0xaf, 0x25, 0x49, 0xc4, 0x8b, 0x46, 0x6c, 0x30, 0xa7, 0xf1, 0xab, 0xe4, 0x6b, 0xfc, 0x0d, 0xee, 0xe9, 0xe5, 0xd7, 0x22, 0xf5, 0x23, 0x38, 0x3c, 0x67, 0xcb,
0x52, 0x7a, 0x1d, 0x3f, 0x92, 0x75, 0xea, 0x03, 0x83, 0x86, 0x6e, 0xc8, 0xda, 0xf9, 0x0d, 0x0e, 0x25, 0x99, 0x49, 0x4c, 0x7e, 0xce, 0x49, 0x26, 0xef, 0x15, 0xe2, 0x81, 0x33, 0x4b, 0x73, 0xa5,
0x72, 0xa9, 0x84, 0xd1, 0x45, 0x42, 0xd0, 0x19, 0x18, 0x73, 0x35, 0x3d, 0xa5, 0x67, 0x0e, 0x8f, 0x75, 0x72, 0x4d, 0xd6, 0xa5, 0x0e, 0x0c, 0x26, 0x75, 0x49, 0xd6, 0xfe, 0x2b, 0x38, 0xaa, 0xa9,
0xdd, 0xf7, 0xa6, 0xe8, 0xa6, 0x79, 0x60, 0x4d, 0x74, 0x7c, 0xa8, 0xdf, 0x90, 0xf5, 0x28, 0x88, 0x32, 0xce, 0x96, 0x19, 0x41, 0xa7, 0x60, 0x2f, 0xf4, 0xf1, 0x34, 0x9f, 0x33, 0x7a, 0x12, 0xfc,
0xb8, 0x74, 0xc0, 0x78, 0xb4, 0x0a, 0x04, 0x51, 0x0e, 0x4a, 0xa9, 0x03, 0x0d, 0xdd, 0x90, 0x35, 0xa7, 0xcd, 0x41, 0xe9, 0x07, 0x36, 0x40, 0x3f, 0x82, 0xee, 0x25, 0x59, 0x8f, 0x63, 0x2a, 0x94,
0xfa, 0x0c, 0x80, 0x2d, 0x27, 0x71, 0x34, 0xdd, 0x71, 0xd8, 0x4c, 0x11, 0x69, 0xf0, 0x9f, 0x32, 0x02, 0x2e, 0xe8, 0x2a, 0x96, 0x44, 0x2b, 0xb0, 0x4a, 0x05, 0x26, 0x75, 0x49, 0xd6, 0xe8, 0x7d,
0x54, 0x6f, 0x69, 0x48, 0x5e, 0x9c, 0x22, 0x82, 0xaa, 0x8c, 0x59, 0x33, 0xd5, 0x6f, 0xf4, 0x0b, 0x00, 0x9e, 0x4f, 0x53, 0x3a, 0xdb, 0x52, 0xd8, 0x2f, 0x33, 0x4a, 0xe0, 0x1f, 0x2d, 0x68, 0xbf,
0xd4, 0x1f, 0xc9, 0x9a, 0x05, 0x11, 0x57, 0x49, 0x9a, 0xc3, 0x2f, 0x0b, 0xcc, 0x41, 0x3b, 0x3e, 0x64, 0x09, 0xb9, 0xf7, 0x88, 0x08, 0xda, 0xca, 0x66, 0x83, 0xd4, 0xdf, 0xe8, 0x3b, 0xe8, 0x5e,
0x37, 0xb7, 0x1b, 0x3b, 0xb3, 0x8f, 0x33, 0x1d, 0xe4, 0x81, 0x49, 0x16, 0x21, 0xa3, 0xd1, 0x42, 0x93, 0x35, 0x8f, 0xa9, 0xd0, 0x4e, 0x3a, 0xa3, 0x8f, 0x1a, 0x9c, 0xc1, 0x28, 0x3e, 0x73, 0x36,
0x8c, 0x23, 0x66, 0x55, 0x95, 0x8f, 0xce, 0x76, 0x63, 0xc3, 0x95, 0x86, 0xfd, 0x11, 0x86, 0xac, 0x85, 0x57, 0xc9, 0xc7, 0x15, 0x0f, 0x0a, 0xc1, 0x21, 0xcb, 0x84, 0x33, 0xba, 0x94, 0x13, 0xca,
0xc5, 0x67, 0xe8, 0x08, 0xda, 0x39, 0x81, 0x51, 0x2e, 0xac, 0x5a, 0xaf, 0xd4, 0xaf, 0xe2, 0x56, 0xdd, 0xb6, 0xd6, 0x71, 0xb8, 0x29, 0x3c, 0x78, 0x6e, 0xd2, 0xd1, 0x18, 0x43, 0x55, 0x12, 0x71,
0x06, 0x8e, 0x28, 0x17, 0xe8, 0x04, 0x60, 0x16, 0x08, 0xf2, 0x14, 0xac, 0xa5, 0xa8, 0xa1, 0x44, 0xf4, 0x18, 0x0e, 0x6a, 0x00, 0x67, 0x42, 0xba, 0x9d, 0x63, 0xeb, 0xa4, 0x8d, 0xf7, 0xab, 0xe4,
0xdb, 0xdb, 0x8d, 0xdd, 0xbc, 0x4e, 0x51, 0x7f, 0x84, 0x9b, 0xba, 0xc1, 0x67, 0x4e, 0x07, 0x5a, 0x98, 0x09, 0x89, 0x9e, 0x02, 0xcc, 0x63, 0x49, 0x6e, 0xe2, 0xb5, 0x22, 0xb5, 0x35, 0xe9, 0xc1,
0x32, 0x8a, 0x44, 0xaf, 0xba, 0x73, 0x0b, 0x6d, 0x5d, 0xeb, 0xa5, 0xfb, 0x0e, 0x6a, 0x0b, 0x09, 0xa6, 0xf0, 0xfa, 0x2f, 0xca, 0x6c, 0x34, 0xc6, 0x7d, 0x53, 0x10, 0x71, 0xf4, 0x05, 0x74, 0x73,
0x58, 0xa5, 0x5e, 0xa5, 0x6f, 0x0e, 0xbf, 0x28, 0x30, 0x6b, 0x29, 0x80, 0x53, 0x96, 0xf3, 0x6f, 0x9e, 0xc4, 0x92, 0x24, 0x6e, 0x57, 0x1f, 0x6b, 0x10, 0x94, 0xb3, 0x1a, 0x54, 0xb3, 0x1a, 0xbc,
0x09, 0xaa, 0x23, 0xf2, 0x8e, 0x7d, 0xbd, 0x93, 0x6b, 0xf9, 0xe3, 0xe5, 0x1a, 0xc4, 0x31, 0x7d, 0xaa, 0x66, 0xf5, 0xac, 0xf7, 0x7b, 0xe1, 0xbd, 0xf3, 0xeb, 0x9f, 0x9e, 0x85, 0x2b, 0x90, 0x7f,
0x22, 0xe1, 0x38, 0x62, 0x89, 0x55, 0xe9, 0x55, 0xb2, 0x5c, 0xcf, 0x52, 0xd8, 0x1f, 0x25, 0x18, 0x08, 0xfb, 0xca, 0xca, 0xcc, 0x4c, 0x8d, 0xff, 0x12, 0x0e, 0x4c, 0x6c, 0x5a, 0xff, 0x39, 0x74,
0x74, 0x8b, 0xcf, 0x12, 0xd4, 0x85, 0x46, 0x16, 0x61, 0xba, 0x0a, 0x38, 0xaf, 0x65, 0x40, 0xd2, 0x96, 0x2a, 0xe1, 0x5a, 0xc7, 0x7b, 0x27, 0xce, 0xe8, 0xc3, 0x06, 0xae, 0x29, 0x02, 0x5c, 0xa2,
0xff, 0x6e, 0x40, 0xba, 0x7e, 0x13, 0x10, 0x93, 0xc0, 0x2b, 0x02, 0x92, 0x02, 0x38, 0x65, 0x39, 0xfc, 0xdf, 0x2c, 0x68, 0x8f, 0xc9, 0xbf, 0xdc, 0x8b, 0xad, 0xbe, 0xb4, 0xde, 0x5e, 0x5f, 0xe2,
0x3f, 0x40, 0x0d, 0xd3, 0xa5, 0x20, 0xe8, 0x08, 0xea, 0x32, 0xb2, 0x71, 0x9e, 0x12, 0x6c, 0x37, 0x34, 0x65, 0x37, 0x24, 0x99, 0x50, 0x9e, 0xb9, 0x7b, 0xc7, 0x7b, 0x55, 0x5f, 0x4e, 0xcb, 0x74,
0xb6, 0x21, 0xb3, 0xf4, 0x2f, 0xb1, 0x21, 0x3f, 0xf9, 0x21, 0xb2, 0xa0, 0xbe, 0x20, 0xe2, 0x89, 0x34, 0xce, 0x30, 0x98, 0x92, 0x88, 0x67, 0x68, 0x00, 0xbd, 0xaa, 0x05, 0x65, 0x17, 0x71, 0x1d,
0xf2, 0x47, 0xbd, 0x39, 0xb3, 0xd2, 0xf9, 0x15, 0xd0, 0x05, 0x27, 0x81, 0x20, 0x4a, 0x2d, 0x3b, 0x2b, 0x83, 0x94, 0xfe, 0x6d, 0x83, 0x4c, 0xfc, 0x8f, 0x41, 0x5c, 0x25, 0x1e, 0x60, 0x90, 0x22,
0xc4, 0x1f, 0x28, 0xea, 0x02, 0xba, 0x24, 0x31, 0x79, 0x4b, 0x74, 0xa7, 0xbf, 0xb4, 0xdf, 0x7f, 0xc0, 0x25, 0xca, 0xff, 0x0a, 0x3a, 0x98, 0xe5, 0x92, 0xa0, 0xc7, 0xd0, 0x55, 0x96, 0x4d, 0x6a,
0x00, 0x6d, 0xd5, 0x99, 0xa7, 0x85, 0xa1, 0x93, 0x01, 0x3a, 0xae, 0xef, 0xc1, 0xe0, 0x0a, 0xd1, 0x97, 0x60, 0x53, 0x78, 0xb6, 0xf2, 0x32, 0xba, 0xc0, 0xb6, 0x5a, 0x8a, 0x12, 0xe4, 0x42, 0x77,
0x79, 0xf5, 0x0b, 0xe4, 0x95, 0x8e, 0xae, 0x79, 0xc3, 0xff, 0xaa, 0xd0, 0xf8, 0x51, 0x77, 0x20, 0x49, 0xe4, 0x0d, 0x13, 0xd7, 0x66, 0xb8, 0xab, 0xd0, 0xff, 0x1e, 0xd0, 0xb9, 0x20, 0xb1, 0x24,
0x06, 0x75, 0x7d, 0xd9, 0xa0, 0x41, 0x01, 0xa5, 0xfd, 0x3b, 0xae, 0x3b, 0x7c, 0x0d, 0x45, 0x4f, 0x9a, 0xad, 0x7a, 0x04, 0xfe, 0x27, 0x69, 0x00, 0xe8, 0x82, 0xa4, 0xe4, 0x16, 0xe9, 0x56, 0xbd,
0x60, 0x0e, 0x46, 0x3a, 0x25, 0x74, 0x5a, 0xd4, 0x7a, 0x16, 0x47, 0x77, 0xf0, 0x0a, 0x86, 0x1e, 0xb5, 0x5b, 0x7f, 0x04, 0x07, 0xba, 0xb2, 0x76, 0x0b, 0xc3, 0x61, 0x95, 0x30, 0x76, 0x7d, 0x09,
0xee, 0x0f, 0x30, 0x77, 0xd6, 0x15, 0x7d, 0x5d, 0xc4, 0xf1, 0xb3, 0x7d, 0xd0, 0x3d, 0x74, 0xd3, 0xb6, 0xd0, 0x19, 0xe3, 0xd7, 0x49, 0x03, 0xbf, 0xca, 0xdd, 0x0d, 0x6e, 0xf4, 0x57, 0x1b, 0x7a,
0xd7, 0xc7, 0xcd, 0x5e, 0x1f, 0xf7, 0x4a, 0xbe, 0x3e, 0x52, 0x7d, 0x67, 0x81, 0x0b, 0xa9, 0x3f, 0x5f, 0x9b, 0x0a, 0xc4, 0xa1, 0x6b, 0x1e, 0x2b, 0x34, 0x6c, 0xc0, 0xb4, 0xfb, 0x46, 0x0e, 0x46,
0xdf, 0x10, 0x2f, 0xaa, 0x3f, 0x40, 0x4d, 0x5d, 0x26, 0xc8, 0x2b, 0x78, 0x6b, 0xe4, 0x41, 0x9d, 0x0f, 0x81, 0x98, 0x03, 0x2c, 0xc0, 0x2e, 0x8f, 0x84, 0x9e, 0x35, 0x95, 0x5e, 0xd9, 0x31, 0x18,
0x16, 0x27, 0xe8, 0x9c, 0x1e, 0xa0, 0xa6, 0xce, 0x65, 0xa1, 0xb1, 0x76, 0x4f, 0x74, 0xa1, 0xb1, 0x3e, 0x00, 0x61, 0xb6, 0xfb, 0x11, 0x9c, 0xad, 0xbe, 0xa2, 0x4f, 0x9a, 0x28, 0xbe, 0x33, 0x07,
0xf6, 0x8e, 0xfc, 0xb9, 0xfb, 0xfb, 0x49, 0xe1, 0xff, 0x0f, 0xdf, 0xae, 0x06, 0x13, 0x43, 0xe5, 0x83, 0x47, 0x77, 0x5e, 0x85, 0xe7, 0xea, 0xe7, 0x4d, 0xb1, 0x6f, 0x35, 0xb8, 0x11, 0xfb, 0xdd,
0xf2, 0xd5, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x77, 0xf6, 0x3d, 0x3c, 0x76, 0x08, 0x00, 0x00, 0x81, 0xb8, 0x97, 0xfd, 0x0a, 0x3a, 0xfa, 0x31, 0x41, 0x61, 0xc3, 0x57, 0xa3, 0x36, 0xea, 0x59,
0x73, 0x80, 0xf1, 0xe9, 0x0a, 0x3a, 0xfa, 0x5e, 0x36, 0xda, 0x6b, 0xfb, 0x46, 0x37, 0xda, 0x6b,
0xe7, 0xca, 0x9f, 0x05, 0x3f, 0x3c, 0x6d, 0xfc, 0x07, 0xe5, 0xb3, 0xd5, 0x70, 0x6a, 0x6b, 0x5f,
0x3e, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x46, 0x38, 0x83, 0x35, 0xd7, 0x08, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

View file

@ -4,6 +4,7 @@ package io.stellarproject.heimdall.api.v1;
import "gogoproto/gogo.proto"; import "gogoproto/gogo.proto";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
option go_package = "github.com/stellarproject/heimdall/api/v1;v1"; option go_package = "github.com/stellarproject/heimdall/api/v1;v1";
@ -43,6 +44,7 @@ message Node {
string endpoint_ip = 4 [(gogoproto.customname) = "EndpointIP"]; string endpoint_ip = 4 [(gogoproto.customname) = "EndpointIP"];
uint64 endpoint_port = 5; uint64 endpoint_port = 5;
string gateway_ip = 6 [(gogoproto.customname) = "GatewayIP"]; string gateway_ip = 6 [(gogoproto.customname) = "GatewayIP"];
google.protobuf.Timestamp updated = 7 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
} }
message NodesRequest {} message NodesRequest {}

View file

@ -26,6 +26,7 @@ import (
"os" "os"
"text/tabwriter" "text/tabwriter"
humanize "github.com/dustin/go-humanize"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -53,10 +54,10 @@ var listNodesCommand = cli.Command{
} }
w := tabwriter.NewWriter(os.Stdout, 20, 1, 3, ' ', 0) w := tabwriter.NewWriter(os.Stdout, 20, 1, 3, ' ', 0)
fmt.Fprintf(w, "ID\tADDR\tENDPOINT\tGATEWAY\tPUBLIC KEY\n") fmt.Fprintf(w, "ID\tADDR\tENDPOINT\tGATEWAY\tUPDATED\tPUBLIC KEY\n")
for _, n := range nodes { for _, n := range nodes {
ep := fmt.Sprintf("%s:%d", n.EndpointIP, n.EndpointPort) ep := fmt.Sprintf("%s:%d", n.EndpointIP, n.EndpointPort)
fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", n.ID, n.Addr, ep, n.GatewayIP, n.KeyPair.PublicKey) fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n", n.ID, n.Addr, ep, n.GatewayIP, humanize.Time(n.Updated), n.KeyPair.PublicKey)
} }
w.Flush() w.Flush()

1
go.mod
View file

@ -6,6 +6,7 @@ require (
github.com/certifi/gocertifi v0.0.0-20190905060710-a5e0173ced67 // indirect github.com/certifi/gocertifi v0.0.0-20190905060710-a5e0173ced67 // indirect
github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd
github.com/crosbymichael/guard v0.0.0-20190716141324-5c2daadf8067 // indirect github.com/crosbymichael/guard v0.0.0-20190716141324-5c2daadf8067 // indirect
github.com/dustin/go-humanize v1.0.0
github.com/getsentry/raven-go v0.2.0 // indirect github.com/getsentry/raven-go v0.2.0 // indirect
github.com/gogo/googleapis v1.3.0 github.com/gogo/googleapis v1.3.0
github.com/gogo/protobuf v1.3.0 github.com/gogo/protobuf v1.3.0

2
go.sum
View file

@ -19,6 +19,8 @@ github.com/crosbymichael/guard v0.0.0-20190716141324-5c2daadf8067/go.mod h1:+l2f
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/ehazlett/ttlcache v0.0.0-20190820213212-4400e3aef9f0/go.mod h1:D7IiYXsX2n2xixWvFTxGeZucCvvNtI14ikLj6L9Kp9E= github.com/ehazlett/ttlcache v0.0.0-20190820213212-4400e3aef9f0/go.mod h1:D7IiYXsX2n2xixWvFTxGeZucCvvNtI14ikLj6L9Kp9E=
github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs= github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=

View file

@ -34,6 +34,8 @@ import (
var ( var (
// ErrInvalidAuth is returned when an invalid cluster key is specified upon connect // ErrInvalidAuth is returned when an invalid cluster key is specified upon connect
ErrInvalidAuth = errors.New("invalid cluster key specified") ErrInvalidAuth = errors.New("invalid cluster key specified")
// ErrNoMaster is returned if there is no configured master yet
ErrNoMaster = errors.New("no configured master")
) )
// Connect is called when a peer wants to connect to the node // Connect is called when a peer wants to connect to the node
@ -48,6 +50,9 @@ func (s *Server) Connect(ctx context.Context, req *v1.ConnectRequest) (*v1.Conne
} }
data, err := redis.Bytes(s.local(ctx, "GET", masterKey)) data, err := redis.Bytes(s.local(ctx, "GET", masterKey))
if err != nil { if err != nil {
if err == redis.ErrNil {
return nil, ErrNoMaster
}
return nil, err return nil, err
} }
var master v1.Master var master v1.Master

View file

@ -24,6 +24,7 @@ package server
import ( import (
"context" "context"
"net/url" "net/url"
"sort"
"strings" "strings"
"time" "time"
@ -121,6 +122,8 @@ func (s *Server) configureNode() error {
continue continue
} }
go s.replicaMonitor()
return nil return nil
} }
} }
@ -178,6 +181,16 @@ func (s *Server) replicaMonitor() {
for range t.C { for range t.C {
if _, err := redis.Bytes(s.local(context.Background(), "GET", masterKey)); err != nil { if _, err := redis.Bytes(s.local(context.Background(), "GET", masterKey)); err != nil {
if err == redis.ErrNil { if err == redis.ErrNil {
// skip configure until new leader election
n, err := s.getNextMaster(context.Background())
if err != nil {
logrus.Error(err)
continue
}
if n.ID != s.cfg.ID {
logrus.Debugf("waiting for new master to initialize: %s", n.ID)
continue
}
if err := s.configureNode(); err != nil { if err := s.configureNode(); err != nil {
logrus.Error(err) logrus.Error(err)
continue continue
@ -194,6 +207,18 @@ func (s *Server) replicaMonitor() {
t.Stop() t.Stop()
} }
func (s *Server) getNextMaster(ctx context.Context) (*v1.Node, error) {
nodes, err := s.getNodes(ctx)
if err != nil {
return nil, err
}
if len(nodes) == 0 {
return nil, nil
}
sort.SliceStable(nodes, func(i, j int) bool { return nodes[i].Updated.Before(nodes[j].Updated) })
return nodes[len(nodes)-1], nil
}
func (s *Server) masterHeartbeat() { func (s *Server) masterHeartbeat() {
logrus.Debugf("starting master heartbeat: ttl=%s", masterHeartbeatInterval) logrus.Debugf("starting master heartbeat: ttl=%s", masterHeartbeatInterval)
// initial update // initial update
@ -286,6 +311,7 @@ func (s *Server) nodeHeartbeat(ctx context.Context) {
continue continue
} }
node := &v1.Node{ node := &v1.Node{
Updated: time.Now(),
ID: s.cfg.ID, ID: s.cfg.ID,
Addr: s.cfg.GRPCAddress, Addr: s.cfg.GRPCAddress,
KeyPair: keyPair, KeyPair: keyPair,

View file

@ -58,7 +58,7 @@ const (
var ( var (
empty = &ptypes.Empty{} empty = &ptypes.Empty{}
masterHeartbeatInterval = time.Second * 5 masterHeartbeatInterval = time.Second * 5
nodeHeartbeatInterval = time.Second * 60 nodeHeartbeatInterval = time.Second * 15
nodeHeartbeatExpiry = 86400 nodeHeartbeatExpiry = 86400
peerConfigUpdateInterval = time.Second * 10 peerConfigUpdateInterval = time.Second * 10
@ -130,7 +130,6 @@ func (s *Server) Run() error {
go s.replicaMonitor() go s.replicaMonitor()
} else { } else {
// starting as master; remove existing key
if err := s.configureNode(); err != nil { if err := s.configureNode(); err != nil {
return err return err
} }