- Add/improve log-messages.
- Set new version. - Update dependencies. - Code polishing.
This commit is contained in:
parent
ab18ac5ff8
commit
c45a172c21
|
@ -6,7 +6,7 @@ plugins {
|
||||||
|
|
||||||
java {
|
java {
|
||||||
group = 'eu.openaire.urls_controller'
|
group = 'eu.openaire.urls_controller'
|
||||||
version = '2.7.4-SNAPSHOT'
|
version = '2.8.0'
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.apache.parquet/parquet-avro
|
// https://mvnrepository.com/artifact/org.apache.parquet/parquet-avro
|
||||||
implementation('org.apache.parquet:parquet-avro:1.14.0')
|
implementation('org.apache.parquet:parquet-avro:1.14.1')
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common
|
// https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common
|
||||||
implementation("org.apache.hadoop:hadoop-common:$hadoopVersion") {
|
implementation("org.apache.hadoop:hadoop-common:$hadoopVersion") {
|
||||||
|
@ -116,7 +116,7 @@ dependencies {
|
||||||
implementation 'com.google.code.gson:gson:2.11.0'
|
implementation 'com.google.code.gson:gson:2.11.0'
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus
|
// https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus
|
||||||
runtimeOnly 'io.micrometer:micrometer-registry-prometheus:1.13.0'
|
runtimeOnly 'io.micrometer:micrometer-registry-prometheus:1.13.1'
|
||||||
|
|
||||||
testImplementation 'org.springframework.security:spring-security-test'
|
testImplementation 'org.springframework.security:spring-security-test'
|
||||||
testImplementation "org.springframework.boot:spring-boot-starter-test"
|
testImplementation "org.springframework.boot:spring-boot-starter-test"
|
||||||
|
|
|
@ -156,6 +156,8 @@ public class ScheduledTasks {
|
||||||
if ( ! ShutdownController.shouldShutdownService )
|
if ( ! ShutdownController.shouldShutdownService )
|
||||||
return; // Either the service was never instructed to shut down, or the user canceled the request.
|
return; // Either the service was never instructed to shut down, or the user canceled the request.
|
||||||
|
|
||||||
|
logger.info("The user has requested the shutdown of the Service. Going to check if there is still ongoing work to wait for. If not, then the Service will shutdown immediately.");
|
||||||
|
|
||||||
// Check whether there are still background tasks to be processed. Either workerReport or Bulk-import requests.
|
// Check whether there are still background tasks to be processed. Either workerReport or Bulk-import requests.
|
||||||
int numOfFutures = UrlsController.futuresOfBackgroundTasks.size();
|
int numOfFutures = UrlsController.futuresOfBackgroundTasks.size();
|
||||||
if ( numOfFutures > 0 ) {
|
if ( numOfFutures > 0 ) {
|
||||||
|
|
|
@ -34,30 +34,29 @@ public class ShutdownController {
|
||||||
{
|
{
|
||||||
String initMsg = "Received a \"shutdownService\" request ";
|
String initMsg = "Received a \"shutdownService\" request ";
|
||||||
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
||||||
initMsg += "from [" + remoteAddr + "]. ";
|
initMsg += "from IP=[" + remoteAddr + "]. ";
|
||||||
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
||||||
if ( responseEntity != null )
|
if ( responseEntity != null )
|
||||||
return responseEntity;
|
return responseEntity;
|
||||||
|
|
||||||
String endingMsg;
|
String additionalMsg;
|
||||||
if ( shouldShutdownService ) {
|
if ( shouldShutdownService ) {
|
||||||
endingMsg = "The controller has already received a \"shutdownService\" request (which was not canceled afterwards).";
|
additionalMsg = "The controller has already received a \"shutdownService\" request (which was not canceled afterwards).";
|
||||||
logger.info(initMsg + endingMsg);
|
logger.info(initMsg + additionalMsg);
|
||||||
} else {
|
} else {
|
||||||
shouldShutdownService = true;
|
shouldShutdownService = true;
|
||||||
endingMsg = "The service will shutdown, after finishing current work.";
|
additionalMsg = "The service will shutdown, after finishing current work.";
|
||||||
if ( UrlsController.numOfActiveWorkers.get() == 0 ) {
|
if ( UrlsController.numOfActiveWorkers.get() == 0 ) {
|
||||||
endingMsg += " None of the workers is active in order to post shutdown requests to.";
|
logger.info(initMsg + additionalMsg + " None of the workers is active in order to post shutdown requests to.");
|
||||||
logger.info(initMsg + endingMsg);
|
|
||||||
} else {
|
} else {
|
||||||
logger.info(initMsg + endingMsg); // Show this message before the post-operation, as the following code may take some time to finish.
|
logger.info(initMsg + additionalMsg); // Show this message before the post-operation, as the following code may take some time to finish.
|
||||||
shutdownService.postShutdownOrCancelRequestsToAllWorkers(false);
|
shutdownService.postShutdownOrCancelRequestsToAllWorkers(false);
|
||||||
}
|
}
|
||||||
// That's it for now. The workers may take some hours to finish their work (including delivering the full-text files).
|
// That's it for now. The workers may take some hours to finish their work (including delivering the full-text files).
|
||||||
// A scheduler monitors the shutdown of the workers. Once all worker have shutdown, the Controller shuts down as well.
|
// A scheduler monitors the shutdown of the workers. Once all worker have shutdown, the Controller shuts down as well.
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseEntity.ok().body(endingMsg + GenericUtils.endOfLine);
|
return ResponseEntity.ok().body(additionalMsg + GenericUtils.endOfLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,21 +65,20 @@ public class ShutdownController {
|
||||||
{
|
{
|
||||||
String initMsg = "Received a \"cancelShutdownService\" request ";
|
String initMsg = "Received a \"cancelShutdownService\" request ";
|
||||||
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
||||||
initMsg += "from [" + remoteAddr + "]. ";
|
initMsg += "from IP=[" + remoteAddr + "]. ";
|
||||||
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
||||||
if ( responseEntity != null )
|
if ( responseEntity != null )
|
||||||
return responseEntity;
|
return responseEntity;
|
||||||
|
|
||||||
shouldShutdownService = false;
|
shouldShutdownService = false;
|
||||||
String endingMsg = "Any previous \"shutdownService\"-request is canceled.";
|
String additionalMsg = "Any previous \"shutdownService\"-request is canceled.";
|
||||||
if ( UrlsController.numOfActiveWorkers.get() == 0 ) {
|
if ( UrlsController.numOfActiveWorkers.get() == 0 ) {
|
||||||
endingMsg += " None of the workers is active in order to post cancel-shutdown requests to.";
|
logger.info(initMsg + additionalMsg + " None of the workers is active in order to post cancel-shutdown requests to.");
|
||||||
logger.info(initMsg + endingMsg);
|
|
||||||
} else {
|
} else {
|
||||||
logger.info(initMsg + endingMsg); // Show this message before the post-operation, as the following code may take some time to finish.
|
logger.info(initMsg + additionalMsg); // Show this message before the post-operation, as the following code may take some time to finish.
|
||||||
shutdownService.postShutdownOrCancelRequestsToAllWorkers(true); // Cancel the shutdown of the workers, if we are able to catch up with them before they have already shutdown..
|
shutdownService.postShutdownOrCancelRequestsToAllWorkers(true); // Cancel the shutdown of the workers, if we are able to catch up with them before they have already shutdown..
|
||||||
}
|
}
|
||||||
return ResponseEntity.ok().body(endingMsg + GenericUtils.endOfLine);
|
return ResponseEntity.ok().body(additionalMsg + GenericUtils.endOfLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +90,7 @@ public class ShutdownController {
|
||||||
{
|
{
|
||||||
String initMsg = "Received a \"shutdownAllWorkers\" request ";
|
String initMsg = "Received a \"shutdownAllWorkers\" request ";
|
||||||
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
||||||
initMsg += "from [" + remoteAddr + "]. ";
|
initMsg += "from IP=[" + remoteAddr + "]. ";
|
||||||
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
||||||
if ( responseEntity != null )
|
if ( responseEntity != null )
|
||||||
return responseEntity;
|
return responseEntity;
|
||||||
|
@ -122,7 +120,7 @@ public class ShutdownController {
|
||||||
{
|
{
|
||||||
String initMsg = "Received a \"cancelShutdownAllWorkers\" request ";
|
String initMsg = "Received a \"cancelShutdownAllWorkers\" request ";
|
||||||
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
||||||
initMsg += "from [" + remoteAddr + "]. ";
|
initMsg += "from IP=[" + remoteAddr + "]. ";
|
||||||
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
ResponseEntity<?> responseEntity = shutdownService.passSecurityChecks(remoteAddr, initMsg);
|
||||||
if ( responseEntity != null )
|
if ( responseEntity != null )
|
||||||
return responseEntity;
|
return responseEntity;
|
||||||
|
@ -144,7 +142,7 @@ public class ShutdownController {
|
||||||
public ResponseEntity<?> workerShutdownReport(@RequestParam String workerId, HttpServletRequest request)
|
public ResponseEntity<?> workerShutdownReport(@RequestParam String workerId, HttpServletRequest request)
|
||||||
{
|
{
|
||||||
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
String remoteAddr = GenericUtils.getRequestorAddress(request);
|
||||||
String initMsg = "Received a \"workerShutdownReport\" from worker: \"" + workerId + "\" [IP: " + remoteAddr + "].";
|
String initMsg = "Received a \"workerShutdownReport\" from worker: \"" + workerId + "\" with IP=[" + remoteAddr + "].";
|
||||||
WorkerInfo workerInfo = UrlsController.workersInfoMap.get(workerId);
|
WorkerInfo workerInfo = UrlsController.workersInfoMap.get(workerId);
|
||||||
if ( workerInfo == null ) {
|
if ( workerInfo == null ) {
|
||||||
String errorMsg = "The worker with id \"" + workerId + "\" has not participated in the PDF-Aggregation-Service!";
|
String errorMsg = "The worker with id \"" + workerId + "\" has not participated in the PDF-Aggregation-Service!";
|
||||||
|
|
|
@ -271,7 +271,7 @@ public class FileUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we append the file-hash, so it is guaranteed that the filename will be unique.
|
// Now we append the file-hash, so it is guaranteed that the filename will be unique.
|
||||||
return datasourceId + "/" + openAireID + "::" + hash + dotFileExtension; // This is the fileName to be used in the objectStore, not of the local file!
|
return (datasourceId + "/" + openAireID + "::" + hash + dotFileExtension); // This is the fileName to be used in the objectStore, not of the local file!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -280,9 +280,7 @@ public class FileUtils {
|
||||||
final StringBuilder msgStrB = new StringBuilder(500);
|
final StringBuilder msgStrB = new StringBuilder(500);
|
||||||
try ( BufferedReader br = new BufferedReader(new InputStreamReader((isError ? conn.getErrorStream() : conn.getInputStream()), StandardCharsets.UTF_8)) ) {
|
try ( BufferedReader br = new BufferedReader(new InputStreamReader((isError ? conn.getErrorStream() : conn.getInputStream()), StandardCharsets.UTF_8)) ) {
|
||||||
String inputLine;
|
String inputLine;
|
||||||
while ( (inputLine = br.readLine()) != null )
|
while ( ((inputLine = br.readLine()) != null) && !inputLine.isEmpty() ) {
|
||||||
{
|
|
||||||
if ( !inputLine.isEmpty() )
|
|
||||||
msgStrB.append(inputLine);
|
msgStrB.append(inputLine);
|
||||||
}
|
}
|
||||||
return (msgStrB.length() != 0) ? msgStrB.toString() : null; // Make sure we return a "null" on empty string, to better handle the case in the caller-function.
|
return (msgStrB.length() != 0) ? msgStrB.toString() : null; // Make sure we return a "null" on empty string, to better handle the case in the caller-function.
|
||||||
|
|
Loading…
Reference in New Issue