Ejemplo n.º 1
0
Archivo: util.c Proyecto: Machyne/mongo
void
val_gen_setup(WT_RAND_STATE *rnd, WT_ITEM *value)
{
	size_t i, len;
	char *p;

	memset(value, 0, sizeof(WT_ITEM));

	/*
	 * Set initial buffer contents to recognizable text.
	 *
	 * Add a few extra bytes in order to guarantee we can always offset
	 * into the buffer by a few extra bytes, used to generate different
	 * data for column-store run-length encoded files.
	 */
	len = MAX(KILOBYTE(100), g.c_value_max) + 20;
	p = dmalloc(len);
	for (i = 0; i < len; ++i)
		p[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % 26];

	value->mem = p;
	value->memsize = len;
	value->data = value->mem;
	value->size = 0;

	val_dup_data_len = value_len(rnd,
	    (uint64_t)mmrand(rnd, 1, 20), g.c_value_min, g.c_value_max);
}
Ejemplo n.º 2
0
void
val_gen(WT_RAND_STATE *rnd, WT_ITEM *value, uint64_t keyno)
{
	char *p;

	p = value->mem;
	value->data = value->mem;

	/*
	 * Fixed-length records: take the low N bits from the last digit of
	 * the record number.
	 */
	if (g.type == FIX) {
		switch (g.c_bitcnt) {
		case 8: p[0] = (char)mmrand(rnd, 1, 0xff); break;
		case 7: p[0] = (char)mmrand(rnd, 1, 0x7f); break;
		case 6: p[0] = (char)mmrand(rnd, 1, 0x3f); break;
		case 5: p[0] = (char)mmrand(rnd, 1, 0x1f); break;
		case 4: p[0] = (char)mmrand(rnd, 1, 0x0f); break;
		case 3: p[0] = (char)mmrand(rnd, 1, 0x07); break;
		case 2: p[0] = (char)mmrand(rnd, 1, 0x03); break;
		case 1: p[0] = 1; break;
		}
		value->size = 1;
		return;
	}

	/*
	 * WiredTiger doesn't store zero-length data items in row-store files,
	 * test that by inserting a zero-length data item every so often.
	 */
	if (keyno % 63 == 0) {
		p[0] = '\0';
		value->size = 0;
		return;
	}

	/*
	 * Start the data with a 10-digit number.
	 *
	 * For row and non-repeated variable-length column-stores, change the
	 * leading number to ensure every data item is unique.  For repeated
	 * variable-length column-stores (that is, to test run-length encoding),
	 * use the same data value all the time.
	 */
	if ((g.type == ROW || g.type == VAR) &&
	    g.c_repeat_data_pct != 0 &&
	    mmrand(rnd, 1, 100) < g.c_repeat_data_pct) {
		(void)strcpy(p, "DUPLICATEV");
		p[10] = '/';
		value->size = val_dup_data_len;
	} else {
		(void)sprintf(p, "%010" PRIu64, keyno);
		p[10] = '/';
		value->size =
		    value_len(rnd, keyno, g.c_value_min, g.c_value_max);
	}
}
Ejemplo n.º 3
0
Archivo: util.c Proyecto: Machyne/mongo
void
val_gen(WT_RAND_STATE *rnd, WT_ITEM *value, uint64_t keyno)
{
	char *p;

	p = value->mem;
	value->data = value->mem;

	/*
	 * Fixed-length records: take the low N bits from the last digit of
	 * the record number.
	 */
	if (g.type == FIX) {
		switch (g.c_bitcnt) {
		case 8: p[0] = (char)mmrand(rnd, 1, 0xff); break;
		case 7: p[0] = (char)mmrand(rnd, 1, 0x7f); break;
		case 6: p[0] = (char)mmrand(rnd, 1, 0x3f); break;
		case 5: p[0] = (char)mmrand(rnd, 1, 0x1f); break;
		case 4: p[0] = (char)mmrand(rnd, 1, 0x0f); break;
		case 3: p[0] = (char)mmrand(rnd, 1, 0x07); break;
		case 2: p[0] = (char)mmrand(rnd, 1, 0x03); break;
		case 1: p[0] = 1; break;
		}
		value->size = 1;
		return;
	}

	/*
	 * WiredTiger doesn't store zero-length data items in row-store files,
	 * test that by inserting a zero-length data item every so often.
	 */
	if (keyno % 63 == 0) {
		p[0] = '\0';
		value->size = 0;
		return;
	}

	/*
	 * Data items have unique leading numbers by default and random lengths;
	 * variable-length column-stores use a duplicate data value to test RLE.
	 */
	if (g.type == VAR && mmrand(rnd, 1, 100) < g.c_repeat_data_pct) {
		(void)strcpy(p, "DUPLICATEV");
		p[10] = '/';
		value->size = val_dup_data_len;
	} else {
		u64_to_string_zf(keyno, p, 11);
		p[10] = '/';
		value->size =
		    value_len(rnd, keyno, g.c_value_min, g.c_value_max);
	}
}
Ejemplo n.º 4
0
int parse_value(char *buf, size_t buflen, int *pos, value_descriptor *desc, void **value, size_t *_value_len)
{
	if (*pos+3 > buflen) return 0;

	char *b=buf+*pos;
	if (!check_tag(&b[0],sizeof(key),keys,sizeof(keys)/sizeof(keys[0]))) return 0;
	if (!check_tag(&b[1],sizeof(field),fields,sizeof(fields)/sizeof(fields[0]))) return 0;
	if (b[1]!=LP_RECORD && !check_tag(&b[2],sizeof(datatype),datatypes,sizeof(datatypes)/sizeof(datatypes[0]))) return 0;

	memcpy(desc, b, sizeof (*desc));
	b+=3;
	struct hash_item i={desc->f, desc->t, b};
	*_value_len=value_len(i);
	if (*pos+3+*_value_len>buflen) return 0;
	*value=(void*)b;
	*pos+=3+*_value_len;

	return 1;

}
Ejemplo n.º 5
0
void print_hash(hash *h)
{

	int k;
	struct hash_item i;
	size_t l;
	int b;
	for (i=(*h)[k=0];k<LP_LAST;i=(*h)[++k]) if (i.v) switch (k)
	{
		case LP_SAMPLE_RATE: printf("sample rate %d\n",*(int*)i.v); break;
		case LP_SOURCE_MAC: printf("source mac address %02x:%02x:%02x:%02x:%02x:%02x\n",*(unsigned char*)i.v,*(unsigned char*)(i.v+1),*(unsigned char*)(i.v+2),*(unsigned char*)(i.v+3),*(unsigned char*)(i.v+4),*(unsigned char*)(i.v+5)); break;
		case LP_DEVICE_NAME: printf("device name %s\n",(char*)i.v); break;
		case LP_SAMPLES_COUNT: printf("samples count %d\n",*(short int*)i.v); break;
		case LP_TIME_OFFSET: printf("time offset %d\n",*(long int*)i.v); break;
		case LP_DEVICE_TIME: printf("device time %d\n",*(long int*)i.v); break;
	default:
		l=value_len(i);
		printf("unprintable value 0x%x (%d bytes)",k,l);
		for (b=0;b<l;b++) printf(" %02x",*(unsigned char*)(i.v+b));
		printf("\n");
	};
}