mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-20 22:59:34 -05:00
Fix formats, reduce PAGEHDRSZ size_t->unsigned.
NUMKEYS was size_t due to PAGEHDRSZ; printing unsigned int is simpler. Instead increase PAGEFILL to long, since it involves a multiply. Possibly uint32_t or something would be sufficient.
This commit is contained in:
parent
aed36f5780
commit
f42f7f3442
2 changed files with 24 additions and 17 deletions
|
|
@ -115,11 +115,11 @@ typedef struct MDB_page { /* represents a page of storage */
|
||||||
indx_t mp_ptrs[1]; /* dynamic size */
|
indx_t mp_ptrs[1]; /* dynamic size */
|
||||||
} MDB_page;
|
} MDB_page;
|
||||||
|
|
||||||
#define PAGEHDRSZ offsetof(MDB_page, mp_ptrs)
|
#define PAGEHDRSZ ((unsigned) offsetof(MDB_page, mp_ptrs))
|
||||||
|
|
||||||
#define NUMKEYS(p) (((p)->mp_lower - PAGEHDRSZ) >> 1)
|
#define NUMKEYS(p) (((p)->mp_lower - PAGEHDRSZ) >> 1)
|
||||||
#define SIZELEFT(p) (indx_t)((p)->mp_upper - (p)->mp_lower)
|
#define SIZELEFT(p) (indx_t)((p)->mp_upper - (p)->mp_lower)
|
||||||
#define PAGEFILL(env, p) (1000 * ((env)->me_head.mh_psize - PAGEHDRSZ - SIZELEFT(p)) / \
|
#define PAGEFILL(env, p) (1000L * ((env)->me_head.mh_psize - PAGEHDRSZ - SIZELEFT(p)) / \
|
||||||
((env)->me_head.mh_psize - PAGEHDRSZ))
|
((env)->me_head.mh_psize - PAGEHDRSZ))
|
||||||
#define IS_LEAF(p) F_ISSET((p)->mp_flags, P_LEAF)
|
#define IS_LEAF(p) F_ISSET((p)->mp_flags, P_LEAF)
|
||||||
#define IS_BRANCH(p) F_ISSET((p)->mp_flags, P_BRANCH)
|
#define IS_BRANCH(p) F_ISSET((p)->mp_flags, P_BRANCH)
|
||||||
|
|
@ -1051,7 +1051,7 @@ mdb_search_node(MDB_db *bt, MDB_page *mp, MDB_val *key,
|
||||||
MDB_node *node;
|
MDB_node *node;
|
||||||
MDB_val nodekey;
|
MDB_val nodekey;
|
||||||
|
|
||||||
DPRINTF("searching %lu keys in %s page %lu",
|
DPRINTF("searching %u keys in %s page %lu",
|
||||||
NUMKEYS(mp),
|
NUMKEYS(mp),
|
||||||
IS_LEAF(mp) ? "leaf" : "branch",
|
IS_LEAF(mp) ? "leaf" : "branch",
|
||||||
mp->mp_pgno);
|
mp->mp_pgno);
|
||||||
|
|
@ -1166,7 +1166,7 @@ mdb_search_page_root(MDB_db *bt, MDB_val *key,
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
MDB_node *node;
|
MDB_node *node;
|
||||||
|
|
||||||
DPRINTF("branch page %lu has %lu keys", mp->mp_pgno, NUMKEYS(mp));
|
DPRINTF("branch page %lu has %u keys", mp->mp_pgno, NUMKEYS(mp));
|
||||||
assert(NUMKEYS(mp) > 1);
|
assert(NUMKEYS(mp) > 1);
|
||||||
DPRINTF("found index 0 to page %lu", NODEPGNO(NODEPTR(mp, 0)));
|
DPRINTF("found index 0 to page %lu", NODEPGNO(NODEPTR(mp, 0)));
|
||||||
|
|
||||||
|
|
@ -1436,7 +1436,7 @@ mdb_cursor_next(MDB_cursor *cursor, MDB_val *key, MDB_val *data)
|
||||||
} else
|
} else
|
||||||
top->mp_ki++;
|
top->mp_ki++;
|
||||||
|
|
||||||
DPRINTF("==> cursor points to page %lu with %lu keys, key index %u",
|
DPRINTF("==> cursor points to page %lu with %u keys, key index %u",
|
||||||
mp->mp_pgno, NUMKEYS(mp), top->mp_ki);
|
mp->mp_pgno, NUMKEYS(mp), top->mp_ki);
|
||||||
|
|
||||||
assert(IS_LEAF(mp));
|
assert(IS_LEAF(mp));
|
||||||
|
|
@ -1664,7 +1664,7 @@ mdb_add_node(MDB_db *db, MDB_page *mp, indx_t indx,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node_size + sizeof(indx_t) > SIZELEFT(mp)) {
|
if (node_size + sizeof(indx_t) > SIZELEFT(mp)) {
|
||||||
DPRINTF("not enough room in page %lu, got %lu ptrs",
|
DPRINTF("not enough room in page %lu, got %u ptrs",
|
||||||
mp->mp_pgno, NUMKEYS(mp));
|
mp->mp_pgno, NUMKEYS(mp));
|
||||||
DPRINTF("upper - lower = %u - %u = %u", mp->mp_upper, mp->mp_lower,
|
DPRINTF("upper - lower = %u - %u = %u", mp->mp_upper, mp->mp_lower,
|
||||||
mp->mp_upper - mp->mp_lower);
|
mp->mp_upper - mp->mp_lower);
|
||||||
|
|
@ -1940,7 +1940,7 @@ mdb_merge(MDB_db *bt, MDB_pageparent *src, MDB_pageparent *dst)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTF("dst page %lu now has %lu keys (%.1f%% filled)",
|
DPRINTF("dst page %lu now has %u keys (%.1f%% filled)",
|
||||||
dst->mp_page->mp_pgno, NUMKEYS(dst->mp_page), (float)PAGEFILL(bt->md_env, dst->mp_page) / 10);
|
dst->mp_page->mp_pgno, NUMKEYS(dst->mp_page), (float)PAGEFILL(bt->md_env, dst->mp_page) / 10);
|
||||||
|
|
||||||
/* Unlink the src page from parent.
|
/* Unlink the src page from parent.
|
||||||
|
|
@ -1980,7 +1980,7 @@ mdb_rebalance(MDB_db *db, MDB_pageparent *mpp)
|
||||||
assert(db->md_env->me_txn != NULL);
|
assert(db->md_env->me_txn != NULL);
|
||||||
assert(mpp != NULL);
|
assert(mpp != NULL);
|
||||||
|
|
||||||
DPRINTF("rebalancing %s page %lu (has %lu keys, %.1f%% full)",
|
DPRINTF("rebalancing %s page %lu (has %u keys, %.1f%% full)",
|
||||||
IS_LEAF(mpp->mp_page) ? "leaf" : "branch",
|
IS_LEAF(mpp->mp_page) ? "leaf" : "branch",
|
||||||
mpp->mp_page->mp_pgno, NUMKEYS(mpp->mp_page), (float)PAGEFILL(db->md_env, mpp->mp_page) / 10);
|
mpp->mp_page->mp_pgno, NUMKEYS(mpp->mp_page), (float)PAGEFILL(db->md_env, mpp->mp_page) / 10);
|
||||||
|
|
||||||
|
|
@ -2043,7 +2043,7 @@ mdb_rebalance(MDB_db *db, MDB_pageparent *mpp)
|
||||||
}
|
}
|
||||||
npp.mp_parent = mpp->mp_parent;
|
npp.mp_parent = mpp->mp_parent;
|
||||||
|
|
||||||
DPRINTF("found neighbor page %lu (%lu keys, %.1f%% full)",
|
DPRINTF("found neighbor page %lu (%u keys, %.1f%% full)",
|
||||||
npp.mp_page->mp_pgno, NUMKEYS(npp.mp_page), (float)PAGEFILL(db->md_env, npp.mp_page) / 10);
|
npp.mp_page->mp_pgno, NUMKEYS(npp.mp_page), (float)PAGEFILL(db->md_env, npp.mp_page) / 10);
|
||||||
|
|
||||||
/* If the neighbor page is above threshold and has at least two
|
/* If the neighbor page is above threshold and has at least two
|
||||||
|
|
@ -2329,7 +2329,7 @@ mdb_put(MDB_db *bt, MDB_txn *txn,
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
assert(IS_LEAF(mpp.mp_page));
|
assert(IS_LEAF(mpp.mp_page));
|
||||||
DPRINTF("there are %lu keys, should insert new key at index %i",
|
DPRINTF("there are %u keys, should insert new key at index %i",
|
||||||
NUMKEYS(mpp.mp_page), ki);
|
NUMKEYS(mpp.mp_page), ki);
|
||||||
|
|
||||||
if (SIZELEFT(mpp.mp_page) < mdb_leaf_size(bt, key, data)) {
|
if (SIZELEFT(mpp.mp_page) < mdb_leaf_size(bt, key, data)) {
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,8 @@ int main(int argc,char * argv[])
|
||||||
rc = mdb_cursor_open(db, NULL, &cursor);
|
rc = mdb_cursor_open(db, NULL, &cursor);
|
||||||
while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
|
while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
}
|
}
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
|
|
||||||
|
|
@ -75,7 +76,8 @@ int main(int argc,char * argv[])
|
||||||
rc = mdb_cursor_open(db, NULL, &cursor);
|
rc = mdb_cursor_open(db, NULL, &cursor);
|
||||||
while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
|
while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
|
||||||
printf("key: %.*s, data: %.*s\n",
|
printf("key: %.*s, data: %.*s\n",
|
||||||
key.mv_size, key.mv_data, data.mv_size, data.mv_data);
|
(int) key.mv_size, (char *) key.mv_data,
|
||||||
|
(int) data.mv_size, (char *) data.mv_data);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
/* write ops aren't coordinated with cursors,
|
/* write ops aren't coordinated with cursors,
|
||||||
|
|
@ -87,18 +89,21 @@ int main(int argc,char * argv[])
|
||||||
for (i=0; i<50; i++) {
|
for (i=0; i<50; i++) {
|
||||||
rc = mdb_cursor_get(cur2, &key, &data, MDB_NEXT);
|
rc = mdb_cursor_get(cur2, &key, &data, MDB_NEXT);
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
rc = mdb_del(db, txn, &key, NULL);
|
rc = mdb_del(db, txn, &key, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Restarting cursor in txn\n");
|
printf("Restarting cursor in txn\n");
|
||||||
rc = mdb_cursor_get(cur2, &key, &data, MDB_FIRST);
|
rc = mdb_cursor_get(cur2, &key, &data, MDB_FIRST);
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
for (i=0; i<32; i++) {
|
for (i=0; i<32; i++) {
|
||||||
rc = mdb_cursor_get(cur2, &key, &data, MDB_NEXT);
|
rc = mdb_cursor_get(cur2, &key, &data, MDB_NEXT);
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
}
|
}
|
||||||
mdb_cursor_close(cur2);
|
mdb_cursor_close(cur2);
|
||||||
rc = mdb_txn_commit(txn);
|
rc = mdb_txn_commit(txn);
|
||||||
|
|
@ -107,11 +112,13 @@ int main(int argc,char * argv[])
|
||||||
rc = mdb_cursor_open(db, NULL, &cursor);
|
rc = mdb_cursor_open(db, NULL, &cursor);
|
||||||
rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST);
|
rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST);
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
for (i=0; i<32; i++) {
|
for (i=0; i<32; i++) {
|
||||||
rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT);
|
rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT);
|
||||||
printf("key: %p %.*s, data: %p %.*s\n",
|
printf("key: %p %.*s, data: %p %.*s\n",
|
||||||
key.mv_data, key.mv_size, key.mv_data, data.mv_data, data.mv_size, data.mv_data);
|
key.mv_data, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
data.mv_data, (int) data.mv_size, (char *) data.mv_data);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
mdb_cursor_close(cursor);
|
mdb_cursor_close(cursor);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue