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; }
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; }