feat: add ListSeedPeers api in manager (#206)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2023-11-08 15:40:10 +08:00 committed by GitHub
parent 964efcfbb5
commit b0a16ac091
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 2309 additions and 943 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "dragonfly-api"
version = "2.0.42"
version = "2.0.43"
authors = ["Gaius <gaius.qi@gmail.com>"]
edition = "2021"
license = "Apache-2.0"

File diff suppressed because it is too large Load Diff

View File

@ -512,6 +512,338 @@ var _ interface {
ErrorName() string
} = GetSeedPeerRequestValidationError{}
// Validate checks the field values on ListSeedPeersRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *ListSeedPeersRequest) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ListSeedPeersRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ListSeedPeersRequestMultiError, or nil if none found.
func (m *ListSeedPeersRequest) ValidateAll() error {
return m.validate(true)
}
func (m *ListSeedPeersRequest) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
if _, ok := SourceType_name[int32(m.GetSourceType())]; !ok {
err := ListSeedPeersRequestValidationError{
field: "SourceType",
reason: "value must be one of the defined enum values",
}
if !all {
return err
}
errors = append(errors, err)
}
if err := m._validateHostname(m.GetHostname()); err != nil {
err = ListSeedPeersRequestValidationError{
field: "Hostname",
reason: "value must be a valid hostname",
cause: err,
}
if !all {
return err
}
errors = append(errors, err)
}
if ip := net.ParseIP(m.GetIp()); ip == nil {
err := ListSeedPeersRequestValidationError{
field: "Ip",
reason: "value must be a valid IP address",
}
if !all {
return err
}
errors = append(errors, err)
}
if m.GetVersion() != "" {
if l := utf8.RuneCountInString(m.GetVersion()); l < 1 || l > 1024 {
err := ListSeedPeersRequestValidationError{
field: "Version",
reason: "value length must be between 1 and 1024 runes, inclusive",
}
if !all {
return err
}
errors = append(errors, err)
}
}
if m.GetCommit() != "" {
if l := utf8.RuneCountInString(m.GetCommit()); l < 1 || l > 1024 {
err := ListSeedPeersRequestValidationError{
field: "Commit",
reason: "value length must be between 1 and 1024 runes, inclusive",
}
if !all {
return err
}
errors = append(errors, err)
}
}
if len(errors) > 0 {
return ListSeedPeersRequestMultiError(errors)
}
return nil
}
func (m *ListSeedPeersRequest) _validateHostname(host string) error {
s := strings.ToLower(strings.TrimSuffix(host, "."))
if len(host) > 253 {
return errors.New("hostname cannot exceed 253 characters")
}
for _, part := range strings.Split(s, ".") {
if l := len(part); l == 0 || l > 63 {
return errors.New("hostname part must be non-empty and cannot exceed 63 characters")
}
if part[0] == '-' {
return errors.New("hostname parts cannot begin with hyphens")
}
if part[len(part)-1] == '-' {
return errors.New("hostname parts cannot end with hyphens")
}
for _, r := range part {
if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' {
return fmt.Errorf("hostname parts can only contain alphanumeric characters or hyphens, got %q", string(r))
}
}
}
return nil
}
// ListSeedPeersRequestMultiError is an error wrapping multiple validation
// errors returned by ListSeedPeersRequest.ValidateAll() if the designated
// constraints aren't met.
type ListSeedPeersRequestMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ListSeedPeersRequestMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ListSeedPeersRequestMultiError) AllErrors() []error { return m }
// ListSeedPeersRequestValidationError is the validation error returned by
// ListSeedPeersRequest.Validate if the designated constraints aren't met.
type ListSeedPeersRequestValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ListSeedPeersRequestValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ListSeedPeersRequestValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ListSeedPeersRequestValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ListSeedPeersRequestValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ListSeedPeersRequestValidationError) ErrorName() string {
return "ListSeedPeersRequestValidationError"
}
// Error satisfies the builtin error interface
func (e ListSeedPeersRequestValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sListSeedPeersRequest.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ListSeedPeersRequestValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ListSeedPeersRequestValidationError{}
// Validate checks the field values on ListSeedPeersResponse with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *ListSeedPeersResponse) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ListSeedPeersResponse with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ListSeedPeersResponseMultiError, or nil if none found.
func (m *ListSeedPeersResponse) ValidateAll() error {
return m.validate(true)
}
func (m *ListSeedPeersResponse) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
for idx, item := range m.GetSeedPeers() {
_, _ = idx, item
if all {
switch v := interface{}(item).(type) {
case interface{ ValidateAll() error }:
if err := v.ValidateAll(); err != nil {
errors = append(errors, ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
})
}
case interface{ Validate() error }:
if err := v.Validate(); err != nil {
errors = append(errors, ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
})
}
}
} else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
if err := v.Validate(); err != nil {
return ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
}
}
}
}
if len(errors) > 0 {
return ListSeedPeersResponseMultiError(errors)
}
return nil
}
// ListSeedPeersResponseMultiError is an error wrapping multiple validation
// errors returned by ListSeedPeersResponse.ValidateAll() if the designated
// constraints aren't met.
type ListSeedPeersResponseMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ListSeedPeersResponseMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ListSeedPeersResponseMultiError) AllErrors() []error { return m }
// ListSeedPeersResponseValidationError is the validation error returned by
// ListSeedPeersResponse.Validate if the designated constraints aren't met.
type ListSeedPeersResponseValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ListSeedPeersResponseValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ListSeedPeersResponseValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ListSeedPeersResponseValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ListSeedPeersResponseValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ListSeedPeersResponseValidationError) ErrorName() string {
return "ListSeedPeersResponseValidationError"
}
// Error satisfies the builtin error interface
func (e ListSeedPeersResponseValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sListSeedPeersResponse.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ListSeedPeersResponseValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ListSeedPeersResponseValidationError{}
// Validate checks the field values on UpdateSeedPeerRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.

View File

@ -88,6 +88,26 @@ message GetSeedPeerRequest {
string ip = 4 [(validate.rules).string = {ip: true, ignore_empty: true}];
}
// ListSeedPeersRequest represents request of ListSeedPeers.
message ListSeedPeersRequest {
// Request source type.
SourceType source_type = 1 [(validate.rules).enum.defined_only = true];
// Source service hostname.
string hostname = 2 [(validate.rules).string.hostname = true];
// Source service ip.
string ip = 3 [(validate.rules).string.ip = true];
// Dfdaemon version.
string version = 4 [(validate.rules).string = {min_len: 1, max_len: 1024, ignore_empty: true}];
// Dfdaemon commit.
string commit = 5 [(validate.rules).string = {min_len: 1, max_len: 1024, ignore_empty: true}];
}
// ListSeedPeersResponse represents response of ListSeedPeers.
message ListSeedPeersResponse {
// Seed peers to which the source service belongs.
repeated SeedPeer seed_peers = 1;
}
// UpdateSeedPeerRequest represents request of UpdateSeedPeer.
message UpdateSeedPeerRequest {
// Request source type.
@ -367,6 +387,9 @@ service Manager {
// Get SeedPeer and SeedPeer cluster configuration.
rpc GetSeedPeer(GetSeedPeerRequest) returns(SeedPeer);
// List acitve schedulers configuration.
rpc ListSeedPeers(ListSeedPeersRequest)returns(ListSeedPeersResponse);
// Update SeedPeer configuration.
rpc UpdateSeedPeer(UpdateSeedPeerRequest) returns(SeedPeer);

View File

@ -25,6 +25,8 @@ const _ = grpc.SupportPackageIsVersion7
type ManagerClient interface {
// Get SeedPeer and SeedPeer cluster configuration.
GetSeedPeer(ctx context.Context, in *GetSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error)
// List acitve schedulers configuration.
ListSeedPeers(ctx context.Context, in *ListSeedPeersRequest, opts ...grpc.CallOption) (*ListSeedPeersResponse, error)
// Update SeedPeer configuration.
UpdateSeedPeer(ctx context.Context, in *UpdateSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error)
// Get Scheduler and Scheduler cluster configuration.
@ -62,6 +64,15 @@ func (c *managerClient) GetSeedPeer(ctx context.Context, in *GetSeedPeerRequest,
return out, nil
}
func (c *managerClient) ListSeedPeers(ctx context.Context, in *ListSeedPeersRequest, opts ...grpc.CallOption) (*ListSeedPeersResponse, error) {
out := new(ListSeedPeersResponse)
err := c.cc.Invoke(ctx, "/manager.Manager/ListSeedPeers", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *managerClient) UpdateSeedPeer(ctx context.Context, in *UpdateSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error) {
out := new(SeedPeer)
err := c.cc.Invoke(ctx, "/manager.Manager/UpdateSeedPeer", in, out, opts...)
@ -174,6 +185,8 @@ func (x *managerKeepAliveClient) CloseAndRecv() (*emptypb.Empty, error) {
type ManagerServer interface {
// Get SeedPeer and SeedPeer cluster configuration.
GetSeedPeer(context.Context, *GetSeedPeerRequest) (*SeedPeer, error)
// List acitve schedulers configuration.
ListSeedPeers(context.Context, *ListSeedPeersRequest) (*ListSeedPeersResponse, error)
// Update SeedPeer configuration.
UpdateSeedPeer(context.Context, *UpdateSeedPeerRequest) (*SeedPeer, error)
// Get Scheduler and Scheduler cluster configuration.
@ -201,6 +214,9 @@ type UnimplementedManagerServer struct {
func (UnimplementedManagerServer) GetSeedPeer(context.Context, *GetSeedPeerRequest) (*SeedPeer, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSeedPeer not implemented")
}
func (UnimplementedManagerServer) ListSeedPeers(context.Context, *ListSeedPeersRequest) (*ListSeedPeersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListSeedPeers not implemented")
}
func (UnimplementedManagerServer) UpdateSeedPeer(context.Context, *UpdateSeedPeerRequest) (*SeedPeer, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateSeedPeer not implemented")
}
@ -258,6 +274,24 @@ func _Manager_GetSeedPeer_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _Manager_ListSeedPeers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListSeedPeersRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ManagerServer).ListSeedPeers(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/manager.Manager/ListSeedPeers",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ManagerServer).ListSeedPeers(ctx, req.(*ListSeedPeersRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Manager_UpdateSeedPeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateSeedPeerRequest)
if err := dec(in); err != nil {
@ -439,6 +473,10 @@ var Manager_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetSeedPeer",
Handler: _Manager_GetSeedPeer_Handler,
},
{
MethodName: "ListSeedPeers",
Handler: _Manager_ListSeedPeers_Handler,
},
{
MethodName: "UpdateSeedPeer",
Handler: _Manager_UpdateSeedPeer_Handler,

View File

@ -202,6 +202,26 @@ func (mr *MockManagerClientMockRecorder) ListSchedulers(ctx, in any, opts ...any
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSchedulers", reflect.TypeOf((*MockManagerClient)(nil).ListSchedulers), varargs...)
}
// ListSeedPeers mocks base method.
func (m *MockManagerClient) ListSeedPeers(ctx context.Context, in *manager.ListSeedPeersRequest, opts ...grpc.CallOption) (*manager.ListSeedPeersResponse, error) {
m.ctrl.T.Helper()
varargs := []any{ctx, in}
for _, a := range opts {
varargs = append(varargs, a)
}
ret := m.ctrl.Call(m, "ListSeedPeers", varargs...)
ret0, _ := ret[0].(*manager.ListSeedPeersResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ListSeedPeers indicates an expected call of ListSeedPeers.
func (mr *MockManagerClientMockRecorder) ListSeedPeers(ctx, in any, opts ...any) *gomock.Call {
mr.mock.ctrl.T.Helper()
varargs := append([]any{ctx, in}, opts...)
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSeedPeers", reflect.TypeOf((*MockManagerClient)(nil).ListSeedPeers), varargs...)
}
// UpdateScheduler mocks base method.
func (m *MockManagerClient) UpdateScheduler(ctx context.Context, in *manager.UpdateSchedulerRequest, opts ...grpc.CallOption) (*manager.Scheduler, error) {
m.ctrl.T.Helper()
@ -521,6 +541,21 @@ func (mr *MockManagerServerMockRecorder) ListSchedulers(arg0, arg1 any) *gomock.
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSchedulers", reflect.TypeOf((*MockManagerServer)(nil).ListSchedulers), arg0, arg1)
}
// ListSeedPeers mocks base method.
func (m *MockManagerServer) ListSeedPeers(arg0 context.Context, arg1 *manager.ListSeedPeersRequest) (*manager.ListSeedPeersResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ListSeedPeers", arg0, arg1)
ret0, _ := ret[0].(*manager.ListSeedPeersResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ListSeedPeers indicates an expected call of ListSeedPeers.
func (mr *MockManagerServerMockRecorder) ListSeedPeers(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSeedPeers", reflect.TypeOf((*MockManagerServer)(nil).ListSeedPeers), arg0, arg1)
}
// UpdateScheduler mocks base method.
func (m *MockManagerServer) UpdateScheduler(arg0 context.Context, arg1 *manager.UpdateSchedulerRequest) (*manager.Scheduler, error) {
m.ctrl.T.Helper()

File diff suppressed because it is too large Load Diff

View File

@ -516,6 +516,338 @@ var _ interface {
ErrorName() string
} = GetSeedPeerRequestValidationError{}
// Validate checks the field values on ListSeedPeersRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *ListSeedPeersRequest) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ListSeedPeersRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ListSeedPeersRequestMultiError, or nil if none found.
func (m *ListSeedPeersRequest) ValidateAll() error {
return m.validate(true)
}
func (m *ListSeedPeersRequest) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
if _, ok := SourceType_name[int32(m.GetSourceType())]; !ok {
err := ListSeedPeersRequestValidationError{
field: "SourceType",
reason: "value must be one of the defined enum values",
}
if !all {
return err
}
errors = append(errors, err)
}
if err := m._validateHostname(m.GetHostname()); err != nil {
err = ListSeedPeersRequestValidationError{
field: "Hostname",
reason: "value must be a valid hostname",
cause: err,
}
if !all {
return err
}
errors = append(errors, err)
}
if ip := net.ParseIP(m.GetIp()); ip == nil {
err := ListSeedPeersRequestValidationError{
field: "Ip",
reason: "value must be a valid IP address",
}
if !all {
return err
}
errors = append(errors, err)
}
if m.GetVersion() != "" {
if l := utf8.RuneCountInString(m.GetVersion()); l < 1 || l > 1024 {
err := ListSeedPeersRequestValidationError{
field: "Version",
reason: "value length must be between 1 and 1024 runes, inclusive",
}
if !all {
return err
}
errors = append(errors, err)
}
}
if m.GetCommit() != "" {
if l := utf8.RuneCountInString(m.GetCommit()); l < 1 || l > 1024 {
err := ListSeedPeersRequestValidationError{
field: "Commit",
reason: "value length must be between 1 and 1024 runes, inclusive",
}
if !all {
return err
}
errors = append(errors, err)
}
}
if len(errors) > 0 {
return ListSeedPeersRequestMultiError(errors)
}
return nil
}
func (m *ListSeedPeersRequest) _validateHostname(host string) error {
s := strings.ToLower(strings.TrimSuffix(host, "."))
if len(host) > 253 {
return errors.New("hostname cannot exceed 253 characters")
}
for _, part := range strings.Split(s, ".") {
if l := len(part); l == 0 || l > 63 {
return errors.New("hostname part must be non-empty and cannot exceed 63 characters")
}
if part[0] == '-' {
return errors.New("hostname parts cannot begin with hyphens")
}
if part[len(part)-1] == '-' {
return errors.New("hostname parts cannot end with hyphens")
}
for _, r := range part {
if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' {
return fmt.Errorf("hostname parts can only contain alphanumeric characters or hyphens, got %q", string(r))
}
}
}
return nil
}
// ListSeedPeersRequestMultiError is an error wrapping multiple validation
// errors returned by ListSeedPeersRequest.ValidateAll() if the designated
// constraints aren't met.
type ListSeedPeersRequestMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ListSeedPeersRequestMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ListSeedPeersRequestMultiError) AllErrors() []error { return m }
// ListSeedPeersRequestValidationError is the validation error returned by
// ListSeedPeersRequest.Validate if the designated constraints aren't met.
type ListSeedPeersRequestValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ListSeedPeersRequestValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ListSeedPeersRequestValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ListSeedPeersRequestValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ListSeedPeersRequestValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ListSeedPeersRequestValidationError) ErrorName() string {
return "ListSeedPeersRequestValidationError"
}
// Error satisfies the builtin error interface
func (e ListSeedPeersRequestValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sListSeedPeersRequest.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ListSeedPeersRequestValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ListSeedPeersRequestValidationError{}
// Validate checks the field values on ListSeedPeersResponse with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *ListSeedPeersResponse) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ListSeedPeersResponse with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ListSeedPeersResponseMultiError, or nil if none found.
func (m *ListSeedPeersResponse) ValidateAll() error {
return m.validate(true)
}
func (m *ListSeedPeersResponse) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
for idx, item := range m.GetSeedPeers() {
_, _ = idx, item
if all {
switch v := interface{}(item).(type) {
case interface{ ValidateAll() error }:
if err := v.ValidateAll(); err != nil {
errors = append(errors, ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
})
}
case interface{ Validate() error }:
if err := v.Validate(); err != nil {
errors = append(errors, ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
})
}
}
} else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
if err := v.Validate(); err != nil {
return ListSeedPeersResponseValidationError{
field: fmt.Sprintf("SeedPeers[%v]", idx),
reason: "embedded message failed validation",
cause: err,
}
}
}
}
if len(errors) > 0 {
return ListSeedPeersResponseMultiError(errors)
}
return nil
}
// ListSeedPeersResponseMultiError is an error wrapping multiple validation
// errors returned by ListSeedPeersResponse.ValidateAll() if the designated
// constraints aren't met.
type ListSeedPeersResponseMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ListSeedPeersResponseMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ListSeedPeersResponseMultiError) AllErrors() []error { return m }
// ListSeedPeersResponseValidationError is the validation error returned by
// ListSeedPeersResponse.Validate if the designated constraints aren't met.
type ListSeedPeersResponseValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ListSeedPeersResponseValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ListSeedPeersResponseValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ListSeedPeersResponseValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ListSeedPeersResponseValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ListSeedPeersResponseValidationError) ErrorName() string {
return "ListSeedPeersResponseValidationError"
}
// Error satisfies the builtin error interface
func (e ListSeedPeersResponseValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sListSeedPeersResponse.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ListSeedPeersResponseValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ListSeedPeersResponseValidationError{}
// Validate checks the field values on UpdateSeedPeerRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.

View File

@ -88,6 +88,26 @@ message GetSeedPeerRequest {
string ip = 4 [(validate.rules).string = {ip: true, ignore_empty: true}];
}
// ListSeedPeersRequest represents request of ListSeedPeers.
message ListSeedPeersRequest {
// Request source type.
SourceType source_type = 1 [(validate.rules).enum.defined_only = true];
// Source service hostname.
string hostname = 2 [(validate.rules).string.hostname = true];
// Source service ip.
string ip = 3 [(validate.rules).string.ip = true];
// Dfdaemon version.
string version = 4 [(validate.rules).string = {min_len: 1, max_len: 1024, ignore_empty: true}];
// Dfdaemon commit.
string commit = 5 [(validate.rules).string = {min_len: 1, max_len: 1024, ignore_empty: true}];
}
// ListSeedPeersResponse represents response of ListSeedPeers.
message ListSeedPeersResponse {
// Seed peers to which the source service belongs.
repeated SeedPeer seed_peers = 1;
}
// UpdateSeedPeerRequest represents request of UpdateSeedPeer.
message UpdateSeedPeerRequest {
// Request source type.
@ -375,6 +395,9 @@ service Manager {
// Get SeedPeer and SeedPeer cluster configuration.
rpc GetSeedPeer(GetSeedPeerRequest) returns(SeedPeer);
// List acitve schedulers configuration.
rpc ListSeedPeers(ListSeedPeersRequest)returns(ListSeedPeersResponse);
// Update SeedPeer configuration.
rpc UpdateSeedPeer(UpdateSeedPeerRequest) returns(SeedPeer);

View File

@ -25,6 +25,8 @@ const _ = grpc.SupportPackageIsVersion7
type ManagerClient interface {
// Get SeedPeer and SeedPeer cluster configuration.
GetSeedPeer(ctx context.Context, in *GetSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error)
// List acitve schedulers configuration.
ListSeedPeers(ctx context.Context, in *ListSeedPeersRequest, opts ...grpc.CallOption) (*ListSeedPeersResponse, error)
// Update SeedPeer configuration.
UpdateSeedPeer(ctx context.Context, in *UpdateSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error)
// Delete SeedPeer configuration.
@ -64,6 +66,15 @@ func (c *managerClient) GetSeedPeer(ctx context.Context, in *GetSeedPeerRequest,
return out, nil
}
func (c *managerClient) ListSeedPeers(ctx context.Context, in *ListSeedPeersRequest, opts ...grpc.CallOption) (*ListSeedPeersResponse, error) {
out := new(ListSeedPeersResponse)
err := c.cc.Invoke(ctx, "/manager.v2.Manager/ListSeedPeers", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *managerClient) UpdateSeedPeer(ctx context.Context, in *UpdateSeedPeerRequest, opts ...grpc.CallOption) (*SeedPeer, error) {
out := new(SeedPeer)
err := c.cc.Invoke(ctx, "/manager.v2.Manager/UpdateSeedPeer", in, out, opts...)
@ -185,6 +196,8 @@ func (x *managerKeepAliveClient) CloseAndRecv() (*emptypb.Empty, error) {
type ManagerServer interface {
// Get SeedPeer and SeedPeer cluster configuration.
GetSeedPeer(context.Context, *GetSeedPeerRequest) (*SeedPeer, error)
// List acitve schedulers configuration.
ListSeedPeers(context.Context, *ListSeedPeersRequest) (*ListSeedPeersResponse, error)
// Update SeedPeer configuration.
UpdateSeedPeer(context.Context, *UpdateSeedPeerRequest) (*SeedPeer, error)
// Delete SeedPeer configuration.
@ -214,6 +227,9 @@ type UnimplementedManagerServer struct {
func (UnimplementedManagerServer) GetSeedPeer(context.Context, *GetSeedPeerRequest) (*SeedPeer, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSeedPeer not implemented")
}
func (UnimplementedManagerServer) ListSeedPeers(context.Context, *ListSeedPeersRequest) (*ListSeedPeersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListSeedPeers not implemented")
}
func (UnimplementedManagerServer) UpdateSeedPeer(context.Context, *UpdateSeedPeerRequest) (*SeedPeer, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateSeedPeer not implemented")
}
@ -274,6 +290,24 @@ func _Manager_GetSeedPeer_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _Manager_ListSeedPeers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListSeedPeersRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ManagerServer).ListSeedPeers(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/manager.v2.Manager/ListSeedPeers",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ManagerServer).ListSeedPeers(ctx, req.(*ListSeedPeersRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Manager_UpdateSeedPeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateSeedPeerRequest)
if err := dec(in); err != nil {
@ -473,6 +507,10 @@ var Manager_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetSeedPeer",
Handler: _Manager_GetSeedPeer_Handler,
},
{
MethodName: "ListSeedPeers",
Handler: _Manager_ListSeedPeers_Handler,
},
{
MethodName: "UpdateSeedPeer",
Handler: _Manager_UpdateSeedPeer_Handler,

View File

@ -222,6 +222,26 @@ func (mr *MockManagerClientMockRecorder) ListSchedulers(ctx, in any, opts ...any
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSchedulers", reflect.TypeOf((*MockManagerClient)(nil).ListSchedulers), varargs...)
}
// ListSeedPeers mocks base method.
func (m *MockManagerClient) ListSeedPeers(ctx context.Context, in *manager.ListSeedPeersRequest, opts ...grpc.CallOption) (*manager.ListSeedPeersResponse, error) {
m.ctrl.T.Helper()
varargs := []any{ctx, in}
for _, a := range opts {
varargs = append(varargs, a)
}
ret := m.ctrl.Call(m, "ListSeedPeers", varargs...)
ret0, _ := ret[0].(*manager.ListSeedPeersResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ListSeedPeers indicates an expected call of ListSeedPeers.
func (mr *MockManagerClientMockRecorder) ListSeedPeers(ctx, in any, opts ...any) *gomock.Call {
mr.mock.ctrl.T.Helper()
varargs := append([]any{ctx, in}, opts...)
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSeedPeers", reflect.TypeOf((*MockManagerClient)(nil).ListSeedPeers), varargs...)
}
// UpdateScheduler mocks base method.
func (m *MockManagerClient) UpdateScheduler(ctx context.Context, in *manager.UpdateSchedulerRequest, opts ...grpc.CallOption) (*manager.Scheduler, error) {
m.ctrl.T.Helper()
@ -556,6 +576,21 @@ func (mr *MockManagerServerMockRecorder) ListSchedulers(arg0, arg1 any) *gomock.
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSchedulers", reflect.TypeOf((*MockManagerServer)(nil).ListSchedulers), arg0, arg1)
}
// ListSeedPeers mocks base method.
func (m *MockManagerServer) ListSeedPeers(arg0 context.Context, arg1 *manager.ListSeedPeersRequest) (*manager.ListSeedPeersResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ListSeedPeers", arg0, arg1)
ret0, _ := ret[0].(*manager.ListSeedPeersResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// ListSeedPeers indicates an expected call of ListSeedPeers.
func (mr *MockManagerServerMockRecorder) ListSeedPeers(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSeedPeers", reflect.TypeOf((*MockManagerServer)(nil).ListSeedPeers), arg0, arg1)
}
// UpdateScheduler mocks base method.
func (m *MockManagerServer) UpdateScheduler(arg0 context.Context, arg1 *manager.UpdateSchedulerRequest) (*manager.Scheduler, error) {
m.ctrl.T.Helper()

View File

@ -85,6 +85,26 @@ message GetSeedPeerRequest {
string ip = 4;
}
// ListSeedPeersRequest represents request of ListSeedPeers.
message ListSeedPeersRequest {
// Request source type.
SourceType source_type = 1;
// Source service hostname.
string hostname = 2;
// Source service ip.
string ip = 3;
// Dfdaemon version.
string version = 4;
// Dfdaemon commit.
string commit = 5;
}
// ListSeedPeersResponse represents response of ListSeedPeers.
message ListSeedPeersResponse {
// Seed peers to which the source service belongs.
repeated SeedPeer seed_peers = 1;
}
// UpdateSeedPeerRequest represents request of UpdateSeedPeer.
message UpdateSeedPeerRequest {
// Request source type.
@ -370,6 +390,9 @@ service Manager {
// Get SeedPeer and SeedPeer cluster configuration.
rpc GetSeedPeer(GetSeedPeerRequest) returns(SeedPeer);
// List acitve schedulers configuration.
rpc ListSeedPeers(ListSeedPeersRequest)returns(ListSeedPeersResponse);
// Update SeedPeer configuration.
rpc UpdateSeedPeer(UpdateSeedPeerRequest) returns(SeedPeer);

Binary file not shown.

View File

@ -79,6 +79,36 @@ pub struct GetSeedPeerRequest {
#[prost(string, tag = "4")]
pub ip: ::prost::alloc::string::String,
}
/// ListSeedPeersRequest represents request of ListSeedPeers.
#[derive(serde::Serialize, serde::Deserialize)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSeedPeersRequest {
/// Request source type.
#[prost(enumeration = "SourceType", tag = "1")]
pub source_type: i32,
/// Source service hostname.
#[prost(string, tag = "2")]
pub hostname: ::prost::alloc::string::String,
/// Source service ip.
#[prost(string, tag = "3")]
pub ip: ::prost::alloc::string::String,
/// Dfdaemon version.
#[prost(string, tag = "4")]
pub version: ::prost::alloc::string::String,
/// Dfdaemon commit.
#[prost(string, tag = "5")]
pub commit: ::prost::alloc::string::String,
}
/// ListSeedPeersResponse represents response of ListSeedPeers.
#[derive(serde::Serialize, serde::Deserialize)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListSeedPeersResponse {
/// Seed peers to which the source service belongs.
#[prost(message, repeated, tag = "1")]
pub seed_peers: ::prost::alloc::vec::Vec<SeedPeer>,
}
/// UpdateSeedPeerRequest represents request of UpdateSeedPeer.
#[derive(serde::Serialize, serde::Deserialize)]
#[allow(clippy::derive_partial_eq_without_eq)]
@ -646,6 +676,32 @@ pub mod manager_client {
.insert(GrpcMethod::new("manager.v2.Manager", "GetSeedPeer"));
self.inner.unary(req, path, codec).await
}
/// List acitve schedulers configuration.
pub async fn list_seed_peers(
&mut self,
request: impl tonic::IntoRequest<super::ListSeedPeersRequest>,
) -> std::result::Result<
tonic::Response<super::ListSeedPeersResponse>,
tonic::Status,
> {
self.inner
.ready()
.await
.map_err(|e| {
tonic::Status::new(
tonic::Code::Unknown,
format!("Service was not ready: {}", e.into()),
)
})?;
let codec = tonic::codec::ProstCodec::default();
let path = http::uri::PathAndQuery::from_static(
"/manager.v2.Manager/ListSeedPeers",
);
let mut req = request.into_request();
req.extensions_mut()
.insert(GrpcMethod::new("manager.v2.Manager", "ListSeedPeers"));
self.inner.unary(req, path, codec).await
}
/// Update SeedPeer configuration.
pub async fn update_seed_peer(
&mut self,
@ -899,6 +955,14 @@ pub mod manager_server {
&self,
request: tonic::Request<super::GetSeedPeerRequest>,
) -> std::result::Result<tonic::Response<super::SeedPeer>, tonic::Status>;
/// List acitve schedulers configuration.
async fn list_seed_peers(
&self,
request: tonic::Request<super::ListSeedPeersRequest>,
) -> std::result::Result<
tonic::Response<super::ListSeedPeersResponse>,
tonic::Status,
>;
/// Update SeedPeer configuration.
async fn update_seed_peer(
&self,
@ -1085,6 +1149,52 @@ pub mod manager_server {
};
Box::pin(fut)
}
"/manager.v2.Manager/ListSeedPeers" => {
#[allow(non_camel_case_types)]
struct ListSeedPeersSvc<T: Manager>(pub Arc<T>);
impl<
T: Manager,
> tonic::server::UnaryService<super::ListSeedPeersRequest>
for ListSeedPeersSvc<T> {
type Response = super::ListSeedPeersResponse;
type Future = BoxFuture<
tonic::Response<Self::Response>,
tonic::Status,
>;
fn call(
&mut self,
request: tonic::Request<super::ListSeedPeersRequest>,
) -> Self::Future {
let inner = Arc::clone(&self.0);
let fut = async move {
(*inner).list_seed_peers(request).await
};
Box::pin(fut)
}
}
let accept_compression_encodings = self.accept_compression_encodings;
let send_compression_encodings = self.send_compression_encodings;
let max_decoding_message_size = self.max_decoding_message_size;
let max_encoding_message_size = self.max_encoding_message_size;
let inner = self.inner.clone();
let fut = async move {
let inner = inner.0;
let method = ListSeedPeersSvc(inner);
let codec = tonic::codec::ProstCodec::default();
let mut grpc = tonic::server::Grpc::new(codec)
.apply_compression_config(
accept_compression_encodings,
send_compression_encodings,
)
.apply_max_message_size_config(
max_decoding_message_size,
max_encoding_message_size,
);
let res = grpc.unary(method, req).await;
Ok(res)
};
Box::pin(fut)
}
"/manager.v2.Manager/UpdateSeedPeer" => {
#[allow(non_camel_case_types)]
struct UpdateSeedPeerSvc<T: Manager>(pub Arc<T>);