コード例 #1
0
ファイル: farm.c プロジェクト: Vinchal/sheepdog
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;
}
コード例 #2
0
ファイル: farm.c プロジェクト: yaekumo/sheepdog
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;
}
コード例 #3
0
ファイル: farm.c プロジェクト: yaekumo/sheepdog
static int farm_end_recover(struct siocb *iocb)
{
    unsigned char snap_sha1[SHA1_LEN];
    unsigned char trunk_sha1[SHA1_LEN];
    int epoch = iocb->epoch - 1;

    if (epoch == 0)
        return SD_RES_SUCCESS;
    dprintf("epoch %d\n", epoch);
    if (trunk_file_write_recovery(trunk_sha1) < 0)
        return SD_RES_EIO;

    if (snap_file_write(epoch, trunk_sha1, snap_sha1, 0) < 0)
        return SD_RES_EIO;

    if (snap_log_write(iocb->epoch - 1, snap_sha1, 0) < 0)
        return SD_RES_EIO;

    return SD_RES_SUCCESS;
}
コード例 #4
0
ファイル: farm.c プロジェクト: yamt/sheepdog
static int farm_end_recover(uint32_t old_epoch,
		struct vnode_info *old_vnode_info)
{
	unsigned char snap_sha1[SHA1_LEN];
	unsigned char trunk_sha1[SHA1_LEN];

	if (old_epoch == 0)
		return SD_RES_SUCCESS;

	dprintf("old epoch %d\n", old_epoch);

	if (trunk_file_write_recovery(trunk_sha1) < 0)
		return SD_RES_EIO;

	if (snap_file_write(old_epoch, old_vnode_info->nodes,
			    old_vnode_info->nr_nodes, trunk_sha1,
			    snap_sha1) < 0)
		return SD_RES_EIO;

	if (snap_log_write(old_epoch, snap_sha1, 0) < 0)
		return SD_RES_EIO;

	return SD_RES_SUCCESS;
}