diff options
author | Pavlo Strokov <pstrokov@gitlab.com> | 2021-12-30 15:22:05 +0300 |
---|---|---|
committer | Pavlo Strokov <pstrokov@gitlab.com> | 2022-01-19 16:12:03 +0300 |
commit | fbd4cd10aa2682df1a9e1a3c85d9aab62e2d683d (patch) | |
tree | 19a78428aedd957e89b6f6f74406bade731943f9 /proto/go | |
parent | a4008155cf965d9d43b34e4cc18221306ca20be7 (diff) |
cmd/praefect: Check of the system clock synchronization
Because check of the authentication token depends on the time
we need to make sure it is synced on the praefect machine and
all gitaly machines that belong to the cluster. That is why
a new check point is added to the 'check' sub-command of the
praefect binary. The task should be run on the praefect node
and doesn't require praefect to be up and running. It is possible
to configure the URL of the NTP service and acceptable time
offset via env variables NTP_HOST and DRIFT_THRESHOLD.
The check has fatal severity because the cluster won't work
correctly if auth checks fail continuously for each request.
Closes: https://gitlab.com/gitlab-org/gitlab/-/issues/342574
Changelog: added
Diffstat (limited to 'proto/go')
-rw-r--r-- | proto/go/gitalypb/server.pb.go | 202 | ||||
-rw-r--r-- | proto/go/gitalypb/server_grpc.pb.go | 40 |
2 files changed, 215 insertions, 27 deletions
diff --git a/proto/go/gitalypb/server.pb.go b/proto/go/gitalypb/server.pb.go index 4b0a76293..a109a94d4 100644 --- a/proto/go/gitalypb/server.pb.go +++ b/proto/go/gitalypb/server.pb.go @@ -206,6 +206,112 @@ func (x *DiskStatisticsResponse) GetStorageStatuses() []*DiskStatisticsResponse_ return nil } +type ClockSyncedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ntp_host is a URL to the external NTP service that should be used for clock sync check. + // Default is ntp.pool.org + NtpHost string `protobuf:"bytes,1,opt,name=ntp_host,json=ntpHost,proto3" json:"ntp_host,omitempty"` + // drift_threshold_millis is an allowed drift from the NTP service in milliseconds. + DriftThresholdMillis int64 `protobuf:"varint,2,opt,name=drift_threshold_millis,json=driftThresholdMillis,proto3" json:"drift_threshold_millis,omitempty"` +} + +func (x *ClockSyncedRequest) Reset() { + *x = ClockSyncedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockSyncedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockSyncedRequest) ProtoMessage() {} + +func (x *ClockSyncedRequest) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClockSyncedRequest.ProtoReflect.Descriptor instead. +func (*ClockSyncedRequest) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{4} +} + +func (x *ClockSyncedRequest) GetNtpHost() string { + if x != nil { + return x.NtpHost + } + return "" +} + +func (x *ClockSyncedRequest) GetDriftThresholdMillis() int64 { + if x != nil { + return x.DriftThresholdMillis + } + return 0 +} + +type ClockSyncedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // synced is set to true if system clock has an affordable drift compared to NTP service. + Synced bool `protobuf:"varint,1,opt,name=synced,proto3" json:"synced,omitempty"` +} + +func (x *ClockSyncedResponse) Reset() { + *x = ClockSyncedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockSyncedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockSyncedResponse) ProtoMessage() {} + +func (x *ClockSyncedResponse) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClockSyncedResponse.ProtoReflect.Descriptor instead. +func (*ClockSyncedResponse) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{5} +} + +func (x *ClockSyncedResponse) GetSynced() bool { + if x != nil { + return x.Synced + } + return false +} + type ServerInfoResponse_StorageStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -222,7 +328,7 @@ type ServerInfoResponse_StorageStatus struct { func (x *ServerInfoResponse_StorageStatus) Reset() { *x = ServerInfoResponse_StorageStatus{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[4] + mi := &file_server_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -235,7 +341,7 @@ func (x *ServerInfoResponse_StorageStatus) String() string { func (*ServerInfoResponse_StorageStatus) ProtoMessage() {} func (x *ServerInfoResponse_StorageStatus) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[4] + mi := &file_server_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -308,7 +414,7 @@ type DiskStatisticsResponse_StorageStatus struct { func (x *DiskStatisticsResponse_StorageStatus) Reset() { *x = DiskStatisticsResponse_StorageStatus{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[5] + mi := &file_server_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -321,7 +427,7 @@ func (x *DiskStatisticsResponse_StorageStatus) String() string { func (*DiskStatisticsResponse_StorageStatus) ProtoMessage() {} func (x *DiskStatisticsResponse_StorageStatus) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[5] + mi := &file_server_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -404,18 +510,32 @@ var file_server_proto_rawDesc = []byte{ 0x72, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x32, 0xab, 0x01, 0x0a, 0x0d, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, - 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x69, 0x73, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x44, 0x69, 0x73, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x1a, 0x04, 0xf0, 0x97, 0x28, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x22, 0x65, 0x0a, 0x12, 0x43, 0x6c, + 0x6f, 0x63, 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x74, 0x70, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6e, 0x74, 0x70, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x64, + 0x72, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x64, 0x72, 0x69, + 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x4d, 0x69, 0x6c, 0x6c, 0x69, + 0x73, 0x22, 0x2d, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x63, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, + 0x32, 0xf5, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x69, + 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x61, + 0x6c, 0x79, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, + 0x79, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x43, 0x6c, 0x6f, 0x63, + 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x12, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, + 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2e, 0x43, 0x6c, 0x6f, + 0x63, 0x6b, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x1a, 0x04, 0xf0, 0x97, 0x28, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2d, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x2f, 0x76, 0x31, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x79, 0x70, 0x62, 0x62, 0x06, @@ -434,24 +554,28 @@ func file_server_proto_rawDescGZIP() []byte { return file_server_proto_rawDescData } -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_server_proto_goTypes = []interface{}{ (*ServerInfoRequest)(nil), // 0: gitaly.ServerInfoRequest (*ServerInfoResponse)(nil), // 1: gitaly.ServerInfoResponse (*DiskStatisticsRequest)(nil), // 2: gitaly.DiskStatisticsRequest (*DiskStatisticsResponse)(nil), // 3: gitaly.DiskStatisticsResponse - (*ServerInfoResponse_StorageStatus)(nil), // 4: gitaly.ServerInfoResponse.StorageStatus - (*DiskStatisticsResponse_StorageStatus)(nil), // 5: gitaly.DiskStatisticsResponse.StorageStatus + (*ClockSyncedRequest)(nil), // 4: gitaly.ClockSyncedRequest + (*ClockSyncedResponse)(nil), // 5: gitaly.ClockSyncedResponse + (*ServerInfoResponse_StorageStatus)(nil), // 6: gitaly.ServerInfoResponse.StorageStatus + (*DiskStatisticsResponse_StorageStatus)(nil), // 7: gitaly.DiskStatisticsResponse.StorageStatus } var file_server_proto_depIdxs = []int32{ - 4, // 0: gitaly.ServerInfoResponse.storage_statuses:type_name -> gitaly.ServerInfoResponse.StorageStatus - 5, // 1: gitaly.DiskStatisticsResponse.storage_statuses:type_name -> gitaly.DiskStatisticsResponse.StorageStatus + 6, // 0: gitaly.ServerInfoResponse.storage_statuses:type_name -> gitaly.ServerInfoResponse.StorageStatus + 7, // 1: gitaly.DiskStatisticsResponse.storage_statuses:type_name -> gitaly.DiskStatisticsResponse.StorageStatus 0, // 2: gitaly.ServerService.ServerInfo:input_type -> gitaly.ServerInfoRequest 2, // 3: gitaly.ServerService.DiskStatistics:input_type -> gitaly.DiskStatisticsRequest - 1, // 4: gitaly.ServerService.ServerInfo:output_type -> gitaly.ServerInfoResponse - 3, // 5: gitaly.ServerService.DiskStatistics:output_type -> gitaly.DiskStatisticsResponse - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type + 4, // 4: gitaly.ServerService.ClockSynced:input_type -> gitaly.ClockSyncedRequest + 1, // 5: gitaly.ServerService.ServerInfo:output_type -> gitaly.ServerInfoResponse + 3, // 6: gitaly.ServerService.DiskStatistics:output_type -> gitaly.DiskStatisticsResponse + 5, // 7: gitaly.ServerService.ClockSynced:output_type -> gitaly.ClockSyncedResponse + 5, // [5:8] is the sub-list for method output_type + 2, // [2:5] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name 2, // [2:2] is the sub-list for extension extendee 0, // [0:2] is the sub-list for field type_name @@ -513,7 +637,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerInfoResponse_StorageStatus); i { + switch v := v.(*ClockSyncedRequest); i { case 0: return &v.state case 1: @@ -525,6 +649,30 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockSyncedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerInfoResponse_StorageStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiskStatisticsResponse_StorageStatus); i { case 0: return &v.state @@ -543,7 +691,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 0, - NumMessages: 6, + NumMessages: 8, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gitalypb/server_grpc.pb.go b/proto/go/gitalypb/server_grpc.pb.go index 9cbeb67c6..7c23f806f 100644 --- a/proto/go/gitalypb/server_grpc.pb.go +++ b/proto/go/gitalypb/server_grpc.pb.go @@ -20,6 +20,9 @@ const _ = grpc.SupportPackageIsVersion7 type ServerServiceClient interface { ServerInfo(ctx context.Context, in *ServerInfoRequest, opts ...grpc.CallOption) (*ServerInfoResponse, error) DiskStatistics(ctx context.Context, in *DiskStatisticsRequest, opts ...grpc.CallOption) (*DiskStatisticsResponse, error) + // ClockSynced checks if machine clock is synced + // (the offset is less that the one passed in the request). + ClockSynced(ctx context.Context, in *ClockSyncedRequest, opts ...grpc.CallOption) (*ClockSyncedResponse, error) } type serverServiceClient struct { @@ -48,12 +51,24 @@ func (c *serverServiceClient) DiskStatistics(ctx context.Context, in *DiskStatis return out, nil } +func (c *serverServiceClient) ClockSynced(ctx context.Context, in *ClockSyncedRequest, opts ...grpc.CallOption) (*ClockSyncedResponse, error) { + out := new(ClockSyncedResponse) + err := c.cc.Invoke(ctx, "/gitaly.ServerService/ClockSynced", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ServerServiceServer is the server API for ServerService service. // All implementations must embed UnimplementedServerServiceServer // for forward compatibility type ServerServiceServer interface { ServerInfo(context.Context, *ServerInfoRequest) (*ServerInfoResponse, error) DiskStatistics(context.Context, *DiskStatisticsRequest) (*DiskStatisticsResponse, error) + // ClockSynced checks if machine clock is synced + // (the offset is less that the one passed in the request). + ClockSynced(context.Context, *ClockSyncedRequest) (*ClockSyncedResponse, error) mustEmbedUnimplementedServerServiceServer() } @@ -67,6 +82,9 @@ func (UnimplementedServerServiceServer) ServerInfo(context.Context, *ServerInfoR func (UnimplementedServerServiceServer) DiskStatistics(context.Context, *DiskStatisticsRequest) (*DiskStatisticsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DiskStatistics not implemented") } +func (UnimplementedServerServiceServer) ClockSynced(context.Context, *ClockSyncedRequest) (*ClockSyncedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClockSynced not implemented") +} func (UnimplementedServerServiceServer) mustEmbedUnimplementedServerServiceServer() {} // UnsafeServerServiceServer may be embedded to opt out of forward compatibility for this service. @@ -116,6 +134,24 @@ func _ServerService_DiskStatistics_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _ServerService_ClockSynced_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClockSyncedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServerServiceServer).ClockSynced(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitaly.ServerService/ClockSynced", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServerServiceServer).ClockSynced(ctx, req.(*ClockSyncedRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ServerService_ServiceDesc is the grpc.ServiceDesc for ServerService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -131,6 +167,10 @@ var ServerService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DiskStatistics", Handler: _ServerService_DiskStatistics_Handler, }, + { + MethodName: "ClockSynced", + Handler: _ServerService_ClockSynced_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "server.proto", |