diff --git a/api/grpc/mpi/v1/files.pb.go b/api/grpc/mpi/v1/files.pb.go index bb5b50e0d..9ebb60f91 100644 --- a/api/grpc/mpi/v1/files.pb.go +++ b/api/grpc/mpi/v1/files.pb.go @@ -137,67 +137,6 @@ func (SignatureAlgorithm) EnumDescriptor() ([]byte, []int) { return file_mpi_v1_files_proto_rawDescGZIP(), []int{0} } -// Action enumeration -type File_FileAction int32 - -const ( - // Default value, no action - File_FILE_ACTION_UNSPECIFIED File_FileAction = 0 - // No changes to the file - File_FILE_ACTION_UNCHANGED File_FileAction = 1 - // New file - File_FILE_ACTION_ADD File_FileAction = 2 - // Updated file - File_FILE_ACTION_UPDATE File_FileAction = 3 - // File deleted - File_FILE_ACTION_DELETE File_FileAction = 4 -) - -// Enum value maps for File_FileAction. -var ( - File_FileAction_name = map[int32]string{ - 0: "FILE_ACTION_UNSPECIFIED", - 1: "FILE_ACTION_UNCHANGED", - 2: "FILE_ACTION_ADD", - 3: "FILE_ACTION_UPDATE", - 4: "FILE_ACTION_DELETE", - } - File_FileAction_value = map[string]int32{ - "FILE_ACTION_UNSPECIFIED": 0, - "FILE_ACTION_UNCHANGED": 1, - "FILE_ACTION_ADD": 2, - "FILE_ACTION_UPDATE": 3, - "FILE_ACTION_DELETE": 4, - } -) - -func (x File_FileAction) Enum() *File_FileAction { - p := new(File_FileAction) - *p = x - return p -} - -func (x File_FileAction) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (File_FileAction) Descriptor() protoreflect.EnumDescriptor { - return file_mpi_v1_files_proto_enumTypes[1].Descriptor() -} - -func (File_FileAction) Type() protoreflect.EnumType { - return &file_mpi_v1_files_proto_enumTypes[1] -} - -func (x File_FileAction) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use File_FileAction.Descriptor instead. -func (File_FileAction) EnumDescriptor() ([]byte, []int) { - return file_mpi_v1_files_proto_rawDescGZIP(), []int{9, 0} -} - // Represents a data chunk for streaming file transfer. // For any Stream file transfer, following assumptions should be asserted (by implementation): // - invalid to contain more or less than one FileDataChunkHeaders @@ -739,10 +678,8 @@ type File struct { state protoimpl.MessageState `protogen:"open.v1"` // Meta information about the file, the name (including path) and hash FileMeta *FileMeta `protobuf:"bytes,1,opt,name=file_meta,json=fileMeta,proto3" json:"file_meta,omitempty"` - // Optional action - Action *File_FileAction `protobuf:"varint,2,opt,name=action,proto3,enum=mpi.v1.File_FileAction,oneof" json:"action,omitempty"` // Unmanaged files will not be modified - Unmanaged bool `protobuf:"varint,3,opt,name=unmanaged,proto3" json:"unmanaged,omitempty"` + Unmanaged bool `protobuf:"varint,2,opt,name=unmanaged,proto3" json:"unmanaged,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -784,13 +721,6 @@ func (x *File) GetFileMeta() *FileMeta { return nil } -func (x *File) GetAction() File_FileAction { - if x != nil && x.Action != nil { - return *x.Action - } - return File_FILE_ACTION_UNSPECIFIED -} - func (x *File) GetUnmanaged() bool { if x != nil { return x.Unmanaged @@ -1608,19 +1538,10 @@ const file_mpi_v1_files_proto_rawDesc = "" + "\aversion\x18\x02 \x01(\tR\aversion\"p\n" + "\fFileOverview\x12\"\n" + "\x05files\x18\x01 \x03(\v2\f.mpi.v1.FileR\x05files\x12<\n" + - "\x0econfig_version\x18\x02 \x01(\v2\x15.mpi.v1.ConfigVersionR\rconfigVersion\"\xa0\x02\n" + + "\x0econfig_version\x18\x02 \x01(\v2\x15.mpi.v1.ConfigVersionR\rconfigVersion\"S\n" + "\x04File\x12-\n" + - "\tfile_meta\x18\x01 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\x124\n" + - "\x06action\x18\x02 \x01(\x0e2\x17.mpi.v1.File.FileActionH\x00R\x06action\x88\x01\x01\x12\x1c\n" + - "\tunmanaged\x18\x03 \x01(\bR\tunmanaged\"\x89\x01\n" + - "\n" + - "FileAction\x12\x1b\n" + - "\x17FILE_ACTION_UNSPECIFIED\x10\x00\x12\x19\n" + - "\x15FILE_ACTION_UNCHANGED\x10\x01\x12\x13\n" + - "\x0fFILE_ACTION_ADD\x10\x02\x12\x16\n" + - "\x12FILE_ACTION_UPDATE\x10\x03\x12\x16\n" + - "\x12FILE_ACTION_DELETE\x10\x04B\t\n" + - "\a_action\"w\n" + + "\tfile_meta\x18\x01 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\x12\x1c\n" + + "\tunmanaged\x18\x02 \x01(\bR\tunmanaged\"w\n" + "\x0eGetFileRequest\x126\n" + "\fmessage_meta\x18\x01 \x01(\v2\x13.mpi.v1.MessageMetaR\vmessageMeta\x12-\n" + "\tfile_meta\x18\x02 \x01(\v2\x10.mpi.v1.FileMetaR\bfileMeta\"C\n" + @@ -1716,83 +1637,81 @@ func file_mpi_v1_files_proto_rawDescGZIP() []byte { return file_mpi_v1_files_proto_rawDescData } -var file_mpi_v1_files_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_mpi_v1_files_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_mpi_v1_files_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_mpi_v1_files_proto_goTypes = []any{ (SignatureAlgorithm)(0), // 0: mpi.v1.SignatureAlgorithm - (File_FileAction)(0), // 1: mpi.v1.File.FileAction - (*FileDataChunk)(nil), // 2: mpi.v1.FileDataChunk - (*FileDataChunkHeader)(nil), // 3: mpi.v1.FileDataChunkHeader - (*FileDataChunkContent)(nil), // 4: mpi.v1.FileDataChunkContent - (*GetOverviewRequest)(nil), // 5: mpi.v1.GetOverviewRequest - (*GetOverviewResponse)(nil), // 6: mpi.v1.GetOverviewResponse - (*UpdateOverviewRequest)(nil), // 7: mpi.v1.UpdateOverviewRequest - (*UpdateOverviewResponse)(nil), // 8: mpi.v1.UpdateOverviewResponse - (*ConfigVersion)(nil), // 9: mpi.v1.ConfigVersion - (*FileOverview)(nil), // 10: mpi.v1.FileOverview - (*File)(nil), // 11: mpi.v1.File - (*GetFileRequest)(nil), // 12: mpi.v1.GetFileRequest - (*GetFileResponse)(nil), // 13: mpi.v1.GetFileResponse - (*FileContents)(nil), // 14: mpi.v1.FileContents - (*FileMeta)(nil), // 15: mpi.v1.FileMeta - (*UpdateFileRequest)(nil), // 16: mpi.v1.UpdateFileRequest - (*UpdateFileResponse)(nil), // 17: mpi.v1.UpdateFileResponse - (*CertificateMeta)(nil), // 18: mpi.v1.CertificateMeta - (*CertificateDates)(nil), // 19: mpi.v1.CertificateDates - (*SubjectAlternativeNames)(nil), // 20: mpi.v1.SubjectAlternativeNames - (*X509Name)(nil), // 21: mpi.v1.X509Name - (*AttributeTypeAndValue)(nil), // 22: mpi.v1.AttributeTypeAndValue - (*MessageMeta)(nil), // 23: mpi.v1.MessageMeta - (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*FileDataChunk)(nil), // 1: mpi.v1.FileDataChunk + (*FileDataChunkHeader)(nil), // 2: mpi.v1.FileDataChunkHeader + (*FileDataChunkContent)(nil), // 3: mpi.v1.FileDataChunkContent + (*GetOverviewRequest)(nil), // 4: mpi.v1.GetOverviewRequest + (*GetOverviewResponse)(nil), // 5: mpi.v1.GetOverviewResponse + (*UpdateOverviewRequest)(nil), // 6: mpi.v1.UpdateOverviewRequest + (*UpdateOverviewResponse)(nil), // 7: mpi.v1.UpdateOverviewResponse + (*ConfigVersion)(nil), // 8: mpi.v1.ConfigVersion + (*FileOverview)(nil), // 9: mpi.v1.FileOverview + (*File)(nil), // 10: mpi.v1.File + (*GetFileRequest)(nil), // 11: mpi.v1.GetFileRequest + (*GetFileResponse)(nil), // 12: mpi.v1.GetFileResponse + (*FileContents)(nil), // 13: mpi.v1.FileContents + (*FileMeta)(nil), // 14: mpi.v1.FileMeta + (*UpdateFileRequest)(nil), // 15: mpi.v1.UpdateFileRequest + (*UpdateFileResponse)(nil), // 16: mpi.v1.UpdateFileResponse + (*CertificateMeta)(nil), // 17: mpi.v1.CertificateMeta + (*CertificateDates)(nil), // 18: mpi.v1.CertificateDates + (*SubjectAlternativeNames)(nil), // 19: mpi.v1.SubjectAlternativeNames + (*X509Name)(nil), // 20: mpi.v1.X509Name + (*AttributeTypeAndValue)(nil), // 21: mpi.v1.AttributeTypeAndValue + (*MessageMeta)(nil), // 22: mpi.v1.MessageMeta + (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp } var file_mpi_v1_files_proto_depIdxs = []int32{ - 23, // 0: mpi.v1.FileDataChunk.meta:type_name -> mpi.v1.MessageMeta - 3, // 1: mpi.v1.FileDataChunk.header:type_name -> mpi.v1.FileDataChunkHeader - 4, // 2: mpi.v1.FileDataChunk.content:type_name -> mpi.v1.FileDataChunkContent - 15, // 3: mpi.v1.FileDataChunkHeader.file_meta:type_name -> mpi.v1.FileMeta - 23, // 4: mpi.v1.GetOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta - 9, // 5: mpi.v1.GetOverviewRequest.config_version:type_name -> mpi.v1.ConfigVersion - 10, // 6: mpi.v1.GetOverviewResponse.overview:type_name -> mpi.v1.FileOverview - 23, // 7: mpi.v1.UpdateOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta - 10, // 8: mpi.v1.UpdateOverviewRequest.overview:type_name -> mpi.v1.FileOverview - 10, // 9: mpi.v1.UpdateOverviewResponse.overview:type_name -> mpi.v1.FileOverview - 11, // 10: mpi.v1.FileOverview.files:type_name -> mpi.v1.File - 9, // 11: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion - 15, // 12: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta - 1, // 13: mpi.v1.File.action:type_name -> mpi.v1.File.FileAction - 23, // 14: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta - 15, // 15: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta - 14, // 16: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents - 24, // 17: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp - 18, // 18: mpi.v1.FileMeta.certificate_meta:type_name -> mpi.v1.CertificateMeta - 11, // 19: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File - 14, // 20: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents - 23, // 21: mpi.v1.UpdateFileRequest.message_meta:type_name -> mpi.v1.MessageMeta - 15, // 22: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta - 21, // 23: mpi.v1.CertificateMeta.issuer:type_name -> mpi.v1.X509Name - 21, // 24: mpi.v1.CertificateMeta.subject:type_name -> mpi.v1.X509Name - 20, // 25: mpi.v1.CertificateMeta.sans:type_name -> mpi.v1.SubjectAlternativeNames - 19, // 26: mpi.v1.CertificateMeta.dates:type_name -> mpi.v1.CertificateDates - 0, // 27: mpi.v1.CertificateMeta.signature_algorithm:type_name -> mpi.v1.SignatureAlgorithm - 22, // 28: mpi.v1.X509Name.names:type_name -> mpi.v1.AttributeTypeAndValue - 22, // 29: mpi.v1.X509Name.extra_names:type_name -> mpi.v1.AttributeTypeAndValue - 5, // 30: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest - 7, // 31: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest - 12, // 32: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest - 16, // 33: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest - 12, // 34: mpi.v1.FileService.GetFileStream:input_type -> mpi.v1.GetFileRequest - 2, // 35: mpi.v1.FileService.UpdateFileStream:input_type -> mpi.v1.FileDataChunk - 6, // 36: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse - 8, // 37: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse - 13, // 38: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse - 17, // 39: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse - 2, // 40: mpi.v1.FileService.GetFileStream:output_type -> mpi.v1.FileDataChunk - 17, // 41: mpi.v1.FileService.UpdateFileStream:output_type -> mpi.v1.UpdateFileResponse - 36, // [36:42] is the sub-list for method output_type - 30, // [30:36] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 22, // 0: mpi.v1.FileDataChunk.meta:type_name -> mpi.v1.MessageMeta + 2, // 1: mpi.v1.FileDataChunk.header:type_name -> mpi.v1.FileDataChunkHeader + 3, // 2: mpi.v1.FileDataChunk.content:type_name -> mpi.v1.FileDataChunkContent + 14, // 3: mpi.v1.FileDataChunkHeader.file_meta:type_name -> mpi.v1.FileMeta + 22, // 4: mpi.v1.GetOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta + 8, // 5: mpi.v1.GetOverviewRequest.config_version:type_name -> mpi.v1.ConfigVersion + 9, // 6: mpi.v1.GetOverviewResponse.overview:type_name -> mpi.v1.FileOverview + 22, // 7: mpi.v1.UpdateOverviewRequest.message_meta:type_name -> mpi.v1.MessageMeta + 9, // 8: mpi.v1.UpdateOverviewRequest.overview:type_name -> mpi.v1.FileOverview + 9, // 9: mpi.v1.UpdateOverviewResponse.overview:type_name -> mpi.v1.FileOverview + 10, // 10: mpi.v1.FileOverview.files:type_name -> mpi.v1.File + 8, // 11: mpi.v1.FileOverview.config_version:type_name -> mpi.v1.ConfigVersion + 14, // 12: mpi.v1.File.file_meta:type_name -> mpi.v1.FileMeta + 22, // 13: mpi.v1.GetFileRequest.message_meta:type_name -> mpi.v1.MessageMeta + 14, // 14: mpi.v1.GetFileRequest.file_meta:type_name -> mpi.v1.FileMeta + 13, // 15: mpi.v1.GetFileResponse.contents:type_name -> mpi.v1.FileContents + 23, // 16: mpi.v1.FileMeta.modified_time:type_name -> google.protobuf.Timestamp + 17, // 17: mpi.v1.FileMeta.certificate_meta:type_name -> mpi.v1.CertificateMeta + 10, // 18: mpi.v1.UpdateFileRequest.file:type_name -> mpi.v1.File + 13, // 19: mpi.v1.UpdateFileRequest.contents:type_name -> mpi.v1.FileContents + 22, // 20: mpi.v1.UpdateFileRequest.message_meta:type_name -> mpi.v1.MessageMeta + 14, // 21: mpi.v1.UpdateFileResponse.file_meta:type_name -> mpi.v1.FileMeta + 20, // 22: mpi.v1.CertificateMeta.issuer:type_name -> mpi.v1.X509Name + 20, // 23: mpi.v1.CertificateMeta.subject:type_name -> mpi.v1.X509Name + 19, // 24: mpi.v1.CertificateMeta.sans:type_name -> mpi.v1.SubjectAlternativeNames + 18, // 25: mpi.v1.CertificateMeta.dates:type_name -> mpi.v1.CertificateDates + 0, // 26: mpi.v1.CertificateMeta.signature_algorithm:type_name -> mpi.v1.SignatureAlgorithm + 21, // 27: mpi.v1.X509Name.names:type_name -> mpi.v1.AttributeTypeAndValue + 21, // 28: mpi.v1.X509Name.extra_names:type_name -> mpi.v1.AttributeTypeAndValue + 4, // 29: mpi.v1.FileService.GetOverview:input_type -> mpi.v1.GetOverviewRequest + 6, // 30: mpi.v1.FileService.UpdateOverview:input_type -> mpi.v1.UpdateOverviewRequest + 11, // 31: mpi.v1.FileService.GetFile:input_type -> mpi.v1.GetFileRequest + 15, // 32: mpi.v1.FileService.UpdateFile:input_type -> mpi.v1.UpdateFileRequest + 11, // 33: mpi.v1.FileService.GetFileStream:input_type -> mpi.v1.GetFileRequest + 1, // 34: mpi.v1.FileService.UpdateFileStream:input_type -> mpi.v1.FileDataChunk + 5, // 35: mpi.v1.FileService.GetOverview:output_type -> mpi.v1.GetOverviewResponse + 7, // 36: mpi.v1.FileService.UpdateOverview:output_type -> mpi.v1.UpdateOverviewResponse + 12, // 37: mpi.v1.FileService.GetFile:output_type -> mpi.v1.GetFileResponse + 16, // 38: mpi.v1.FileService.UpdateFile:output_type -> mpi.v1.UpdateFileResponse + 1, // 39: mpi.v1.FileService.GetFileStream:output_type -> mpi.v1.FileDataChunk + 16, // 40: mpi.v1.FileService.UpdateFileStream:output_type -> mpi.v1.UpdateFileResponse + 35, // [35:41] is the sub-list for method output_type + 29, // [29:35] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } func init() { file_mpi_v1_files_proto_init() } @@ -1805,7 +1724,6 @@ func file_mpi_v1_files_proto_init() { (*FileDataChunk_Header)(nil), (*FileDataChunk_Content)(nil), } - file_mpi_v1_files_proto_msgTypes[9].OneofWrappers = []any{} file_mpi_v1_files_proto_msgTypes[13].OneofWrappers = []any{ (*FileMeta_CertificateMeta)(nil), } @@ -1814,7 +1732,7 @@ func file_mpi_v1_files_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_mpi_v1_files_proto_rawDesc), len(file_mpi_v1_files_proto_rawDesc)), - NumEnums: 2, + NumEnums: 1, NumMessages: 21, NumExtensions: 0, NumServices: 1, diff --git a/api/grpc/mpi/v1/files.pb.validate.go b/api/grpc/mpi/v1/files.pb.validate.go index 599c24fa2..dfcafca1a 100644 --- a/api/grpc/mpi/v1/files.pb.validate.go +++ b/api/grpc/mpi/v1/files.pb.validate.go @@ -1392,10 +1392,6 @@ func (m *File) validate(all bool) error { // no validation rules for Unmanaged - if m.Action != nil { - // no validation rules for Action - } - if len(errors) > 0 { return FileMultiError(errors) } diff --git a/api/grpc/mpi/v1/files.proto b/api/grpc/mpi/v1/files.proto index a5e446144..0be5bcd69 100644 --- a/api/grpc/mpi/v1/files.proto +++ b/api/grpc/mpi/v1/files.proto @@ -126,23 +126,8 @@ message FileOverview { message File { // Meta information about the file, the name (including path) and hash FileMeta file_meta = 1; - // Action enumeration - enum FileAction { - // Default value, no action - FILE_ACTION_UNSPECIFIED = 0; - // No changes to the file - FILE_ACTION_UNCHANGED = 1; - // New file - FILE_ACTION_ADD = 2; - // Updated file - FILE_ACTION_UPDATE = 3; - // File deleted - FILE_ACTION_DELETE = 4; - } - // Optional action - optional FileAction action = 2; // Unmanaged files will not be modified - bool unmanaged = 3; + bool unmanaged = 2; } // Represents the get file request diff --git a/docs/proto/protos.md b/docs/proto/protos.md index 2d1bdf623..6f05d530a 100644 --- a/docs/proto/protos.md +++ b/docs/proto/protos.md @@ -36,7 +36,6 @@ - [UpdateOverviewResponse](#mpi-v1-UpdateOverviewResponse) - [X509Name](#mpi-v1-X509Name) - - [File.FileAction](#mpi-v1-File-FileAction) - [SignatureAlgorithm](#mpi-v1-SignatureAlgorithm) - [FileService](#mpi-v1-FileService) @@ -304,7 +303,6 @@ Represents meta data about a file | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | file_meta | [FileMeta](#mpi-v1-FileMeta) | | Meta information about the file, the name (including path) and hash | -| action | [File.FileAction](#mpi-v1-File-FileAction) | optional | Optional action | | unmanaged | [bool](#bool) | | Unmanaged files will not be modified | @@ -591,21 +589,6 @@ Represents the dates for which a certificate is valid as seen at https://pkg.go. - - -### File.FileAction -Action enumeration - -| Name | Number | Description | -| ---- | ------ | ----------- | -| FILE_ACTION_UNSPECIFIED | 0 | Default value, no action | -| FILE_ACTION_UNCHANGED | 1 | No changes to the file | -| FILE_ACTION_ADD | 2 | New file | -| FILE_ACTION_UPDATE | 3 | Updated file | -| FILE_ACTION_DELETE | 4 | File deleted | - - - ### SignatureAlgorithm diff --git a/internal/file/file_manager_service.go b/internal/file/file_manager_service.go index 2aaf02128..7774bad75 100644 --- a/internal/file/file_manager_service.go +++ b/internal/file/file_manager_service.go @@ -62,8 +62,8 @@ type ( UpdateFile(ctx context.Context, instanceID string, fileToUpdate *mpi.File) error ClearCache() UpdateCurrentFilesOnDisk(updateFiles map[string]*mpi.File) - DetermineFileActions(currentFiles, modifiedFiles map[string]*mpi.File) (map[string]*mpi.File, - map[string][]byte, error) + DetermineFileActions(currentFiles map[string]*mpi.File, modifiedFiles map[string]*model.FileCache) ( + map[string]*model.FileCache, map[string][]byte, error) IsConnected() bool SetIsConnected(isConnected bool) } @@ -75,7 +75,7 @@ type FileManagerService struct { isConnected *atomic.Bool fileOperator fileOperator // map of files and the actions performed on them during config apply - fileActions map[string]*mpi.File // key is file path + fileActions map[string]*model.FileCache // key is file path // map of the contents of files which have been updated or deleted during config apply, used during rollback rollbackFileContents map[string][]byte // key is file path // map of the files currently on disk, used to determine the file action during config apply @@ -91,7 +91,7 @@ func NewFileManagerService(fileServiceClient mpi.FileServiceClient, agentConfig fileServiceClient: fileServiceClient, agentConfig: agentConfig, fileOperator: NewFileOperator(), - fileActions: make(map[string]*mpi.File), + fileActions: make(map[string]*model.FileCache), rollbackFileContents: make(map[string][]byte), currentFilesOnDisk: make(map[string]*mpi.File), isConnected: isConnected, @@ -306,7 +306,7 @@ func (fms *FileManagerService) ConfigApply(ctx context.Context, } diffFiles, fileContent, compareErr := fms.DetermineFileActions(fms.currentFilesOnDisk, - files.ConvertToMapOfFiles(fileOverview.GetFiles())) + ConvertToMapOfFileCache(fileOverview.GetFiles())) if compareErr != nil { return model.Error, compareErr @@ -345,30 +345,30 @@ func (fms *FileManagerService) Rollback(ctx context.Context, instanceID string) areFilesUpdated := false fms.filesMutex.Lock() defer fms.filesMutex.Unlock() - for _, file := range fms.fileActions { - switch file.GetAction() { - case mpi.File_FILE_ACTION_ADD: - if err := os.Remove(file.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("error deleting file: %s error: %w", file.GetFileMeta().GetName(), err) + for _, fileAction := range fms.fileActions { + switch fileAction.Action { + case model.Add: + if err := os.Remove(fileAction.File.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) { + return fmt.Errorf("error deleting file: %s error: %w", fileAction.File.GetFileMeta().GetName(), err) } // currentFilesOnDisk needs to be updated after rollback action is performed - delete(fms.currentFilesOnDisk, file.GetFileMeta().GetName()) + delete(fms.currentFilesOnDisk, fileAction.File.GetFileMeta().GetName()) areFilesUpdated = true continue - case mpi.File_FILE_ACTION_DELETE, mpi.File_FILE_ACTION_UPDATE: - content := fms.rollbackFileContents[file.GetFileMeta().GetName()] - err := fms.fileOperator.Write(ctx, content, file.GetFileMeta()) + case model.Delete, model.Update: + content := fms.rollbackFileContents[fileAction.File.GetFileMeta().GetName()] + err := fms.fileOperator.Write(ctx, content, fileAction.File.GetFileMeta()) if err != nil { return err } // currentFilesOnDisk needs to be updated after rollback action is performed - file.GetFileMeta().Hash = files.GenerateHash(content) - fms.currentFilesOnDisk[file.GetFileMeta().GetName()] = file + fileAction.File.GetFileMeta().Hash = files.GenerateHash(content) + fms.currentFilesOnDisk[fileAction.File.GetFileMeta().GetName()] = fileAction.File areFilesUpdated = true - case mpi.File_FILE_ACTION_UNSPECIFIED, mpi.File_FILE_ACTION_UNCHANGED: + case model.Unchanged: fallthrough default: slog.DebugContext(ctx, "File Action not implemented") @@ -386,23 +386,22 @@ func (fms *FileManagerService) Rollback(ctx context.Context, instanceID string) } func (fms *FileManagerService) executeFileActions(ctx context.Context) error { - for _, file := range fms.fileActions { - switch file.GetAction() { - case mpi.File_FILE_ACTION_DELETE: - if err := os.Remove(file.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("error deleting file: %s error: %w", file.GetFileMeta().GetName(), err) + for _, fileAction := range fms.fileActions { + switch fileAction.Action { + case model.Delete: + if err := os.Remove(fileAction.File.GetFileMeta().GetName()); err != nil && !os.IsNotExist(err) { + return fmt.Errorf("error deleting file: %s error: %w", + fileAction.File.GetFileMeta().GetName(), err) } continue - case mpi.File_FILE_ACTION_ADD, mpi.File_FILE_ACTION_UPDATE: - updateErr := fms.fileUpdate(ctx, file) + case model.Add, model.Update: + updateErr := fms.fileUpdate(ctx, fileAction.File) if updateErr != nil { return updateErr } - case mpi.File_FILE_ACTION_UNSPECIFIED, mpi.File_FILE_ACTION_UNCHANGED: - fallthrough - default: - slog.DebugContext(ctx, "File Action not implemented", "action", file.GetAction()) + case model.Unchanged: + slog.DebugContext(ctx, "File unchanged") } } @@ -450,7 +449,7 @@ func (fms *FileManagerService) validateFileHash(filePath string) error { } fileHash := files.GenerateHash(content) - if fileHash != fms.fileActions[filePath].GetFileMeta().GetHash() { + if fileHash != fms.fileActions[filePath].File.GetFileMeta().GetHash() { return fmt.Errorf("error writing file, file hash does not match for file %s", filePath) } @@ -471,19 +470,14 @@ func (fms *FileManagerService) checkAllowedDirectory(checkFiles []*mpi.File) err // DetermineFileActions compares two sets of files to determine the file action for each file. Returns a map of files // that have changed and a map of the contents for each updated and deleted file. Key to both maps is file path // nolint: revive,cyclop -func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles map[string]*mpi.File) ( - map[string]*mpi.File, map[string][]byte, error, +func (fms *FileManagerService) DetermineFileActions(currentFiles map[string]*mpi.File, + modifiedFiles map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error, ) { fms.filesMutex.Lock() defer fms.filesMutex.Unlock() - // Go doesn't allow address of numeric constant - addAction := mpi.File_FILE_ACTION_ADD - updateAction := mpi.File_FILE_ACTION_UPDATE - deleteAction := mpi.File_FILE_ACTION_DELETE - unchangedAction := mpi.File_FILE_ACTION_UNCHANGED - fileDiff := make(map[string]*mpi.File) // Files that have changed, key is file name - fileContents := make(map[string][]byte) // contents of the file, key is file name + fileDiff := make(map[string]*model.FileCache) // Files that have changed, key is file name + fileContents := make(map[string][]byte) // contents of the file, key is file name manifestFiles, manifestFileErr := fms.manifestFile(currentFiles) @@ -492,7 +486,7 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles } // if file is in manifestFiles but not in modified files, file has been deleted // copy contents, set file action - for fileName, currentFile := range manifestFiles { + for fileName, manifestFile := range manifestFiles { _, exists := modifiedFiles[fileName] if !exists { @@ -502,36 +496,39 @@ func (fms *FileManagerService) DetermineFileActions(currentFiles, modifiedFiles return nil, nil, fmt.Errorf("error reading file %s, error: %w", fileName, readErr) } fileContents[fileName] = fileContent - currentFile.Action = &deleteAction - fileDiff[fileName] = currentFile + + fileDiff[fileName] = &model.FileCache{ + File: manifestFile, + Action: model.Delete, + } } } - for _, file := range modifiedFiles { - fileName := file.GetFileMeta().GetName() - currentFile, ok := manifestFiles[file.GetFileMeta().GetName()] + for _, modifiedFile := range modifiedFiles { + fileName := modifiedFile.File.GetFileMeta().GetName() + currentFile, ok := manifestFiles[modifiedFile.File.GetFileMeta().GetName()] // default to unchanged action - file.Action = &unchangedAction + modifiedFile.Action = model.Unchanged // if file is unmanaged, action is set to unchanged so file is skipped when performing actions - if file.GetUnmanaged() { + if modifiedFile.File.GetUnmanaged() { continue } // if file doesn't exist in the current files, file has been added // set file action if !ok { - file.Action = &addAction - fileDiff[file.GetFileMeta().GetName()] = file + modifiedFile.Action = model.Add + fileDiff[modifiedFile.File.GetFileMeta().GetName()] = modifiedFile // if file currently exists and file hash is different, file has been updated // copy contents, set file action - } else if file.GetFileMeta().GetHash() != currentFile.GetFileMeta().GetHash() { + } else if modifiedFile.File.GetFileMeta().GetHash() != currentFile.GetFileMeta().GetHash() { fileContent, readErr := os.ReadFile(fileName) if readErr != nil { return nil, nil, fmt.Errorf("error reading file %s, error: %w", fileName, readErr) } - file.Action = &updateAction + modifiedFile.Action = model.Update fileContents[fileName] = fileContent - fileDiff[file.GetFileMeta().GetName()] = file + fileDiff[modifiedFile.File.GetFileMeta().GetName()] = modifiedFile } } @@ -546,8 +543,8 @@ func (fms *FileManagerService) UpdateCurrentFilesOnDisk(currentFiles map[string] clear(fms.currentFilesOnDisk) - for _, file := range currentFiles { - fms.currentFilesOnDisk[file.GetFileMeta().GetName()] = file + for _, currentFile := range currentFiles { + fms.currentFilesOnDisk[currentFile.GetFileMeta().GetName()] = currentFile } } @@ -605,11 +602,11 @@ func (fms *FileManagerService) convertToManifestFileMap( ) map[string]*model.ManifestFile { manifestFileMap := make(map[string]*model.ManifestFile) - for name, file := range currentFiles { - if file == nil || file.GetFileMeta() == nil { + for name, currentFile := range currentFiles { + if currentFile == nil || currentFile.GetFileMeta() == nil { continue } - manifestFile := fms.convertToManifestFile(file) + manifestFile := fms.convertToManifestFile(currentFile) manifestFileMap[name] = manifestFile } @@ -645,3 +642,15 @@ func (fms *FileManagerService) convertToFile(manifestFile *model.ManifestFile) * }, } } + +// ConvertToMapOfFiles converts a list of files to a map of file caches (file and action) with the file name as the key +func ConvertToMapOfFileCache(convertFiles []*mpi.File) map[string]*model.FileCache { + filesMap := make(map[string]*model.FileCache) + for _, convertFile := range convertFiles { + filesMap[convertFile.GetFileMeta().GetName()] = &model.FileCache{ + File: convertFile, + } + } + + return filesMap +} diff --git a/internal/file/file_manager_service_test.go b/internal/file/file_manager_service_test.go index 95e138c2a..bbcfedbab 100644 --- a/internal/file/file_manager_service_test.go +++ b/internal/file/file_manager_service_test.go @@ -177,7 +177,7 @@ func TestFileManagerService_ConfigApply_Add(t *testing.T) { data, readErr := os.ReadFile(filePath) require.NoError(t, readErr) assert.Equal(t, fileContent, data) - assert.Equal(t, fileManagerService.fileActions[filePath], overview.GetFiles()[0]) + assert.Equal(t, fileManagerService.fileActions[filePath].File, overview.GetFiles()[0]) } func TestFileManagerService_ConfigApply_Update(t *testing.T) { @@ -234,7 +234,7 @@ func TestFileManagerService_ConfigApply_Update(t *testing.T) { require.NoError(t, readErr) assert.Equal(t, fileContent, data) assert.Equal(t, fileManagerService.rollbackFileContents[tempFile.Name()], previousFileContent) - assert.Equal(t, fileManagerService.fileActions[tempFile.Name()], overview.GetFiles()[0]) + assert.Equal(t, fileManagerService.fileActions[tempFile.Name()].File, overview.GetFiles()[0]) } func TestFileManagerService_ConfigApply_Delete(t *testing.T) { @@ -286,7 +286,7 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) { require.NoError(t, err) assert.NoFileExists(t, tempFile.Name()) assert.Equal(t, fileManagerService.rollbackFileContents[tempFile.Name()], fileContent) - assert.Equal(t, fileManagerService.fileActions[tempFile.Name()], filesOnDisk[tempFile.Name()]) + assert.Equal(t, fileManagerService.fileActions[tempFile.Name()].File, filesOnDisk[tempFile.Name()]) assert.Equal(t, model.OK, writeStatus) } @@ -303,7 +303,6 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) { Permissions: "", Size: 0, }, - Action: nil, }, } @@ -316,7 +315,6 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) { Permissions: "", Size: 0, }, - Action: nil, }, } @@ -330,14 +328,16 @@ func TestFileManagerService_ClearCache(t *testing.T) { fakeFileServiceClient := &v1fakes.FakeFileServiceClient{} fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig()) - filesCache := map[string]*mpi.File{ + filesCache := map[string]*model.FileCache{ "file/path/test.conf": { - FileMeta: &mpi.FileMeta{ - Name: "file/path/test.conf", - Hash: "", - ModifiedTime: nil, - Permissions: "", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: "file/path/test.conf", + Hash: "", + ModifiedTime: nil, + Permissions: "", + Size: 0, + }, }, }, } @@ -361,11 +361,6 @@ func TestFileManagerService_Rollback(t *testing.T) { ctx := context.Background() tempDir := t.TempDir() - addAction := mpi.File_FILE_ACTION_ADD - deleteAction := mpi.File_FILE_ACTION_DELETE - updateAction := mpi.File_FILE_ACTION_UPDATE - unspecifiedAction := mpi.File_FILE_ACTION_UNSPECIFIED - deleteFilePath := filepath.Join(tempDir, "nginx_delete.conf") newFileContent := []byte("location /test {\n return 200 \"This config needs to be rolled back\\n\";\n}") @@ -384,49 +379,59 @@ func TestFileManagerService_Rollback(t *testing.T) { manifestFilePath = manifestDirPath + "/manifest.json" helpers.CreateFileWithErrorCheck(t, manifestDirPath, "manifest.json") - filesCache := map[string]*mpi.File{ + filesCache := map[string]*model.FileCache{ addFile.Name(): { - FileMeta: &mpi.FileMeta{ - Name: addFile.Name(), - Hash: fileHash, - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: addFile.Name(), + Hash: fileHash, + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, + Unmanaged: false, }, - Action: &addAction, + Action: model.Add, }, updateFile.Name(): { - FileMeta: &mpi.FileMeta{ - Name: updateFile.Name(), - Hash: fileHash, - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: updateFile.Name(), + Hash: fileHash, + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, + Unmanaged: false, }, - Action: &updateAction, + Action: model.Update, }, deleteFilePath: { - FileMeta: &mpi.FileMeta{ - Name: deleteFilePath, - Hash: "", - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: deleteFilePath, + Hash: "", + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, + Unmanaged: false, }, - Action: &deleteAction, + Action: model.Delete, }, "unspecified/file/test.conf": { - FileMeta: &mpi.FileMeta{ - Name: "unspecified/file/test.conf", - Hash: "", - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: "unspecified/file/test.conf", + Hash: "", + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, + Unmanaged: false, }, - Action: &unspecifiedAction, }, } - fileContentCache := map[string][]byte{ deleteFilePath: oldFileContent, updateFile.Name(): oldFileContent, @@ -456,11 +461,6 @@ func TestFileManagerService_Rollback(t *testing.T) { } func TestFileManagerService_DetermineFileActions(t *testing.T) { - // Go doesn't allow address of numeric constant - addAction := mpi.File_FILE_ACTION_ADD - updateAction := mpi.File_FILE_ACTION_UPDATE - deleteAction := mpi.File_FILE_ACTION_DELETE - tempDir := os.TempDir() deleteTestFile := helpers.CreateFileWithErrorCheck(t, tempDir, "nginx_delete.conf") @@ -490,24 +490,32 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) { tests := []struct { expectedError error - modifiedFiles map[string]*mpi.File + modifiedFiles map[string]*model.FileCache currentFiles map[string]*mpi.File - expectedCache map[string]*mpi.File + expectedCache map[string]*model.FileCache expectedContent map[string][]byte name string }{ { name: "Test 1: Add, Update & Delete Files", - modifiedFiles: map[string]*mpi.File{ + modifiedFiles: map[string]*model.FileCache{ addTestFileName: { - FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), + File: &mpi.File{ + FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), + Unmanaged: false, + }, }, updateTestFile.Name(): { - FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)), + File: &mpi.File{ + FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)), + Unmanaged: false, + }, }, unmanagedFile.Name(): { - FileMeta: protos.FileMeta(unmanagedFile.Name(), files.GenerateHash(unmanagedFileContent)), - Unmanaged: true, + File: &mpi.File{ + FileMeta: protos.FileMeta(unmanagedFile.Name(), files.GenerateHash(unmanagedFileContent)), + Unmanaged: true, + }, }, }, currentFiles: map[string]*mpi.File{ @@ -522,18 +530,27 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) { Unmanaged: true, }, }, - expectedCache: map[string]*mpi.File{ + expectedCache: map[string]*model.FileCache{ deleteTestFile.Name(): { - FileMeta: protos.ManifestFileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)), - Action: &deleteAction, + File: &mpi.File{ + FileMeta: protos.ManifestFileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)), + Unmanaged: false, + }, + Action: model.Delete, }, updateTestFile.Name(): { - FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)), - Action: &updateAction, + File: &mpi.File{ + FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(updatedFileContent)), + Unmanaged: false, + }, + Action: model.Update, }, addTestFileName: { - FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), - Action: &addAction, + File: &mpi.File{ + FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), + Unmanaged: false, + }, + Action: model.Add, }, }, expectedContent: map[string][]byte{ @@ -544,15 +561,21 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) { }, { name: "Test 2: Files same as on disk", - modifiedFiles: map[string]*mpi.File{ + modifiedFiles: map[string]*model.FileCache{ addTestFileName: { - FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), + File: &mpi.File{ + FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), + }, }, updateTestFile.Name(): { - FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(fileContent)), + File: &mpi.File{ + FileMeta: protos.FileMeta(updateTestFile.Name(), files.GenerateHash(fileContent)), + }, }, deleteTestFile.Name(): { - FileMeta: protos.FileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)), + File: &mpi.File{ + FileMeta: protos.FileMeta(deleteTestFile.Name(), files.GenerateHash(fileContent)), + }, }, }, currentFiles: map[string]*mpi.File{ @@ -566,7 +589,7 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) { FileMeta: protos.FileMeta(addTestFileName, files.GenerateHash(fileContent)), }, }, - expectedCache: make(map[string]*mpi.File), + expectedCache: make(map[string]*model.FileCache), expectedContent: make(map[string][]byte), expectedError: nil, }, @@ -591,11 +614,6 @@ func TestFileManagerService_fileActions(t *testing.T) { ctx := context.Background() tempDir := t.TempDir() - addAction := mpi.File_FILE_ACTION_ADD - deleteAction := mpi.File_FILE_ACTION_DELETE - updateAction := mpi.File_FILE_ACTION_UPDATE - unspecifiedAction := mpi.File_FILE_ACTION_UNSPECIFIED - addFilePath := filepath.Join(tempDir, "nginx_add.conf") unspecifiedFilePath := "unspecified/file/test.conf" @@ -611,46 +629,53 @@ func TestFileManagerService_fileActions(t *testing.T) { _, writeErr = updateFile.Write(oldFileContent) require.NoError(t, writeErr) - filesCache := map[string]*mpi.File{ + filesCache := map[string]*model.FileCache{ addFilePath: { - FileMeta: &mpi.FileMeta{ - Name: addFilePath, - Hash: fileHash, - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: addFilePath, + Hash: fileHash, + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, }, - Action: &addAction, + Action: model.Add, }, updateFile.Name(): { - FileMeta: &mpi.FileMeta{ - Name: updateFile.Name(), - Hash: fileHash, - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: updateFile.Name(), + Hash: fileHash, + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, }, - Action: &updateAction, + Action: model.Update, }, deleteFile.Name(): { - FileMeta: &mpi.FileMeta{ - Name: deleteFile.Name(), - Hash: "", - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: deleteFile.Name(), + Hash: "", + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, }, - Action: &deleteAction, + Action: model.Delete, }, unspecifiedFilePath: { - FileMeta: &mpi.FileMeta{ - Name: unspecifiedFilePath, - Hash: "", - ModifiedTime: timestamppb.Now(), - Permissions: "0777", - Size: 0, + File: &mpi.File{ + FileMeta: &mpi.FileMeta{ + Name: unspecifiedFilePath, + Hash: "", + ModifiedTime: timestamppb.Now(), + Permissions: "0777", + Size: 0, + }, }, - Action: &unspecifiedAction, }, } diff --git a/internal/file/filefakes/fake_file_manager_service_interface.go b/internal/file/filefakes/fake_file_manager_service_interface.go index 588318877..ec9ae7a3d 100644 --- a/internal/file/filefakes/fake_file_manager_service_interface.go +++ b/internal/file/filefakes/fake_file_manager_service_interface.go @@ -28,19 +28,19 @@ type FakeFileManagerServiceInterface struct { result1 model.WriteStatus result2 error } - DetermineFileActionsStub func(map[string]*v1.File, map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error) + DetermineFileActionsStub func(map[string]*v1.File, map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error) determineFileActionsMutex sync.RWMutex determineFileActionsArgsForCall []struct { arg1 map[string]*v1.File - arg2 map[string]*v1.File + arg2 map[string]*model.FileCache } determineFileActionsReturns struct { - result1 map[string]*v1.File + result1 map[string]*model.FileCache result2 map[string][]byte result3 error } determineFileActionsReturnsOnCall map[int]struct { - result1 map[string]*v1.File + result1 map[string]*model.FileCache result2 map[string][]byte result3 error } @@ -196,12 +196,12 @@ func (fake *FakeFileManagerServiceInterface) ConfigApplyReturnsOnCall(i int, res }{result1, result2} } -func (fake *FakeFileManagerServiceInterface) DetermineFileActions(arg1 map[string]*v1.File, arg2 map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error) { +func (fake *FakeFileManagerServiceInterface) DetermineFileActions(arg1 map[string]*v1.File, arg2 map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error) { fake.determineFileActionsMutex.Lock() ret, specificReturn := fake.determineFileActionsReturnsOnCall[len(fake.determineFileActionsArgsForCall)] fake.determineFileActionsArgsForCall = append(fake.determineFileActionsArgsForCall, struct { arg1 map[string]*v1.File - arg2 map[string]*v1.File + arg2 map[string]*model.FileCache }{arg1, arg2}) stub := fake.DetermineFileActionsStub fakeReturns := fake.determineFileActionsReturns @@ -222,43 +222,43 @@ func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCallCount() int return len(fake.determineFileActionsArgsForCall) } -func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCalls(stub func(map[string]*v1.File, map[string]*v1.File) (map[string]*v1.File, map[string][]byte, error)) { +func (fake *FakeFileManagerServiceInterface) DetermineFileActionsCalls(stub func(map[string]*v1.File, map[string]*model.FileCache) (map[string]*model.FileCache, map[string][]byte, error)) { fake.determineFileActionsMutex.Lock() defer fake.determineFileActionsMutex.Unlock() fake.DetermineFileActionsStub = stub } -func (fake *FakeFileManagerServiceInterface) DetermineFileActionsArgsForCall(i int) (map[string]*v1.File, map[string]*v1.File) { +func (fake *FakeFileManagerServiceInterface) DetermineFileActionsArgsForCall(i int) (map[string]*v1.File, map[string]*model.FileCache) { fake.determineFileActionsMutex.RLock() defer fake.determineFileActionsMutex.RUnlock() argsForCall := fake.determineFileActionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2 } -func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturns(result1 map[string]*v1.File, result2 map[string][]byte, result3 error) { +func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturns(result1 map[string]*model.FileCache, result2 map[string][]byte, result3 error) { fake.determineFileActionsMutex.Lock() defer fake.determineFileActionsMutex.Unlock() fake.DetermineFileActionsStub = nil fake.determineFileActionsReturns = struct { - result1 map[string]*v1.File + result1 map[string]*model.FileCache result2 map[string][]byte result3 error }{result1, result2, result3} } -func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturnsOnCall(i int, result1 map[string]*v1.File, result2 map[string][]byte, result3 error) { +func (fake *FakeFileManagerServiceInterface) DetermineFileActionsReturnsOnCall(i int, result1 map[string]*model.FileCache, result2 map[string][]byte, result3 error) { fake.determineFileActionsMutex.Lock() defer fake.determineFileActionsMutex.Unlock() fake.DetermineFileActionsStub = nil if fake.determineFileActionsReturnsOnCall == nil { fake.determineFileActionsReturnsOnCall = make(map[int]struct { - result1 map[string]*v1.File + result1 map[string]*model.FileCache result2 map[string][]byte result3 error }) } fake.determineFileActionsReturnsOnCall[i] = struct { - result1 map[string]*v1.File + result1 map[string]*model.FileCache result2 map[string][]byte result3 error }{result1, result2, result3} diff --git a/internal/model/file.go b/internal/model/file.go new file mode 100644 index 000000000..fc6c5baca --- /dev/null +++ b/internal/model/file.go @@ -0,0 +1,22 @@ +// Copyright (c) F5, Inc. +// +// This source code is licensed under the Apache License, Version 2.0 license found in the +// LICENSE file in the root directory of this source tree. + +package model + +import mpi "github.com/nginx/agent/v3/api/grpc/mpi/v1" + +type FileCache struct { + File *mpi.File + Action FileAction +} + +type FileAction int + +const ( + Add FileAction = iota + 1 + Update + Delete + Unchanged +) diff --git a/pkg/files/file_helpers_test.go b/pkg/files/file_helpers_test.go index e0e641977..2000d1567 100644 --- a/pkg/files/file_helpers_test.go +++ b/pkg/files/file_helpers_test.go @@ -98,7 +98,6 @@ func Test_GenerateConfigVersion(t *testing.T) { Name: "file1", Hash: "hash1", }, - Action: nil, }, }, expected: GenerateHash([]byte("hash1")), @@ -111,14 +110,12 @@ func Test_GenerateConfigVersion(t *testing.T) { Name: "file1", Hash: "hash1", }, - Action: nil, }, { FileMeta: &mpi.FileMeta{ Name: "file2", Hash: "hash2", }, - Action: nil, }, }, expected: func() string {