Example #1
0
static int farm_snapshot(const struct siocb *iocb)
{
	unsigned char snap_sha1[SHA1_LEN];
	unsigned char trunk_sha1[SHA1_LEN];
	struct sd_node nodes[SD_MAX_NODES];
	int nr_nodes;
	void *buffer;
	int log_nr, ret = SD_RES_EIO, epoch;

	buffer = snap_log_read(&log_nr);
	if (!buffer)
		goto out;

	epoch = log_nr + 1;
	sd_dprintf("user epoch %d", epoch);

	nr_nodes = epoch_log_read(sys->epoch, nodes, sizeof(nodes));
	if (nr_nodes < 0)
		goto out;

	if (trunk_file_write(trunk_sha1) < 0)
		goto out;

	if (snap_file_write(sys->epoch, nodes, nr_nodes,
			    trunk_sha1, snap_sha1) < 0)
		goto out;

	if (snap_log_write(epoch, snap_sha1) < 0)
		goto out;

	ret = SD_RES_SUCCESS;
out:
	free(buffer);
	return ret;
}
Example #2
0
static int farm_snapshot(struct siocb *iocb)
{
    unsigned char snap_sha1[SHA1_LEN];
    unsigned char trunk_sha1[SHA1_LEN];
    void *buffer;
    int log_nr, ret = SD_RES_EIO, epoch;

    buffer = snap_log_read(&log_nr, 1);
    if (!buffer)
        goto out;

    epoch = log_nr + 1;
    dprintf("user epoch %d\n", epoch);
    if (trunk_file_write(trunk_sha1, 1) < 0)
        goto out;

    if (snap_file_write(epoch, trunk_sha1, snap_sha1, 1) < 0)
        goto out;

    if (snap_log_write(epoch, snap_sha1, 1) < 0)
        goto out;

    ret = SD_RES_SUCCESS;
out:
    free(buffer);
    return ret;
}