RED-9272: increase storageToMongoDb performance #615
@ -49,8 +49,9 @@ public class StorageToMongoCopyService {
|
||||
log.info("Reading dossier {} file {} from storage", dossierFile.dossierId, dossierFile.fileId);
|
||||
Optional<EntityLog> entityLogFromStorage = getEntityLogFromStorageForMigration(dossierFile.dossierId, dossierFile.fileId);
|
||||
if (entityLogFromStorage.isPresent()) {
|
||||
log.info("File found, now saving in mongodb");
|
||||
fileManagementStorageService.saveEntityLog(dossierFile.dossierId, dossierFile.fileId, entityLogFromStorage.get());
|
||||
log.info("File found, now saving in mongodb");
|
||||
fileManagementStorageService.deleteEntityLog(dossierFile.dossierId, dossierFile.fileId);
|
||||
fileManagementStorageService.insertEntityLog(dossierFile.dossierId, dossierFile.fileId, entityLogFromStorage.get());
|
||||
log.info("Deleting old file from storage");
|
||||
fileManagementStorageService.deleteObject(dossierFile.dossierId, dossierFile.fileId, FileType.ENTITY_LOG);
|
||||
}
|
||||
|
||||
@ -145,6 +145,12 @@ public class FileManagementStorageService {
|
||||
entityLogMongoService.saveEntityLog(dossierId, fileId, entityLog);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void insertEntityLog(String dossierId, String fileId, EntityLog entityLog) {
|
||||
|
||||
entityLogMongoService.insertEntityLog(dossierId, fileId, entityLog);
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
public void saveComponentLog(String dossierId, String fileId, ComponentLog componentLog) {
|
||||
|
||||
@ -0,0 +1,84 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests.performance;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.migration.StorageToMongoCopyService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService;
|
||||
import com.iqser.red.storage.commons.service.StorageService;
|
||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
@Disabled
|
||||
public class StorageToMongoDBPerformanceTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
public static final int NUMBER_OF_FILES = 10;
|
||||
@Autowired
|
||||
private StorageToMongoCopyService storageToMongoCopyService;
|
||||
@Autowired
|
||||
private StorageService storageService;
|
||||
@Autowired
|
||||
private FileTesterAndProvider fileTesterAndProvider;
|
||||
@Autowired
|
||||
private DossierTesterAndProvider dossierTesterAndProvider;
|
||||
@Autowired
|
||||
private EntityLogMongoService entityLogMongoService;
|
||||
|
||||
|
||||
@BeforeEach
|
||||
@SneakyThrows
|
||||
public void setUp() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
public void testSavePerformance() {
|
||||
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
LinkedList<CompletableFuture<Void>> futures = new LinkedList<>();
|
||||
for (int i = 0; i < NUMBER_OF_FILES; i++) {
|
||||
int number = i;
|
||||
futures.add(CompletableFuture.supplyAsync(() -> {
|
||||
prepStorageForFile(dossier, number);
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
|
||||
futures.forEach(CompletableFuture::join);
|
||||
TenantContext.setTenantId(TENANT_1);
|
||||
long start = System.currentTimeMillis();
|
||||
storageToMongoCopyService.copy();
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println("Saving of" + NUMBER_OF_FILES + " files took " + (end - start) + "ms");
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
private void prepStorageForFile(Dossier dossier, int i) {
|
||||
|
||||
TenantContext.setTenantId(TENANT_1);
|
||||
|
||||
var file = fileTesterAndProvider.testAndProvideFile(dossier, "file" + i);
|
||||
try (var in = new FileInputStream("/home/kschuettler/Dokumente/TestFiles/entitylogs/largeEntitylog.json")) {
|
||||
storageService.storeObject(TENANT_1, StorageIdUtils.getStorageId(dossier.getId(), file.getId(), FileType.ENTITY_LOG), in);
|
||||
}
|
||||
entityLogMongoService.deleteEntityLog(dossier.getId(), file.getId());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user