Skip to content

Commit 4ff4960

Browse files
singh264tajilaJasonFengJ9keithc-ca
committed
Address comments
Co-authored-by: Tobi Ajila <[email protected]> Co-authored-by: Jason Feng <[email protected]> Co-authored-by: Keith W. Campbell <[email protected]> Signed-off-by: Amarpreet Singh <[email protected]>
1 parent aa9cb9d commit 4ff4960

File tree

1 file changed

+47
-89
lines changed
  • src/java.base/share/native/libjli

1 file changed

+47
-89
lines changed

src/java.base/share/native/libjli/java.c

+47-89
Original file line numberDiff line numberDiff line change
@@ -77,48 +77,6 @@
7777

7878
#define USE_STDERR JNI_TRUE /* we usually print to stderr */
7979
#define USE_STDOUT JNI_FALSE
80-
#if defined(J9VM_OPT_CRAC_SUPPORT)
81-
/* The return codes indicating errors, successful execution, or specific conditions. */
82-
#define EXECVP_ERROR -1
83-
#define EXECVP_SUCCESS 0
84-
#define WAIT_INDEFINITELY 0
85-
#define MEMORY_ALLOCATION_ERROR 1
86-
#define OPTION_NAME_NOT_FOUND_ERROR 2
87-
#define OPTION_VALUE_NOT_FOUND_ERROR 3
88-
#define OPTION_VALUE_NOT_VALID_ERROR 4
89-
#define OPTION_VALUE_NOT_EXPECTED_ERROR 5
90-
#define COMMAND_OPTION_LENGTH_CALCULATION_ERROR 6
91-
92-
/* The error messages. */
93-
#define OPTION_VALUE_NOT_FOUND_ERROR_MESSAGE "The value of the command line option %s was not found."
94-
#define OPTION_VALUE_NOT_VALID_ERROR_MESSAGE "The value of the command line option is not valid, option=%s, value=%s."
95-
#define OPTION_VALUE_NOT_EXPECTED_ERROR_MESSAGE "The value of the command line option is not expected, option=%s, value=%s."
96-
#define CHECKPOINT_DIRECTORY_ERROR_MESSAGE "Failed to get the CRIU checkpoint directory, error=%d."
97-
#define LOG_LEVEL_ERROR_MESSAGE "Failed to get the CRIU log level, error=%d."
98-
#define UNPRIVILEGED_MODE_ERROR_MESSAGE "Failed to get the CRIU unprivileged mode, error=%d."
99-
#define LOG_FILE_ERROR_MESSAGE "Failed to get the CRIU log file, error=%d."
100-
#define COMMAND_OPTION_LENGTH_CALCULATION_ERROR_MESSAGE "Failed to calculate the length of the command option, value=%s, format=%s."
101-
#define COMMAND_OPTION_MEMORY_ALLOCATION_ERROR_MESSAGE "Failed to allocate memory for the command option, value=%s, format=%s."
102-
#define RESTORE_FROM_CHECKPOINT_ERROR_MESSAGE "Failed to restore from checkpoint, error=%d."
103-
#define RESTORE_CHILD_PROCESS_FAILED_ERROR_MESSAGE "The CRIU restore child process failed."
104-
105-
/* The option names. */
106-
#define CRAC_RESTORE_FROM_OPTION_NAME "-XX:CRaCRestoreFrom"
107-
#define LOG_LEVEL_OPTION_NAME "-Dopenj9.internal.criu.logLevel"
108-
#define UNPRIVILEGED_MODE_OPTION_NAME "-Dopenj9.internal.criu.unprivilegedMode"
109-
#define LOG_FILE_OPTION_NAME "-Dopenj9.internal.criu.logFile"
110-
111-
/* The option formats. */
112-
#define LOG_LEVEL_OPTION_FORMAT "-v%d"
113-
#define LOG_FILE_OPTION_FORMAT "--log-file=%s"
114-
115-
/* The CRIU command options. */
116-
#define CRIU_COMMAND "criu"
117-
#define CRIU_RESTORE_OPTION "restore"
118-
#define CRIU_CHECKPOINT_DIRECTORY_OPTION "-D"
119-
#define CRIU_SHELL_JOB_OPTION "--shell-job"
120-
#define CRIU_UNPRIVILEGED_MODE_OPTION "--unprivileged"
121-
#endif /* defined(J9VM_OPT_CRAC_SUPPORT) */
12280

