- Make sure the fullPath of the baseFilesLocation is available when the user specifies a non-root directory.
- Improve error-checking and exception-handling in some "S3ObjectStore"-methods. - Make sure the "responseCode" is "200-OK", before trying to get the InputStream in "UriBuilder.getPublicIP()".
This commit is contained in:
parent
9904ea5743
commit
d1a4c84289
|
@ -52,10 +52,16 @@ public class FileUtils {
|
||||||
|
|
||||||
public String baseFilesLocation;
|
public String baseFilesLocation;
|
||||||
|
|
||||||
|
public static final String workingDir = System.getProperty("user.dir") + File.separator;
|
||||||
|
|
||||||
|
|
||||||
public FileUtils (@Value("${services.pdfaggregation.controller.baseFilesLocation}") String baseFilesLocation) {
|
public FileUtils (@Value("${services.pdfaggregation.controller.baseFilesLocation}") String baseFilesLocation) {
|
||||||
if ( !baseFilesLocation.endsWith(File.separator) )
|
if ( !baseFilesLocation.endsWith(File.separator) )
|
||||||
baseFilesLocation += File.separator;
|
baseFilesLocation += File.separator;
|
||||||
|
|
||||||
|
if ( !baseFilesLocation.startsWith(File.separator) )
|
||||||
|
baseFilesLocation = workingDir + baseFilesLocation;
|
||||||
|
|
||||||
this.baseFilesLocation = baseFilesLocation;
|
this.baseFilesLocation = baseFilesLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,6 +262,7 @@ public class FileUtils {
|
||||||
try {
|
try {
|
||||||
// Create this batch-directory.
|
// Create this batch-directory.
|
||||||
Path curBatchPath = Files.createDirectories(Paths.get(targetDirectory));
|
Path curBatchPath = Files.createDirectories(Paths.get(targetDirectory));
|
||||||
|
// The base-directory will be created along with the first batch directory.
|
||||||
|
|
||||||
// Unzip the file. Iterate over the PDFs and upload each one of them and get the S3-Url
|
// Unzip the file. Iterate over the PDFs and upload each one of them and get the S3-Url
|
||||||
String zipFileFullPath = targetDirectory + "fullTexts_" + assignmentsBatchCounter + "_" + batchCounter + ".zip";
|
String zipFileFullPath = targetDirectory + "fullTexts_" + assignmentsBatchCounter + "_" + batchCounter + ".zip";
|
||||||
|
|
|
@ -166,6 +166,8 @@ public class ParquetFileUtils {
|
||||||
|
|
||||||
if ( uploadFullTextsResponse == FileUtils.UploadFullTextsResponse.successful )
|
if ( uploadFullTextsResponse == FileUtils.UploadFullTextsResponse.successful )
|
||||||
{
|
{
|
||||||
|
// At this point we know there was no problem with the full-texts, but we do not know if at least one full-text was retrieved.
|
||||||
|
|
||||||
if ( (payloadsSchema == null) // Parse the schema if it's not already parsed.
|
if ( (payloadsSchema == null) // Parse the schema if it's not already parsed.
|
||||||
&& ((payloadsSchema = parseSchema(payloadSchemaFilePath)) == null ) ) {
|
&& ((payloadsSchema = parseSchema(payloadSchemaFilePath)) == null ) ) {
|
||||||
logger.error("Nothing can be done without the payloadsSchema! Exiting.."); // The cause is already logged inside the above method.
|
logger.error("Nothing can be done without the payloadsSchema! Exiting.."); // The cause is already logged inside the above method.
|
||||||
|
|
|
@ -37,6 +37,7 @@ public class S3ObjectStore {
|
||||||
|
|
||||||
private MinioClient minioClient;
|
private MinioClient minioClient;
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
this.minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).region(region).build();
|
this.minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).region(region).build();
|
||||||
|
@ -70,6 +71,7 @@ public class S3ObjectStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private final Pattern EXTENSION_PATTERN = Pattern.compile("(\\.[^.]+)$");
|
private final Pattern EXTENSION_PATTERN = Pattern.compile("(\\.[^.]+)$");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,6 +115,7 @@ public class S3ObjectStore {
|
||||||
return s3Url;
|
return s3Url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void emptyBucket(String bucketName, boolean shouldDeleteBucket) throws Exception {
|
public void emptyBucket(String bucketName, boolean shouldDeleteBucket) throws Exception {
|
||||||
logger.warn("Going to " + (shouldDeleteBucket ? "delete" : "empty") + " bucket \"" + bucketName + "\"");
|
logger.warn("Going to " + (shouldDeleteBucket ? "delete" : "empty") + " bucket \"" + bucketName + "\"");
|
||||||
|
|
||||||
|
@ -120,12 +123,16 @@ public class S3ObjectStore {
|
||||||
Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
|
Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
|
||||||
|
|
||||||
// Then, delete the objects.
|
// Then, delete the objects.
|
||||||
for ( Result<Item> resultItem : results )
|
for ( Result<Item> resultItem : results ) {
|
||||||
try {
|
try {
|
||||||
deleteFile(resultItem.get().objectName(), bucketName);
|
if ( !deleteFile(resultItem.get().objectName(), bucketName) ) {
|
||||||
|
logger.error("Cannot proceed with bucket deletion, since only an empty bucket can be removed!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn("Could not remove " + resultItem.get().objectName());
|
logger.warn("Could not remove " + resultItem.get().objectName());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( shouldDeleteBucket ) {
|
if ( shouldDeleteBucket ) {
|
||||||
// Lastly, delete the empty bucket.
|
// Lastly, delete the empty bucket.
|
||||||
|
@ -135,11 +142,21 @@ public class S3ObjectStore {
|
||||||
logger.info("Bucket " + bucketName + " was " + (shouldDeleteBucket ? "deleted!" : "emptied!"));
|
logger.info("Bucket " + bucketName + " was " + (shouldDeleteBucket ? "deleted!" : "emptied!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isLocationInStore(String location) {
|
public boolean isLocationInStore(String location) {
|
||||||
return location.startsWith(s3Protocol);
|
return location.startsWith(s3Protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteFile(String fileObjKeyName, String bucketName) throws Exception {
|
|
||||||
|
public boolean deleteFile(String fileObjKeyName, String bucketName)
|
||||||
|
{
|
||||||
|
try {
|
||||||
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileObjKeyName).build());
|
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileObjKeyName).build());
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Could not delete the file \"" + fileObjKeyName + "\" from the S3 ObjectStore, exception: " + e.getMessage(), e);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,17 +56,25 @@ public class UriBuilder {
|
||||||
{
|
{
|
||||||
String publicIpAddress = "";
|
String publicIpAddress = "";
|
||||||
HttpURLConnection conn = null;
|
HttpURLConnection conn = null;
|
||||||
|
String urlString = "https://api.ipify.org/";
|
||||||
try {
|
try {
|
||||||
conn = (HttpURLConnection) new URL("https://api.ipify.org/").openConnection();
|
conn = (HttpURLConnection) new URL(urlString).openConnection();
|
||||||
conn.setConnectTimeout(60_000);
|
conn.setConnectTimeout(60_000);
|
||||||
conn.setReadTimeout(60_000);
|
conn.setReadTimeout(60_000);
|
||||||
conn.setRequestMethod("GET");
|
conn.setRequestMethod("GET");
|
||||||
conn.connect();
|
conn.connect();
|
||||||
|
|
||||||
|
int responseCode = conn.getResponseCode();
|
||||||
|
if ( responseCode != 200 ) {
|
||||||
|
logger.warn("Cannot get the publicIP address for this machine, as \"" + urlString + "\" returned the HTTP-error-code: " + responseCode);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
try ( BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
|
try ( BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
|
||||||
publicIpAddress = bf.readLine().trim();
|
publicIpAddress = bf.readLine().trim();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn("Cannot get the publicIP address for this machine!", e);
|
logger.warn("Cannot get the publicIP address for this machine, from \"" + urlString + "\"!", e);
|
||||||
return null;
|
return null;
|
||||||
} finally {
|
} finally {
|
||||||
if ( conn != null )
|
if ( conn != null )
|
||||||
|
|
Loading…
Reference in New Issue