Skip to content

Commit

Permalink
Fix wrong sum on files
Browse files Browse the repository at this point in the history
  • Loading branch information
Yavor16 committed Oct 28, 2024
1 parent a31d8d4 commit 2c01eee
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.math.BigInteger;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;

import org.apache.commons.io.IOUtils;
import org.cloudfoundry.multiapps.common.ContentException;
import org.cloudfoundry.multiapps.common.SLException;
Expand All @@ -19,19 +27,13 @@
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;

import java.math.BigInteger;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;

@Named("validateDeployParametersStep")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class ValidateDeployParametersStep extends SyncFlowableStep {

private final ResilientOperationExecutor resilientOperationExecutor = new ResilientOperationExecutor();
private final ExecutorService fileStorageThreadPool;
private final List<FileEntry> extensionDescriptors = new ArrayList<>();

@Inject
public ValidateDeployParametersStep(ExecutorService fileStorageThreadPool) {
Expand All @@ -58,8 +60,13 @@ protected String getStepErrorMessage(ProcessContext context) {

private void validateParameters(ProcessContext context) {
validateExtensionDescriptorFileIds(context);
validateFilesSizeLimit(context);
validateArchive(context);

List<FileEntry> archivePartEntries = getArchivePartEntries(context);

if (!archivePartEntries.isEmpty()) {
validateFilesSizeLimit(context, archivePartEntries);
mergeArchive(context, archivePartEntries);
}
}

private void validateExtensionDescriptorFileIds(ProcessContext context) {
Expand All @@ -72,6 +79,7 @@ private void validateExtensionDescriptorFileIds(ProcessContext context) {
for (String fileId : extensionDescriptorFileIds) {
FileEntry file = findFile(context, fileId);
validateDescriptorSize(file);
extensionDescriptors.add(file);
}
}

Expand All @@ -98,23 +106,26 @@ private void validateDescriptorSize(FileEntry file) {
}
}

private void validateFilesSizeLimit(ProcessContext context) {
private void validateFilesSizeLimit(ProcessContext context, List<FileEntry> archivePartEntries) {
try {
checkFileSizeOfAllFiles(context);
checkFileSizeOfAllFiles(context, archivePartEntries);
} catch (FileStorageException e) {
throw new SLException(e, MessageFormat.format(Messages.ERROR_OCURRED_DURING_VALIDATION_OF_FILES_0, e.getMessage()));
}

}

private void checkFileSizeOfAllFiles(ProcessContext context) throws FileStorageException {
private void checkFileSizeOfAllFiles(ProcessContext context, List<FileEntry> archivePartEntries) throws FileStorageException {
long maxFileSizeLimit = configuration.getMaxUploadSize();
List<FileEntry> fileEntries = fileService.listFilesBySpaceAndOperationId(context.getVariable(Variables.SPACE_GUID),
context.getVariable(Variables.CORRELATION_ID));
long sizeOfAllFiles = getSizeOfAllFiles(fileEntries);
if (sizeOfAllFiles >= maxFileSizeLimit) {
deleteFiles(context, fileEntries);
throw new ContentException(Messages.SIZE_OF_ALL_OPERATIONS_FILES_0_EXCEEDS_MAX_UPLOAD_SIZE_1, sizeOfAllFiles, maxFileSizeLimit);
long sizeOfAllArchivePartEntries = getSizeOfAllFiles(archivePartEntries);
long sizeOfExtensionDescriptorsEntries = getSizeOfAllFiles(extensionDescriptors);
long sizeOfAllFileEntries = sizeOfAllArchivePartEntries + sizeOfExtensionDescriptorsEntries;

if (sizeOfAllFileEntries >= maxFileSizeLimit) {
deleteFiles(context, archivePartEntries);
throw new ContentException(Messages.SIZE_OF_ALL_OPERATIONS_FILES_0_EXCEEDS_MAX_UPLOAD_SIZE_1,
sizeOfAllArchivePartEntries,
maxFileSizeLimit);
}
}

Expand All @@ -131,16 +142,21 @@ private void deleteFiles(ProcessContext context, List<FileEntry> fileEntries) th
fileSweeper.sweep(fileEntries);
}

private void validateArchive(ProcessContext context) {
private List<FileEntry> getArchivePartEntries(ProcessContext context) {
String[] archivePartIds = getArchivePartIds(context);
if (archivePartIds.length == 1) {
// TODO The merging of chunks should be done prior to this step
FileEntry archiveFileEntry = findFile(context, archivePartIds[0]);
getStepLogger().infoWithoutProgressMessage(Messages.ARCHIVE_WAS_NOT_SPLIT_TOTAL_SIZE_IN_BYTES_0, archiveFileEntry.getSize());
return;
return List.of();
}
List<FileEntry> archivePartEntries = getArchivePartEntries(context, archivePartIds);
context.setVariable(Variables.FILE_ENTRIES, archivePartEntries);

return archivePartEntries;
}

private void mergeArchive(ProcessContext context, List<FileEntry> archivePartEntries) {
BigInteger archiveSize = calculateArchiveSize(archivePartEntries);
resilientOperationExecutor.execute(() -> mergeArchive(context, archivePartEntries, archiveSize));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,21 @@ private void prepareFileService(String appArchiveId) throws FileStorageException
when(fileService.getFile("space-id", MERGED_ARCHIVE_NAME + ".part.2"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.2", MERGED_ARCHIVE_NAME + ".part.2", 1024 * 1024L));

when(fileService.getFile("space-id", EXCEEDING_FILE_SIZE_ID + ".part.0"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.0", MERGED_ARCHIVE_NAME + ".part.0", 1024 * 1024 * 1024));

when(fileService.getFile("space-id", EXCEEDING_FILE_SIZE_ID + ".part.1"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.1", MERGED_ARCHIVE_NAME + ".part.1", 1024 * 1024 * 1024));

when(fileService.getFile("space-id", EXCEEDING_FILE_SIZE_ID + ".part.2"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.2", MERGED_ARCHIVE_NAME + ".part.2", 1024 * 1024 * 1024));

when(fileService.getFile("space-id", EXCEEDING_FILE_SIZE_ID + ".part.3"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.3", MERGED_ARCHIVE_NAME + ".part.3", 1024 * 1024 * 1024));

when(fileService.getFile("space-id", EXCEEDING_FILE_SIZE_ID + ".part.4"))
.thenReturn(createFileEntry(MERGED_ARCHIVE_NAME + ".part.4", MERGED_ARCHIVE_NAME + ".part.4", 1024 * 1024 * 1024));

when(fileService.getFile("space-id", EXISTING_BIGGER_FILE_ID))
.thenReturn(createFileEntry(EXISTING_BIGGER_FILE_ID, "extDescriptorFile", 1024 * 1024L + 1));
when(fileService.getFile("space-id", NOT_EXISTING_FILE_ID))
Expand Down

0 comments on commit 2c01eee

Please sign in to comment.