提交 967651c3 编写于 作者: W wujing 提交者: lifeng68

Query image newly added return top field && Health check field adaptation

Signed-off-by: Nwujing <wujing50@huawei.com>
上级 aa494a55
......@@ -2005,7 +2005,7 @@ static int pack_custom_no_health_check(container_config *container_spec, bool ha
goto out;
}
health_config->test[health_config->test_len++] = util_strdup_s("NONE");
container_spec->health_check = health_config;
container_spec->healthcheck = health_config;
out:
return ret;
......@@ -2035,10 +2035,10 @@ static int pack_custom_with_health_check(container_config *container_spec,
health_config->start_period = custom_conf->health_start_period;
health_config->retries = custom_conf->health_retries;
health_config->exit_on_unhealthy = custom_conf->exit_on_unhealthy;
if (container_spec->health_check != NULL) {
free_defs_health_check(container_spec->health_check);
if (container_spec->healthcheck != NULL) {
free_defs_health_check(container_spec->healthcheck);
}
container_spec->health_check = health_config;
container_spec->healthcheck = health_config;
out:
return ret;
......
......@@ -272,7 +272,7 @@ static int dup_health_check_from_image(const defs_health_check *image_health_che
health_check->retries = image_health_check->retries;
health_check->exit_on_unhealthy = image_health_check->exit_on_unhealthy;
container_spec->health_check = health_check;
container_spec->healthcheck = health_check;
health_check = NULL;
......@@ -283,34 +283,34 @@ out:
static int update_health_check_from_image(const defs_health_check *image_health_check, container_config *container_spec)
{
if (container_spec->health_check->test_len == 0) {
if (container_spec->healthcheck->test_len == 0) {
size_t i;
if (image_health_check->test_len > SIZE_MAX / sizeof(char *)) {
ERROR("invalid health check commands!");
return -1;
}
container_spec->health_check->test = util_common_calloc_s(sizeof(char *) * image_health_check->test_len);
if (container_spec->health_check->test == NULL) {
container_spec->healthcheck->test = util_common_calloc_s(sizeof(char *) * image_health_check->test_len);
if (container_spec->healthcheck->test == NULL) {
ERROR("Out of memory");
return -1;
}
for (i = 0; i < image_health_check->test_len; i++) {
container_spec->health_check->test[i] = util_strdup_s(image_health_check->test[i]);
container_spec->health_check->test_len++;
container_spec->healthcheck->test[i] = util_strdup_s(image_health_check->test[i]);
container_spec->healthcheck->test_len++;
}
}
if (container_spec->health_check->interval == 0) {
container_spec->health_check->interval = image_health_check->interval;
if (container_spec->healthcheck->interval == 0) {
container_spec->healthcheck->interval = image_health_check->interval;
}
if (container_spec->health_check->timeout == 0) {
container_spec->health_check->timeout = image_health_check->timeout;
if (container_spec->healthcheck->timeout == 0) {
container_spec->healthcheck->timeout = image_health_check->timeout;
}
if (container_spec->health_check->start_period == 0) {
container_spec->health_check->start_period = image_health_check->start_period;
if (container_spec->healthcheck->start_period == 0) {
container_spec->healthcheck->start_period = image_health_check->start_period;
}
if (container_spec->health_check->retries == 0) {
container_spec->health_check->retries = image_health_check->retries;
if (container_spec->healthcheck->retries == 0) {
container_spec->healthcheck->retries = image_health_check->retries;
}
return 0;
......@@ -324,7 +324,7 @@ static int oci_image_merge_health_check(const defs_health_check *image_health_ch
return 0;
}
if (container_spec->health_check == NULL) {
if (container_spec->healthcheck == NULL) {
if (dup_health_check_from_image(image_health_check, container_spec) != 0) {
ret = -1;
goto out;
......
......@@ -2432,7 +2432,7 @@ static int pack_health_check_from_image(const docker_image_config_v2 *config_v2,
size_t i;
defs_health_check *healthcheck = NULL;
if (config_v2->config->health_check == NULL || config_v2->config->health_check->test_len == 0) {
if (config_v2->config->healthcheck == NULL || config_v2->config->healthcheck->test_len == 0) {
return 0;
}
......@@ -2443,21 +2443,21 @@ static int pack_health_check_from_image(const docker_image_config_v2 *config_v2,
goto out;
}
healthcheck->test = util_common_calloc_s(sizeof(char *) * config_v2->config->health_check->test_len);
healthcheck->test = util_common_calloc_s(sizeof(char *) * config_v2->config->healthcheck->test_len);
if (healthcheck->test == NULL) {
ERROR("Out of memory");
ret = -1;
goto out;
}
for (i = 0; i < config_v2->config->health_check->test_len; i++) {
healthcheck->test[i] = util_strdup_s(config_v2->config->health_check->test[i]);
for (i = 0; i < config_v2->config->healthcheck->test_len; i++) {
healthcheck->test[i] = util_strdup_s(config_v2->config->healthcheck->test[i]);
}
healthcheck->test_len = config_v2->config->health_check->test_len;
healthcheck->interval = config_v2->config->health_check->interval;
healthcheck->retries = config_v2->config->health_check->retries;
healthcheck->start_period = config_v2->config->health_check->start_period;
healthcheck->timeout = config_v2->config->health_check->timeout;
healthcheck->exit_on_unhealthy = config_v2->config->health_check->exit_on_unhealthy;
healthcheck->test_len = config_v2->config->healthcheck->test_len;
healthcheck->interval = config_v2->config->healthcheck->interval;
healthcheck->retries = config_v2->config->healthcheck->retries;
healthcheck->start_period = config_v2->config->healthcheck->start_period;
healthcheck->timeout = config_v2->config->healthcheck->timeout;
healthcheck->exit_on_unhealthy = config_v2->config->healthcheck->exit_on_unhealthy;
info->healthcheck = healthcheck;
healthcheck = NULL;
......@@ -2581,6 +2581,7 @@ static imagetool_image *get_image_info(image_t *img)
info->created = util_strdup_s(img->simage->created);
info->loaded = util_strdup_s(img->simage->loaded);
info->size = img->simage->size;
info->top_layer = util_strdup_s(img->simage->layer);
if (pack_image_tags_and_repo_digest(img, info) != 0) {
ERROR("Failed to pack image tags and repo digest");
......@@ -2600,7 +2601,6 @@ out:
return info;
}
// TODO: add toplayer field to imagetool_image
imagetool_image *image_store_get_image(const char *id)
{
image_t *img = NULL;
......
......@@ -905,7 +905,7 @@ static int dup_health_check_config(const container_config *src, container_inspec
int ret = 0;
size_t i = 0;
if (src == NULL || src->health_check == NULL || dest == NULL) {
if (src == NULL || src->healthcheck == NULL || dest == NULL) {
return 0;
}
dest->health_check = util_common_calloc_s(sizeof(defs_health_check));
......@@ -914,34 +914,34 @@ static int dup_health_check_config(const container_config *src, container_inspec
ret = -1;
goto out;
}
if (src->health_check->test != NULL && src->health_check->test_len != 0) {
if (src->health_check->test_len > SIZE_MAX / sizeof(char *)) {
if (src->healthcheck->test != NULL && src->healthcheck->test_len != 0) {
if (src->healthcheck->test_len > SIZE_MAX / sizeof(char *)) {
ERROR("health check test is too much!");
ret = -1;
goto out;
}
dest->health_check->test = util_common_calloc_s(src->health_check->test_len * sizeof(char *));
dest->health_check->test = util_common_calloc_s(src->healthcheck->test_len * sizeof(char *));
if (dest->health_check->test == NULL) {
ERROR("Out of memory");
ret = -1;
goto out;
}
for (i = 0; i < src->health_check->test_len; i++) {
if (src->health_check->test[i] == NULL) {
for (i = 0; i < src->healthcheck->test_len; i++) {
if (src->healthcheck->test[i] == NULL) {
ERROR("Input value of src health check test is null");
ret = -1;
goto out;
}
dest->health_check->test[i] = util_strdup_s(src->health_check->test[i]);
dest->health_check->test[i] = util_strdup_s(src->healthcheck->test[i]);
dest->health_check->test_len++;
}
dest->health_check->interval = timeout_with_default(src->health_check->interval, DEFAULT_PROBE_INTERVAL);
dest->health_check->start_period = timeout_with_default(src->health_check->start_period, DEFAULT_START_PERIOD);
dest->health_check->timeout = timeout_with_default(src->health_check->timeout, DEFAULT_PROBE_TIMEOUT);
dest->health_check->retries = src->health_check->retries != 0 ? src->health_check->retries
dest->health_check->interval = timeout_with_default(src->healthcheck->interval, DEFAULT_PROBE_INTERVAL);
dest->health_check->start_period = timeout_with_default(src->healthcheck->start_period, DEFAULT_START_PERIOD);
dest->health_check->timeout = timeout_with_default(src->healthcheck->timeout, DEFAULT_PROBE_TIMEOUT);
dest->health_check->retries = src->healthcheck->retries != 0 ? src->healthcheck->retries
: DEFAULT_PROBE_RETRIES;
dest->health_check->exit_on_unhealthy = src->health_check->exit_on_unhealthy;
dest->health_check->exit_on_unhealthy = src->healthcheck->exit_on_unhealthy;
}
out:
return ret;
......
......@@ -243,11 +243,11 @@ static char **health_check_cmds(const container_config *config)
}
shell_len = util_array_len((const char **)shell);
if (shell_len > (SIZE_MAX / sizeof(char *)) - config->health_check->test_len) {
if (shell_len > (SIZE_MAX / sizeof(char *)) - config->healthcheck->test_len) {
ERROR("Invalid shell length");
goto out;
}
cmd_slice = util_common_calloc_s((shell_len + config->health_check->test_len) * sizeof(char *));
cmd_slice = util_common_calloc_s((shell_len + config->healthcheck->test_len) * sizeof(char *));
if (cmd_slice == NULL) {
ERROR("out of memory");
goto out;
......@@ -256,8 +256,8 @@ static char **health_check_cmds(const container_config *config)
cmd_slice[i] = util_strdup_s(shell[i]);
}
for (i = shell_len; i < (shell_len + config->health_check->test_len) - 1; i++) {
cmd_slice[i] = util_strdup_s(config->health_check->test[(i - shell_len) + 1]);
for (i = shell_len; i < (shell_len + config->healthcheck->test_len) - 1; i++) {
cmd_slice[i] = util_strdup_s(config->healthcheck->test[(i - shell_len) + 1]);
}
out:
......@@ -338,7 +338,7 @@ static int handle_increment_streak(container_t *cont, int retries)
health->failing_streak++;
if (health->failing_streak >= retries) {
set_health_status(cont->state, UNHEALTHY);
if (cont->common_config->config->health_check->exit_on_unhealthy) {
if (cont->common_config->config->healthcheck->exit_on_unhealthy) {
// kill container when exit on unhealthy flag is set
ret = stop_container(cont, 3, true, false);
if (ret != 0) {
......@@ -362,7 +362,7 @@ static int handle_unhealthy_case(container_t *cont, const defs_health_log_elemen
health_status = get_health_status(cont->state);
if (strcmp(health_status, HEALTH_STARTING) == 0) {
int64_t start_period = timeout_with_default(cont->common_config->config->health_check->start_period,
int64_t start_period = timeout_with_default(cont->common_config->config->healthcheck->start_period,
DEFAULT_START_PERIOD);
int64_t first, last;
if (to_unix_nanos_from_str(cont->state->state->started_at, &first)) {
......@@ -437,7 +437,7 @@ static int handle_probe_result(const char *container_id, const defs_health_log_e
if (get_health_check_monitor_state(cont->health_check) == MONITOR_STOP) {
goto out;
}
retries = cont->common_config->config->health_check->retries;
retries = cont->common_config->config->healthcheck->retries;
if (retries <= 0) {
retries = DEFAULT_PROBE_RETRIES;
}
......@@ -563,7 +563,7 @@ void *health_check_run(void *arg)
container_req->attach_stdin = false;
container_req->attach_stdout = true;
container_req->attach_stderr = true;
container_req->timeout = timeout_with_default(config->health_check->timeout, DEFAULT_PROBE_TIMEOUT) / Time_Second;
container_req->timeout = timeout_with_default(config->healthcheck->timeout, DEFAULT_PROBE_TIMEOUT) / Time_Second;
container_req->container_id = util_strdup_s(cont->common_config->id);
container_req->argv = cmd_slice;
container_req->argv_len = util_array_len((const char **)cmd_slice);
......@@ -613,7 +613,7 @@ out:
// Nil will be returned if no healthcheck was configured or NONE was set.
static health_probe_t get_probe(const container_t *cont)
{
defs_health_check *config = cont->common_config->config->health_check;
defs_health_check *config = cont->common_config->config->healthcheck;
if (config == NULL || config->test_len == 0) {
return HEALTH_NONE;
......@@ -713,7 +713,7 @@ static void *health_check_monitor(void *arg)
ERROR("Failed to monitor start time stamp");
goto out;
}
probe_interval = timeout_with_default(cont->common_config->config->health_check->interval,
probe_interval = timeout_with_default(cont->common_config->config->healthcheck->interval,
DEFAULT_PROBE_INTERVAL);
set_monitor_idle_status(cont->health_check);
while (true) {
......@@ -804,8 +804,8 @@ void init_health_monitor(const char *id)
return;
}
if (cont->common_config->config->health_check == NULL ||
cont->common_config->config->health_check->test == NULL) {
if (cont->common_config->config->healthcheck == NULL ||
cont->common_config->config->healthcheck->test == NULL) {
goto out;
}
......
......@@ -2009,29 +2009,29 @@ int verify_health_check_parameter(const container_config *container_spec)
{
int ret = 0;
if (container_spec == NULL || container_spec->health_check == NULL) {
if (container_spec == NULL || container_spec->healthcheck == NULL) {
return ret;
}
if (is_less_than_one_second(container_spec->health_check->interval)) {
if (is_less_than_one_second(container_spec->healthcheck->interval)) {
ERROR("Interval in Healthcheck cannot be less than one second");
isulad_set_error_message("Interval in Healthcheck cannot be less than one second");
ret = -1;
goto out;
}
if (is_less_than_one_second(container_spec->health_check->timeout)) {
if (is_less_than_one_second(container_spec->healthcheck->timeout)) {
ERROR("Timeout in Healthcheck cannot be less than one second");
isulad_set_error_message("Timeout in Healthcheck cannot be less than one second");
ret = -1;
goto out;
}
if (is_less_than_one_second(container_spec->health_check->start_period)) {
if (is_less_than_one_second(container_spec->healthcheck->start_period)) {
ERROR("StartPeriod in Healthcheck cannot be less than one second");
isulad_set_error_message("StartPeriod in Healthcheck cannot be less than one second");
ret = -1;
goto out;
}
if (container_spec->health_check->retries < 0) {
if (container_spec->healthcheck->retries < 0) {
ERROR("--health-retries cannot be negative");
isulad_set_error_message("--health-retries cannot be negative");
ret = -1;
......
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"HealthCheck":{"Test":["CMD-SHELL","date \u003e\u003e /tmp/health_check || exit 1"],"Interval":3000000000,"Timeout":3000000000,"StartPeriod":1000000000,"Retries":3,"ExitOnUnhealthy":true},"ArgsEscaped":true,"Image":"sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null,"Annotations":null},"container":"ed0b5c882c5b98b9f67a6dff3be078658d45d49540c8d8778b878d68a75bd8b7","container_config":{"Hostname":"ed0b5c882c5b","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","HEALTHCHECK \u0026{[\"CMD-SHELL\" \"date \u003e\u003e /tmp/health_check || exit 1\"] \"3s\" \"3s\" \"1s\" '\\x03' %!q(bool=true)}"],"HealthCheck":{"Test":["CMD-SHELL","date \u003e\u003e /tmp/health_check || exit 1"],"Interval":3000000000,"Timeout":3000000000,"StartPeriod":1000000000,"Retries":3,"ExitOnUnhealthy":true},"ArgsEscaped":true,"Image":"sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{},"Annotations":{"native.umask":"secure"}},"created":"2020-03-30T08:02:50.586247435Z","docker_version":"dev","history":[{"created":"2019-06-15T00:19:54.271494486Z","created_by":"/bin/sh -c #(nop) ADD file:b265aa0ea2ef7ff1f4a3e087217e75aca2c90f5c345406299664cc7969b2b28e in / "},{"created":"2019-06-15T00:19:54.402459069Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2020-03-30T08:02:50.586247435Z","created_by":"/bin/sh -c #(nop) HEALTHCHECK \u0026{[\"CMD-SHELL\" \"date \u003e\u003e /tmp/health_check || exit 1\"] \"3s\" \"3s\" \"1s\" '\\x03' %!q(bool=true)}","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a"]}}
{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"Healthcheck":{"Test":["CMD-SHELL","date \u003e\u003e /tmp/health_check || exit 1"],"Interval":3000000000,"Timeout":3000000000,"StartPeriod":1000000000,"Retries":3,"ExitOnUnhealthy":true},"ArgsEscaped":true,"Image":"sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null,"Annotations":null},"container":"ed0b5c882c5b98b9f67a6dff3be078658d45d49540c8d8778b878d68a75bd8b7","container_config":{"Hostname":"ed0b5c882c5b","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","HEALTHCHECK \u0026{[\"CMD-SHELL\" \"date \u003e\u003e /tmp/health_check || exit 1\"] \"3s\" \"3s\" \"1s\" '\\x03' %!q(bool=true)}"],"Healthcheck":{"Test":["CMD-SHELL","date \u003e\u003e /tmp/health_check || exit 1"],"Interval":3000000000,"Timeout":3000000000,"StartPeriod":1000000000,"Retries":3,"ExitOnUnhealthy":true},"ArgsEscaped":true,"Image":"sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{},"Annotations":{"native.umask":"secure"}},"created":"2020-03-30T08:02:50.586247435Z","docker_version":"dev","history":[{"created":"2019-06-15T00:19:54.271494486Z","created_by":"/bin/sh -c #(nop) ADD file:b265aa0ea2ef7ff1f4a3e087217e75aca2c90f5c345406299664cc7969b2b28e in / "},{"created":"2019-06-15T00:19:54.402459069Z","created_by":"/bin/sh -c #(nop) CMD [\"sh\"]","empty_layer":true},{"created":"2020-03-30T08:02:50.586247435Z","created_by":"/bin/sh -c #(nop) HEALTHCHECK \u0026{[\"CMD-SHELL\" \"date \u003e\u003e /tmp/health_check || exit 1\"] \"3s\" \"3s\" \"1s\" '\\x03' %!q(bool=true)}","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a"]}}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册