Esempio n. 1
0
static int dnet_check_fill(struct dnet_session *s, struct dnet_check_request *r, char *data, int num)
{
	struct dnet_node *n = dnet_session_get_node(s);
	int i;
	char *cur;
	struct dnet_id id;
	struct dnet_id *rid = (struct dnet_id *)(r + 1);
	char tmp_str[DNET_ID_SIZE*2+1];

	for (i=0; i<num; ++i) {
		cur = strchr(data, '\n');

		if (!cur || !*cur)
			break;

		dnet_transform(s, data, cur - data, &id);

		rid[i] = id;
		dnet_convert_id(&rid[i]);

		dnet_log_raw(n, DNET_LOG_NOTICE, "check: %s\n", dnet_dump_id_len_raw(id.id, DNET_ID_SIZE, tmp_str));

		data = cur + 1;
	}

	return 0;
}
Esempio n. 2
0
static int dnet_ids_generate(struct dnet_node *n, const char *file, unsigned long long storage_free)
{
	int fd, err, size = 1024, i, num;
	struct dnet_id id;
	struct dnet_raw_id raw;
	unsigned long long q = 100 * 1024 * 1024 * 1024ULL;
	char *buf;

	srand(time(NULL) + (unsigned long)n + (unsigned long)file + (unsigned long)&buf);

	fd = open(file, O_RDWR | O_CREAT | O_TRUNC | O_APPEND | O_CLOEXEC, 0644);
	if (fd < 0) {
		err = -errno;
		dnet_log_err(n, "failed to open/create ids file '%s'", file);
		goto err_out_exit;
	}

	buf = malloc(size);
	if (!buf) {
		err = -ENOMEM;
		goto err_out_close;
	}

	num = storage_free / q + 1;
	for (i=0; i<num; ++i) {
		int r = rand();
		memcpy(buf, &n->addr, sizeof(struct dnet_addr));
		memcpy(buf + sizeof(struct dnet_addr), &r, sizeof(r));

		dnet_transform(n, buf, size, &id);
		memcpy(&raw, id.id, sizeof(struct dnet_raw_id));

		err = write(fd, &raw, sizeof(struct dnet_raw_id));
		if (err != sizeof(struct dnet_raw_id)) {
			dnet_log_err(n, "failed to write id into ids file '%s'", file);
			goto err_out_unlink;
		}
	}

	close(fd);
	return 0;

err_out_unlink:
	unlink(file);
err_out_close:
	close(fd);
err_out_exit:
	return err;
}