Skip to content

Commit 691a351

Browse files
committed
[MODEXPW-582] Migrate from custom S3 library to folio-s3-client
1 parent f0d9cc1 commit 691a351

26 files changed

Lines changed: 440 additions & 865 deletions

pom.xml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@
4747
<refresh-presigned-url.yaml.file>
4848
${project.basedir}/src/main/resources/swagger.api/refresh-presigned-url.yaml
4949
</refresh-presigned-url.yaml.file>
50+
<folio-s3-client.version>3.0.0-SNAPSHOT</folio-s3-client.version>
5051
<folio-spring-base.version>10.0.0-SNAPSHOT</folio-spring-base.version>
5152
<folio-service-tools.version>4.1.1</folio-service-tools.version>
5253
<folio-spring-cql.version>9.0.0</folio-spring-cql.version>
5354
<folio-module-descriptor-validator.version>1.0.0</folio-module-descriptor-validator.version>
54-
<minio.version>8.5.15</minio.version>
5555
<openapi-generator.version>6.2.1</openapi-generator.version>
5656
<commons-collections4.version>4.5.0</commons-collections4.version>
5757
<hypersistence-utils-hibernate-63.version>3.7.3</hypersistence-utils-hibernate-63.version>
@@ -67,7 +67,6 @@
6767
<wiremock.version>2.27.2</wiremock.version>
6868
<marc4j.version>2.9.1</marc4j.version>
6969
<testcontainers.version>1.17.6</testcontainers.version>
70-
<aws.sdk.version>2.29.47</aws.sdk.version>
7170
<hamcrest-all.version>1.3</hamcrest-all.version>
7271
<mockito-inline.version>5.2.0</mockito-inline.version>
7372

@@ -105,6 +104,11 @@
105104
<artifactId>folio-spring-cql</artifactId>
106105
<version>${folio-spring-cql.version}</version>
107106
</dependency>
107+
<dependency>
108+
<groupId>org.folio</groupId>
109+
<artifactId>folio-s3-client</artifactId>
110+
<version>${folio-s3-client.version}</version>
111+
</dependency>
108112
<dependency>
109113
<groupId>com.fasterxml.jackson.datatype</groupId>
110114
<artifactId>jackson-datatype-jsr310</artifactId>
@@ -155,11 +159,6 @@
155159
<artifactId>feign-jackson</artifactId>
156160
<version>${feign-jackson.version}</version>
157161
</dependency>
158-
<dependency>
159-
<groupId>io.minio</groupId>
160-
<artifactId>minio</artifactId>
161-
<version>${minio.version}</version>
162-
</dependency>
163162

164163
<dependency>
165164
<groupId>org.apache.sshd</groupId>
@@ -218,12 +217,6 @@
218217
<version>${marc4j.version}</version>
219218
</dependency>
220219

221-
<dependency>
222-
<groupId>software.amazon.awssdk</groupId>
223-
<artifactId>s3</artifactId>
224-
<version>${aws.sdk.version}</version>
225-
</dependency>
226-
227220
<dependency>
228221
<groupId>org.hibernate.validator</groupId>
229222
<artifactId>hibernate-validator</artifactId>

src/main/java/org/folio/dew/batch/AbstractStorageStreamWriter.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
11
package org.folio.dew.batch;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.apache.commons.lang3.ArrayUtils;
54
import org.apache.commons.lang3.StringUtils;
65
import org.folio.dew.error.FileOperationException;
6+
import org.folio.dew.repository.AbstractFilesStorage;
77
import org.folio.dew.repository.LocalFilesStorage;
88
import org.folio.dew.repository.S3CompatibleResource;
9-
import org.folio.dew.repository.S3CompatibleStorage;
9+
import org.folio.s3.exception.S3ClientException;
1010
import org.springframework.batch.item.Chunk;
1111
import org.springframework.batch.item.ItemWriter;
1212
import org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor;
1313
import org.springframework.batch.item.file.transform.DelimitedLineAggregator;
1414
import org.springframework.batch.item.file.transform.LineAggregator;
1515
import org.springframework.core.io.WritableResource;
1616

17-
import java.io.IOException;
1817
import java.nio.charset.StandardCharsets;
19-
import java.util.List;
20-
21-
import static org.folio.dew.utils.Constants.LINE_SEPARATOR;
22-
import static org.folio.dew.utils.Constants.LINE_SEPARATOR_REPLACEMENT;
2318

