Beispiel #1
0
static int do_freeze_thaw(bool freeze, const char *name, const char *lxcpath)
{
	int ret;
	char v[100];
	const char *state = freeze ? "FROZEN" : "THAWED";
	size_t state_len = 6;
	lxc_state_t new_state = freeze ? FROZEN : THAWED;

	ret = lxc_cgroup_set("freezer.state", state, name, lxcpath);
	if (ret < 0) {
		ERROR("Failed to freeze %s", name);
		return -1;
	}

	for (;;) {
		ret = lxc_cgroup_get("freezer.state", v, sizeof(v), name, lxcpath);
		if (ret < 0) {
			ERROR("Failed to get freezer state of %s", name);
			return -1;
		}

		v[99] = '\0';
		v[lxc_char_right_gc(v, strlen(v))] = '\0';

		ret = strncmp(v, state, state_len);
		if (ret == 0) {
			lxc_cmd_serve_state_clients(name, lxcpath, new_state);
			lxc_monitor_send_state(name, new_state, lxcpath);
			return 0;
		}

		sleep(1);
	}
}
Beispiel #2
0
static int do_freeze_thaw(int freeze, const char *name, const char *lxcpath)
{
    char v[100];
    const char *state = freeze ? "FROZEN" : "THAWED";

    if (lxc_cgroup_set("freezer.state", state, name, lxcpath) < 0) {
        ERROR("Failed to freeze %s:%s", lxcpath, name);
        return -1;
    }
    while (1) {
        if (lxc_cgroup_get("freezer.state", v, 100, name, lxcpath) < 0) {
            ERROR("Failed to get new freezer state for %s:%s", lxcpath, name);
            return -1;
        }
        if (v[strlen(v)-1] == '\n')
            v[strlen(v)-1] = '\0';
        if (strncmp(v, state, strlen(state)) == 0) {
            if (name)
                lxc_monitor_send_state(name, freeze ? FROZEN : THAWED, lxcpath);
            return 0;
        }
        sleep(1);
    }
}
Beispiel #3
0
Datei: cgpath.c Projekt: 4b42/lxc
/*
 * test_running_container: test cgroup functions against a running container
 *
 * @group : name of the container group or NULL for default "lxc"
 * @name  : name of the container
 */
static int test_running_container(const char *lxcpath,
				  const char *group, const char *name)
{
	int ret = -1;
	struct lxc_container *c = NULL;
	char *cgrelpath;
	char  relpath[PATH_MAX+1];
	char  value[NAME_MAX], value_save[NAME_MAX];

	sprintf(relpath, "%s/%s", group ? group : "lxc", name);

	if ((c = lxc_container_new(name, lxcpath)) == NULL) {
		TSTERR("container %s couldn't instantiate", name);
		goto err1;
	}
	if (!c->is_defined(c)) {
		TSTERR("container %s does not exist", name);
		goto err2;
	}

	cgrelpath = lxc_cmd_get_cgroup_path(c->name, c->config_path, "freezer");
	if (!cgrelpath) {
		TSTERR("lxc_cmd_get_cgroup_path returned NULL");
		goto err2;
	}
	if (!strstr(cgrelpath, relpath)) {
		TSTERR("lxc_cmd_get_cgroup_path %s not in %s", relpath, cgrelpath);
		goto err3;
	}

	/* test get/set value using memory.soft_limit_in_bytes file */
	ret = lxc_cgroup_get("memory.soft_limit_in_bytes", value, sizeof(value),
			     c->name, c->config_path);
	if (ret < 0) {
		TSTERR("lxc_cgroup_get failed");
		goto err3;
	}
	strcpy(value_save, value);

	ret = lxc_cgroup_set("memory.soft_limit_in_bytes", "512M", c->name, c->config_path);
	if (ret < 0) {
		TSTERR("lxc_cgroup_set failed %d %d", ret, errno);
		goto err3;
	}
	ret = lxc_cgroup_get("memory.soft_limit_in_bytes", value, sizeof(value),
			     c->name, c->config_path);
	if (ret < 0) {
		TSTERR("lxc_cgroup_get failed");
		goto err3;
	}
	if (strcmp(value, "536870912\n")) {
		TSTERR("lxc_cgroup_set_bypath failed to set value >%s<", value);
		goto err3;
	}

	/* restore original value */
	ret = lxc_cgroup_set("memory.soft_limit_in_bytes", value_save,
			     c->name, c->config_path);
	if (ret < 0) {
		TSTERR("lxc_cgroup_set failed");
		goto err3;
	}

	ret = 0;

err3:
	free(cgrelpath);
err2:
	lxc_container_put(c);
err1:
	return ret;
}