12381
static jboolean printVersion = JNI_FALSE; /* print and exit */
12482
static jboolean showVersion = JNI_FALSE; /* print but continue */
@@ -625,7 +583,7 @@ getCommandLineOptionValue(const char *optionName, int argc, char **argv, int *er
625583
}
626584
}
627585
if (!optionNameFound) {
628-
*error = OPTION_NAME_NOT_FOUND_ERROR;
586+
*error = -1;
629587
}
630588
return value;
631589
}
@@ -641,13 +599,13 @@ static const char *
641599
getCheckpointDirectory(int argc, char **argv, int *error)
642600
{
643601
const char *checkpointDirectory = NULL;
644-
const char *checkpointDirectoryPropertyValue = getCommandLineOptionValue(CRAC_RESTORE_FROM_OPTION_NAME, argc, argv, error);
602+
const char *checkpointDirectoryPropertyValue = getCommandLineOptionValue("-XX:CRaCRestoreFrom", argc, argv, error);
645603
if (0 == *error) {
646604
if (NULL != checkpointDirectoryPropertyValue) {
647605
checkpointDirectory = checkpointDirectoryPropertyValue;
648606
} else {
649-
JLI_ReportErrorMessage(OPTION_VALUE_NOT_FOUND_ERROR_MESSAGE, CRAC_RESTORE_FROM_OPTION_NAME);
650-
*error = OPTION_VALUE_NOT_FOUND_ERROR;
607+
JLI_ReportErrorMessage("The value of the command line option -XX:CRaCRestoreFrom was not found.");
608+
*error = -2;
651609
}
652610
}
653611
return checkpointDirectory;
@@ -661,7 +619,7 @@ getCheckpointDirectory(int argc, char **argv, int *error)
661619
static jboolean
662620
isCommandLineOptionFoundWithError(int error)
663621
{
664-
return (OPTION_NAME_NOT_FOUND_ERROR != error) && (0 != error);
622+
return (-1 != error) && (0 != error);
665623
}
666624

667625
/**
@@ -676,7 +634,7 @@ getLogLevel(int argc, char **argv, int *error)
676634
{
677635
int logLevelValue = 2; /* default */
678636
const char *logLevelPropertyValue = NULL;
679-
logLevelPropertyValue = getCommandLineOptionValue(LOG_LEVEL_OPTION_NAME, argc, argv, error);
637+
logLevelPropertyValue = getCommandLineOptionValue("-Dopenj9.internal.criu.logLevel", argc, argv, error);
680638
if (!isCommandLineOptionFoundWithError(*error)) {
681639
const char *c = logLevelPropertyValue;
682640
if (NULL == c) {
@@ -695,8 +653,8 @@ getLogLevel(int argc, char **argv, int *error)
695653
}
696654
}
697655
setLogLevelOptionValueNotValidError:
698-
JLI_ReportErrorMessage(OPTION_VALUE_NOT_VALID_ERROR_MESSAGE, LOG_LEVEL_OPTION_NAME, logLevelPropertyValue);
699-
*error = OPTION_VALUE_NOT_VALID_ERROR;
656+
JLI_ReportErrorMessage("The value of the command line option is not valid, option=-Dopenj9.internal.criu.logLevel, value=%s.", logLevelPropertyValue);
657+
*error = -1;
700658
done:
701659
return logLevelValue;
702660
}
@@ -712,13 +670,13 @@ static jboolean
712670
isUnprivilegedModeOn(int argc, char **argv, int *error)
713671
{
714672
jboolean isUnprivilegedModeOn = JNI_FALSE;
715-
const char *unprivilegedModePropertyValue = getCommandLineOptionValue(UNPRIVILEGED_MODE_OPTION_NAME, argc, argv, error);
673+
const char *unprivilegedModePropertyValue = getCommandLineOptionValue("-Dopenj9.internal.criu.unprivilegedMode", argc, argv, error);
716674
if (0 == *error) {
717675
if (NULL == unprivilegedModePropertyValue) {
718676
isUnprivilegedModeOn = JNI_TRUE;
719677
} else {
720-
JLI_ReportErrorMessage(OPTION_VALUE_NOT_EXPECTED_ERROR_MESSAGE, UNPRIVILEGED_MODE_OPTION_NAME, unprivilegedModePropertyValue);
721-
*error = OPTION_VALUE_NOT_EXPECTED_ERROR;
678+
JLI_ReportErrorMessage("The value of the command line option is not expected, option=-Dopenj9.internal.criu.unprivilegedMode, value=%s.", unprivilegedModePropertyValue);
679+
*error = -1;
722680
}
723681
}
724682
return isUnprivilegedModeOn;
@@ -735,13 +693,13 @@ static const char *
735693
getLogFile(int argc, char **argv, int *error)
736694
{
737695
const char *logFile = NULL;
738-
const char *logFilePropertyValue = getCommandLineOptionValue(LOG_FILE_OPTION_NAME, argc, argv, error);
696+
const char *logFilePropertyValue = getCommandLineOptionValue("-Dopenj9.internal.criu.logFile", argc, argv, error);
739697
if (0 == *error) {
740698
if (NULL != logFilePropertyValue) {
741699
logFile = logFilePropertyValue;
742700
} else {
743-
JLI_ReportErrorMessage(OPTION_VALUE_NOT_FOUND_ERROR_MESSAGE, LOG_FILE_OPTION_NAME);
744-
*error = OPTION_VALUE_NOT_FOUND_ERROR;
701+
JLI_ReportErrorMessage("The value of the command line option -Dopenj9.internal.criu.logFile was not found.");
702+
*error = -1;
745703
}
746704
}
747705
return logFile;
@@ -753,73 +711,73 @@ getLogFile(int argc, char **argv, int *error)
753711
* @param[in] logLevel The log level for CRIU logging
754712
* @param[in] unprivilegedModeOn Indicates whether the unprivileged mode option is on
755713
* @param[in] logFile The log file option for CRIU
756-
* @return EXECVP_SUCCESS if the execution of the 'criu restore' command succeeds, error code otherwise
714+
* @return 0 if the execution of the 'criu restore' command succeeds, -1 otherwise
757715
*/
758716
static int
759717
restoreFromCheckpoint(const char *checkpointDirectory, int logLevel, jboolean unprivilegedModeOn, const char *logFile)
760718
{
761-
int restoreStatus = EXECVP_SUCCESS;
719+
int restoreStatus = 0;
762720
int length = -1;
763721
char *logLevelOption = NULL;
764722
char *logFileOption = NULL;
765723
int argc = 0;
766724
const char *argv[9] = { NULL };
767-
argv[argc++] = CRIU_COMMAND;
768-
argv[argc++] = CRIU_RESTORE_OPTION;
769-
argv[argc++] = CRIU_CHECKPOINT_DIRECTORY_OPTION;
725+
argv[argc++] = "criu";
726+
argv[argc++] = "restore";
727+
argv[argc++] = "-D";
770728
argv[argc++] = checkpointDirectory;
771-
length = snprintf(NULL, 0, LOG_LEVEL_OPTION_FORMAT, logLevel);
729+
length = snprintf(NULL, 0, "-v%d", logLevel);
772730
if (length < 0) {
773731
char logLevelString[2] = { 0 };
774732
sprintf(logLevelString, "%d", logLevel);
775-
JLI_ReportErrorMessage(COMMAND_OPTION_LENGTH_CALCULATION_ERROR_MESSAGE, logLevelString, LOG_LEVEL_OPTION_FORMAT);
776-
restoreStatus = MEMORY_ALLOCATION_ERROR;
733+
JLI_ReportErrorMessage("Failed to calculate the length of the command option, value=%s, format=%s.", logLevelString, "-v%d");
734+
restoreStatus = -1;
777735
goto done;
778736
}
779737
logLevelOption = (char *)JLI_MemAlloc(length + 1);
780738
if (NULL == logLevelOption) {
781739
char logLevelString[2] = { 0 };
782740
sprintf(logLevelString, "%d", logLevel);
783-
JLI_ReportErrorMessage(COMMAND_OPTION_MEMORY_ALLOCATION_ERROR_MESSAGE, logLevelString, LOG_LEVEL_OPTION_FORMAT);
784-
restoreStatus = MEMORY_ALLOCATION_ERROR;
741+
JLI_ReportErrorMessage("Failed to allocate memory for the command option, value=%s, format=%s.", logLevelString, "-v%d");
742+
restoreStatus = -1;
785743
goto done;
786744
}
787-
if (snprintf(logLevelOption, length + 1, LOG_LEVEL_OPTION_FORMAT, logLevel) < 0) {
745+
if (snprintf(logLevelOption, length + 1, "-v%d", logLevel) < 0) {
788746
char logLevelString[2] = { 0 };
789747
sprintf(logLevelString, "%d", logLevel);
790-
JLI_ReportErrorMessage(COMMAND_OPTION_MEMORY_ALLOCATION_ERROR_MESSAGE, logLevelString, LOG_LEVEL_OPTION_FORMAT);
791-
restoreStatus = MEMORY_ALLOCATION_ERROR;
748+
JLI_ReportErrorMessage("Failed to allocate memory for the command option, value=%s, format=%s.", logLevelString, "-v%d");
749+
restoreStatus = -1;
792750
goto freeLogLevelOption;
793751
}
794752
argv[argc++] = logLevelOption;
795-
argv[argc++] = CRIU_SHELL_JOB_OPTION;
753+
argv[argc++] = "--shell-job";
796754
if (unprivilegedModeOn) {
797-
argv[argc++] = CRIU_UNPRIVILEGED_MODE_OPTION;
755+
argv[argc++] = "--unprivileged";
798756
}
799757
if (NULL != logFile) {
800-
length = snprintf(NULL, 0, LOG_FILE_OPTION_FORMAT, logFile);
758+
length = snprintf(NULL, 0, "--log-file=%s", logFile);
801759
if (length < 0) {
802-
JLI_ReportErrorMessage(COMMAND_OPTION_LENGTH_CALCULATION_ERROR_MESSAGE, logFile, LOG_FILE_OPTION_FORMAT);
803-
restoreStatus = MEMORY_ALLOCATION_ERROR;
760+
JLI_ReportErrorMessage("Failed to calculate the length of the command option, value=%s, format=%s.", logFile, "--log-file=%s");
761+
restoreStatus = -1;
804762
goto freeLogLevelOption;
805763
}
806764
logFileOption = (char *)JLI_MemAlloc(length + 1);
807765
if (NULL == logFileOption) {
808-
JLI_ReportErrorMessage(COMMAND_OPTION_MEMORY_ALLOCATION_ERROR_MESSAGE, logFile, LOG_FILE_OPTION_FORMAT);
809-
restoreStatus = MEMORY_ALLOCATION_ERROR;
766+
JLI_ReportErrorMessage("Failed to allocate memory for the command option, value=%s, format=%s.", logFile, "--log-file=%s");
767+
restoreStatus = -1;
810768
goto freeLogLevelOption;
811769
}
812-
if (snprintf(logFileOption, length + 1, LOG_FILE_OPTION_FORMAT, logFile) < 0) {
813-
JLI_ReportErrorMessage(COMMAND_OPTION_MEMORY_ALLOCATION_ERROR_MESSAGE, logFile, LOG_FILE_OPTION_FORMAT);
814-
restoreStatus = MEMORY_ALLOCATION_ERROR;
770+
if (snprintf(logFileOption, length + 1, "--log-file=%s", logFile) < 0) {
771+
JLI_ReportErrorMessage("Failed to allocate memory for the command option, value=%s, format=%s.", logFile, "--log-file=%s");
772+
restoreStatus = -1;
815773
goto freeLogFileOption;
816774
}
817775
argv[argc++] = logFileOption;
818776
}
819777
argv[argc] = NULL;
820778
execvp(argv[0], (char * const *)argv);
821779
/* If execvp returns, there was an error. */
822-
restoreStatus = EXECVP_ERROR;
780+
restoreStatus = -1;
823781
freeLogFileOption:
824782
if (logFileOption != NULL) {
825783
JLI_MemFree((void *)logFileOption);
@@ -853,11 +811,11 @@ handleCRaCRestore(int argc, char **argv)
853811
int childProcessPidStatus = 0;
854812
int childProcessPidExitStatus = 0;
855813
checkpointDirectory = getCheckpointDirectory(argc, argv, &error);
856-
if (OPTION_NAME_NOT_FOUND_ERROR == error) {
814+
if (-1 == error) {
857815
return;
858816
}
859-
if (0 != error) {
860-
JLI_ReportErrorMessage(CHECKPOINT_DIRECTORY_ERROR_MESSAGE, error);
817+
if (-2 == error) {
818+
JLI_ReportErrorMessage("Failed to get the CRIU checkpoint directory, error=%d.", error);
861819
parentProcessExitStatus = EXIT_FAILURE;
862820
goto doneParentProcess;
863821
}
@@ -869,35 +827,35 @@ handleCRaCRestore(int argc, char **argv)
869827
if (0 == childProcessPid) {
870828
logLevel = getLogLevel(argc, argv, &error);
871829
if (isCommandLineOptionFoundWithError(error)) {
872-
JLI_ReportErrorMessage(LOG_LEVEL_ERROR_MESSAGE, error);
830+
JLI_ReportErrorMessage("Failed to get the CRIU log level, error=%d.", error);
873831
childProcessExitStatus = EXIT_FAILURE;
874832
goto doneChildProcess;
875833
}
876834
unprivilegedModeOn = isUnprivilegedModeOn(argc, argv, &error);
877835
if (isCommandLineOptionFoundWithError(error)) {
878-
JLI_ReportErrorMessage(UNPRIVILEGED_MODE_ERROR_MESSAGE, error);
836+
JLI_ReportErrorMessage("Failed to get the CRIU unprivileged mode, error=%d.", error);
879837
childProcessExitStatus = EXIT_FAILURE;
880838
goto doneChildProcess;
881839
}
882840
logFile = getLogFile(argc, argv, &error);
883841
if (isCommandLineOptionFoundWithError(error)) {
884-
JLI_ReportErrorMessage(LOG_FILE_ERROR_MESSAGE, error);
842+
JLI_ReportErrorMessage("Failed to get the CRIU log file, error=%d.", error);
885843
childProcessExitStatus = EXIT_FAILURE;
886844
goto doneChildProcess;
887845
}
888846
childProcessExitStatus = restoreFromCheckpoint(checkpointDirectory, logLevel, unprivilegedModeOn, logFile);
889847
doneChildProcess:
890848
exit(childProcessExitStatus);
891849
} else {
892-
waitpid(childProcessPid, &childProcessPidStatus, WAIT_INDEFINITELY);
850+
waitpid(childProcessPid, &childProcessPidStatus, 0);
893851
if (WIFEXITED(childProcessPidStatus)) {
894852
childProcessPidExitStatus = WEXITSTATUS(childProcessPidStatus);
895853
if (EXIT_SUCCESS != childProcessPidExitStatus) {
896-
JLI_ReportErrorMessage(RESTORE_FROM_CHECKPOINT_ERROR_MESSAGE, childProcessPidExitStatus);
854+
JLI_ReportErrorMessage("Failed to restore from checkpoint, error=%d.", childProcessPidExitStatus);
897855
parentProcessExitStatus = EXIT_FAILURE;
898856
}
899857
} else {
900-
JLI_ReportErrorMessage(RESTORE_CHILD_PROCESS_FAILED_ERROR_MESSAGE);
858+
JLI_ReportErrorMessage("The CRIU restore child process failed.");
901859
parentProcessExitStatus = EXIT_FAILURE;
902860
}
903861
}

0 commit comments

Comments
 (0)