2419
@Slf4j
25-
public class AbstractStorageStreamWriter<T, S extends S3CompatibleStorage> implements ItemWriter<T> {
20+
public class AbstractStorageStreamWriter<T, S extends AbstractFilesStorage> implements ItemWriter<T> {
2621

2722
private WritableResource resource;
2823
private S storage;
@@ -52,7 +47,7 @@ public AbstractStorageStreamWriter(String tempOutputFilePath, String columnHeade
5247
if (StringUtils.isNotBlank(columnHeaders)) {
5348
try {
5449
storage.write(tempOutputFilePath, (columnHeaders + '\n').getBytes(StandardCharsets.UTF_8));
55-
} catch (IOException e) {
50+
} catch (S3ClientException e) {
5651
throw new FileOperationException(e);
5752
}
5853
}
@@ -78,7 +73,7 @@ public LineAggregator<T> getLineAggregator() {
7873
return lineAggregator;
7974
}
8075

81-
public S3CompatibleStorage getStorage() {
76+
public AbstractFilesStorage getStorage() {
8277
return storage;
8378
}
8479

src/main/java/org/folio/dew/batch/CsvWriter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package org.folio.dew.batch;
22

3-
import lombok.extern.log4j.Log4j2;
4-
import org.folio.dew.repository.S3CompatibleStorage;
3+
import org.folio.dew.repository.AbstractFilesStorage;
54

5+
import lombok.extern.log4j.Log4j2;
66
@Log4j2
7-
public class CsvWriter<T, R extends S3CompatibleStorage> extends AbstractStorageStreamWriter<T, R> {
7+
public class CsvWriter<T, R extends AbstractFilesStorage> extends AbstractStorageStreamWriter<T, R> {
88

99
public CsvWriter(String tempOutputFilePath, String columnHeaders, String[] extractedFieldNames, FieldProcessor fieldProcessor, R storage) {
1010
super(tempOutputFilePath, columnHeaders, extractedFieldNames, fieldProcessor, storage);

src/main/java/org/folio/dew/batch/JobCompletionNotificationListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ private void processJobAfter(String jobId, JobParameters jobParameters) {
8383
if (StringUtils.isBlank(path) || StringUtils.isBlank(fileNameStart)) {
8484
return;
8585
}
86-
var files = localFilesStorage.walk(path)
86+
var files = localFilesStorage.listRecursive(path).stream()
8787
.filter(name -> FilenameUtils.getName(name).startsWith(fileNameStart)).collect(Collectors.toList());
8888
if (files.isEmpty()) {
8989
return;
9090
}
9191
for (String f : files) {
92-
localFilesStorage.delete(f);
92+
localFilesStorage.removeRecursive(f);
9393
}
9494
log.info("Deleted temp files {} of job {}.", files, jobId);
9595
}

src/main/java/org/folio/dew/batch/marc/DataExportCsvItemReader.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@ public DataExportCsvItemReader(String fileName, Long offset, Long limit, LocalFi
2525
@Override
2626
protected List<ItemIdentifier> getItems(int offset, int limit) {
2727
try {
28-
try (var lines = localFilesStorage.lines(fileName)) {
29-
return lines
30-
.skip(offset)
31-
.limit(limit)
32-
.map(ItemIdentifier::new)
33-
.collect(Collectors.toList());
34-
}
28+
return localFilesStorage.readLines(fileName, offset, limit)
29+
.stream()
30+
.map(ItemIdentifier::new)
31+
.collect(Collectors.toList());
3532
} catch (Exception e) {
3633
throw new FileOperationException(e.getMessage());
3734
}

src/main/java/org/folio/dew/batch/marc/DataExportCsvPartitioner.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import lombok.extern.log4j.Log4j2;
44
import org.folio.dew.batch.CsvPartitioner;
55
import org.folio.dew.repository.LocalFilesStorage;
6+
import org.folio.s3.exception.S3ClientException;
7+
8+
import java.io.IOException;
69

710
@Log4j2
811
public class DataExportCsvPartitioner extends CsvPartitioner {
@@ -19,9 +22,9 @@ public DataExportCsvPartitioner(Long offset, Long limit, String tempOutputFilePa
1922

2023
@Override
2124
protected Long getLimit() {
22-
try (var lines = localFilesStorage.lines(fileName)) {
23-
return lines.count();
24-
} catch (Exception e) {
25+
try {
26+
return localFilesStorage.numLines(fileName);
27+
} catch (IOException | S3ClientException e) {
2528
log.error("Error reading file {}, reason: {}", fileName, e.getMessage());
2629
return 0L;
2730
}

src/main/java/org/folio/dew/config/properties/MinioClientProperties.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.folio.dew.config.properties;
22

33
import lombok.Data;
4+
import org.folio.s3.client.S3ClientProperties;
45

56
@Data
67
public class MinioClientProperties {
@@ -50,4 +51,18 @@ public class MinioClientProperties {
5051
* Presigned url expiration time (in seconds).
5152
*/
5253
private int urlExpirationTimeInSeconds;
54+
55+
public S3ClientProperties toS3ClientProperties() {
56+
return S3ClientProperties
57+
.builder()
58+
.endpoint(endpoint)
59+
.region(region)
60+
.bucket(bucket)
61+
.accessKey(accessKey)
62+
.secretKey(secretKey)
63+
.awsSdk(composeWithAwsSdk)
64+
.forcePathStyle(forcePathStyle)
65+
.subPath(subPath)
66+
.build();
67+
}
5368
}

0 commit comments

Comments
 (0)