in internal/subscriber/subscribe.go [174:205]
func (s *SubscriberService) handleArchive(inMetadata *model.Metadata) error {
existingMetadata, err := s.metadataRepo.Get(inMetadata.Bucket, inMetadata.Name)
if err != nil && err != sql.ErrNoRows {
return fmt.Errorf("error getting existing metadata: %w", err)
}
// Check if incoming metadata is necessary to handle
if existingMetadata != nil {
if existingMetadata.Updated.After(inMetadata.Updated) {
return nil // skip, already in most recent update
}
if existingMetadata.StorageClass == inMetadata.StorageClass {
return nil // skip, already in correct StorageClass
}
} else {
// if metadata does not exist, it is a normal insert
return s.handleFinalize(inMetadata)
}
if err := s.metadataRepo.Update(inMetadata.Bucket, inMetadata.Name, inMetadata.StorageClass,
inMetadata.Size, inMetadata.Updated); err != nil {
return fmt.Errorf("error updating metadata: %w", err)
}
if err := s.directoryRepo.UpsertArchiveParentDirs(repo.StorageClass(existingMetadata.StorageClass),
repo.StorageClass(inMetadata.StorageClass), inMetadata.Bucket, inMetadata.Name, inMetadata.Size); err != nil {
return fmt.Errorf("error upserting parent directories: %w", err)
}
return nil
}