Пример #1
0
static void setup_reads_from_slist_blks(struct asfd *asfd,
	int *ar, struct slist *slist, int number_of_blks, uint64_t interrupt)
{
	struct sbuf *s;
	struct blk blk;
	struct iobuf iobuf;
	uint64_t file_no=1;
	if(!slist) return;
	for(s=slist->head; s; s=s->next)
	{
		if(sbuf_is_filedata(s)
		  && !sbuf_is_encrypted(s)) // Not working for proto2 yet.
		{
			int b;
			if(interrupt==file_no++)
				continue;
			blk_to_iobuf_sig(&blk, &iobuf);
			for(b=0; b<number_of_blks; b++)
			{
				iobuf_from_str(&iobuf, CMD_DATA,
					(char *)"some data");
				asfd_mock_read_iobuf(asfd, ar, 0, &iobuf);
			}
		}
	}
}
Пример #2
0
static int append_for_champ_chooser(struct asfd *chfd,
	struct blist *blist, int end_flags)
{
	static int finished_sending=0;
	static struct iobuf wbuf;
	static struct blk *blk=NULL;

	while(blist->blk_for_champ_chooser)
	{
		blk=blist->blk_for_champ_chooser;
		// If we send too many blocks to the champ chooser at once,
		// it can go faster than we can send paths to completed
		// manifests to it. This means that deduplication efficiency
		// is reduced (although speed may be faster).
		// So limit the sending.
		if(blk->index
		  - blist->head->index > MANIFEST_SIG_MAX)
			return 0;

		blk_to_iobuf_sig(blk, &wbuf);

		switch(chfd->append_all_to_write_buffer(chfd, &wbuf))
		{
			case APPEND_OK: break;
			case APPEND_BLOCKED:
				return 0; // Try again later.
			default: return -1;
		}
		blist->blk_for_champ_chooser=blk->next;
	}
	if(end_flags&END_SIGS
	  && !finished_sending && !blist->blk_for_champ_chooser)
	{
		iobuf_from_str(&wbuf, CMD_GEN, (char *)"sigs_end");
		switch(chfd->append_all_to_write_buffer(chfd, &wbuf))
		{
			case APPEND_OK: break;
			case APPEND_BLOCKED:
				return 0; // Try again later.
			default: return -1;
		}
		finished_sending++;
	}
	return 0;
}
Пример #3
0
static void setup_reads_from_slist(struct asfd *asfd,
	int *ar, struct slist *slist, int number_of_blks, uint64_t interrupt)
{
	int file_no=1;
	struct sbuf *s;
	struct blk blk;
	struct iobuf iobuf;
	if(!slist) return;
	for(s=slist->head; s; s=s->next)
	{
		if(sbuf_is_filedata(s)
		  && !sbuf_is_encrypted(s)) // Not working for proto2 yet.
		{
			int b;
			s->protocol2->index=file_no++;
			if(interrupt==s->protocol2->index)
			{
				char buf[32]="";
				asfd_mock_read(asfd,
					ar, 0, CMD_WARNING, "path vanished\n");
				base64_from_uint64(interrupt, buf);
				asfd_mock_read(asfd, ar, 0, CMD_INTERRUPT,
					buf);
				continue;
			}
			iobuf_free_content(&s->attr);
			attribs_encode(s);
			asfd_mock_read(asfd,
				ar, 0, CMD_ATTRIBS_SIGS, s->attr.buf);
			blk.fingerprint=file_no;
			memset(&blk.md5sum, file_no, MD5_DIGEST_LENGTH);
			blk_to_iobuf_sig(&blk, &iobuf);
			for(b=0; b<number_of_blks; b++)
				asfd_mock_read_iobuf(asfd, ar, 0, &iobuf);
		}
	}
}
Пример #4
0
static void setup_chfd_writes_from_slist(struct asfd *chfd,
	int *cw, struct slist *slist, int number_of_blks, uint64_t interrupt)
{
	struct sbuf *s;
	struct blk blk;
	struct iobuf iobuf;
	uint64_t file_no=1;
	if(!slist) return;
	for(s=slist->head; s; s=s->next)
	{
		if(sbuf_is_filedata(s)
		  && !sbuf_is_encrypted(s)) // Not working for proto2 yet.
		{
			int b;
			if(interrupt==file_no++)
				continue;
			blk.fingerprint=file_no;
			memset(&blk.md5sum, file_no, MD5_DIGEST_LENGTH);
			blk_to_iobuf_sig(&blk, &iobuf);
			for(b=0; b<number_of_blks; b++)
				asfd_assert_write_iobuf(chfd, cw, 0, &iobuf);
		}
	}
}
Пример #5
0
static int iobuf_from_blk_data(struct iobuf *wbuf, struct blk *blk)
{
	if(blk_md5_update(blk)) return -1;
	blk_to_iobuf_sig(blk, wbuf);
	return 0;
}