Exemple #1
0
static int
checkbtreenode(struct btree *btr, struct btreenode *x, void *kmin, void *kmax,
    int isroot)
{
	int i;

	if (x == NULL)
		/* check that the two keys are in order */
		if (btr->cmp(kmin, kmax) >= 0)
			return 0;
		else
			return 1;
	else {
		if (!isroot && (x->n < btr->t - 1 || x->n > 2 * btr->t - 1)) {
			printf("node, to few or to many: %d\n", x->n);
			bt_dumptree(btr);
			exit(1);
		}
		/* check subnodes */
		if (x->n == 0 && !x->leaf)
			if (!checkbtreenode(btr, NODES(btr, x)[0], kmin, kmax,
			    0))
				return 0;
			else
				return 1;
		else if (x->n == 0 && x->leaf && !isroot) {
			printf("leaf with no keys!!\n");
			bt_dumptree(btr);
			if (!checkbtreenode(btr, NULL, kmin, kmax, 0))
				return 0;
			else
				return 1;
		}
		if (!checkbtreenode(btr, NODES(btr, x)[0], kmin,
		    KEYS(btr, x)[0], 0))
			return 0;
		for (i = 1; i < x->n; i++)
			if (!checkbtreenode(btr, NODES(btr, x)[i],
			    KEYS(btr, x)[i - 1], KEYS(btr, x)[i], 0))
				return 0;
		if (!checkbtreenode(btr, NODES(btr, x)[i], KEYS(btr, x)[i - 1],
		    kmax, 0))
			return 0;
	}
	return 1;
}
void
ai_btree_dump(as_sindex_metadata *imd, char *fname, bool verbose)
{
	FILE *fp = NULL;                                                            
	if (!(fp = fopen(fname, "w"))) {                                         
		return;                                                              
	}           

	fprintf(fp, "Namespace: %s set: %s\n", imd->ns_name, imd->set ? imd->set : "None");

	for (int i = 0; i < imd->nprts; i++) {
		as_sindex_pmetadata *pimd = &imd->pimd[i];
		fprintf(fp, "INDEX: name: %s:%d (%p)\n", imd->iname, i, (void *) pimd->ibtr);
		if (pimd->ibtr) {
			bt_dumptree(fp, pimd->ibtr, 1, verbose);
		}
	}

	fclose(fp);
}
Exemple #3
0
static void bt_internal_dump(struct btree *btr) {
    bt_dumptree(btr, btr->ktype, REDIS_BTREE);
}