btree_auto.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:59k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Do not edit: automatically built by gen_rec.awk. */
  2. #include "db_config.h"
  3. #ifndef NO_SYSTEM_INCLUDES
  4. #include <sys/types.h>
  5. #include <ctype.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #endif
  9. #include "db_int.h"
  10. #include "db_page.h"
  11. #include "db_dispatch.h"
  12. #include "db_am.h"
  13. #include "btree.h"
  14. #include "txn.h"
  15. int
  16. __bam_pg_alloc_log(dbenv, txnid, ret_lsnp, flags,
  17. fileid, meta_lsn, page_lsn, pgno, ptype, next)
  18. DB_ENV *dbenv;
  19. DB_TXN *txnid;
  20. DB_LSN *ret_lsnp;
  21. u_int32_t flags;
  22. int32_t fileid;
  23. DB_LSN * meta_lsn;
  24. DB_LSN * page_lsn;
  25. db_pgno_t pgno;
  26. u_int32_t ptype;
  27. db_pgno_t next;
  28. {
  29. DBT logrec;
  30. DB_LSN *lsnp, null_lsn;
  31. u_int32_t rectype, txn_num;
  32. int ret;
  33. u_int8_t *bp;
  34. rectype = DB_bam_pg_alloc;
  35. if (txnid != NULL &&
  36.     TAILQ_FIRST(&txnid->kids) != NULL &&
  37.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  38. return (ret);
  39. txn_num = txnid == NULL ? 0 : txnid->txnid;
  40. if (txnid == NULL) {
  41. ZERO_LSN(null_lsn);
  42. lsnp = &null_lsn;
  43. } else
  44. lsnp = &txnid->last_lsn;
  45. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  46.     + sizeof(fileid)
  47.     + sizeof(*meta_lsn)
  48.     + sizeof(*page_lsn)
  49.     + sizeof(pgno)
  50.     + sizeof(ptype)
  51.     + sizeof(next);
  52. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  53. return (ret);
  54. bp = logrec.data;
  55. memcpy(bp, &rectype, sizeof(rectype));
  56. bp += sizeof(rectype);
  57. memcpy(bp, &txn_num, sizeof(txn_num));
  58. bp += sizeof(txn_num);
  59. memcpy(bp, lsnp, sizeof(DB_LSN));
  60. bp += sizeof(DB_LSN);
  61. memcpy(bp, &fileid, sizeof(fileid));
  62. bp += sizeof(fileid);
  63. if (meta_lsn != NULL)
  64. memcpy(bp, meta_lsn, sizeof(*meta_lsn));
  65. else
  66. memset(bp, 0, sizeof(*meta_lsn));
  67. bp += sizeof(*meta_lsn);
  68. if (page_lsn != NULL)
  69. memcpy(bp, page_lsn, sizeof(*page_lsn));
  70. else
  71. memset(bp, 0, sizeof(*page_lsn));
  72. bp += sizeof(*page_lsn);
  73. memcpy(bp, &pgno, sizeof(pgno));
  74. bp += sizeof(pgno);
  75. memcpy(bp, &ptype, sizeof(ptype));
  76. bp += sizeof(ptype);
  77. memcpy(bp, &next, sizeof(next));
  78. bp += sizeof(next);
  79. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  80. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  81. if (txnid != NULL)
  82. txnid->last_lsn = *ret_lsnp;
  83. __os_free(logrec.data, logrec.size);
  84. return (ret);
  85. }
  86. int
  87. __bam_pg_alloc_print(dbenv, dbtp, lsnp, notused2, notused3)
  88. DB_ENV *dbenv;
  89. DBT *dbtp;
  90. DB_LSN *lsnp;
  91. db_recops notused2;
  92. void *notused3;
  93. {
  94. __bam_pg_alloc_args *argp;
  95. u_int32_t i;
  96. u_int ch;
  97. int ret;
  98. i = 0;
  99. ch = 0;
  100. notused2 = DB_TXN_ABORT;
  101. notused3 = NULL;
  102. if ((ret = __bam_pg_alloc_read(dbenv, dbtp->data, &argp)) != 0)
  103. return (ret);
  104. printf("[%lu][%lu]bam_pg_alloc: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  105.     (u_long)lsnp->file,
  106.     (u_long)lsnp->offset,
  107.     (u_long)argp->type,
  108.     (u_long)argp->txnid->txnid,
  109.     (u_long)argp->prev_lsn.file,
  110.     (u_long)argp->prev_lsn.offset);
  111. printf("tfileid: %ldn", (long)argp->fileid);
  112. printf("tmeta_lsn: [%lu][%lu]n",
  113.     (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
  114. printf("tpage_lsn: [%lu][%lu]n",
  115.     (u_long)argp->page_lsn.file, (u_long)argp->page_lsn.offset);
  116. printf("tpgno: %lun", (u_long)argp->pgno);
  117. printf("tptype: %lun", (u_long)argp->ptype);
  118. printf("tnext: %lun", (u_long)argp->next);
  119. printf("n");
  120. __os_free(argp, 0);
  121. return (0);
  122. }
  123. int
  124. __bam_pg_alloc_read(dbenv, recbuf, argpp)
  125. DB_ENV *dbenv;
  126. void *recbuf;
  127. __bam_pg_alloc_args **argpp;
  128. {
  129. __bam_pg_alloc_args *argp;
  130. u_int8_t *bp;
  131. int ret;
  132. ret = __os_malloc(dbenv, sizeof(__bam_pg_alloc_args) +
  133.     sizeof(DB_TXN), NULL, &argp);
  134. if (ret != 0)
  135. return (ret);
  136. argp->txnid = (DB_TXN *)&argp[1];
  137. bp = recbuf;
  138. memcpy(&argp->type, bp, sizeof(argp->type));
  139. bp += sizeof(argp->type);
  140. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  141. bp += sizeof(argp->txnid->txnid);
  142. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  143. bp += sizeof(DB_LSN);
  144. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  145. bp += sizeof(argp->fileid);
  146. memcpy(&argp->meta_lsn, bp,  sizeof(argp->meta_lsn));
  147. bp += sizeof(argp->meta_lsn);
  148. memcpy(&argp->page_lsn, bp,  sizeof(argp->page_lsn));
  149. bp += sizeof(argp->page_lsn);
  150. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  151. bp += sizeof(argp->pgno);
  152. memcpy(&argp->ptype, bp, sizeof(argp->ptype));
  153. bp += sizeof(argp->ptype);
  154. memcpy(&argp->next, bp, sizeof(argp->next));
  155. bp += sizeof(argp->next);
  156. *argpp = argp;
  157. return (0);
  158. }
  159. int
  160. __bam_pg_alloc1_print(dbenv, dbtp, lsnp, notused2, notused3)
  161. DB_ENV *dbenv;
  162. DBT *dbtp;
  163. DB_LSN *lsnp;
  164. db_recops notused2;
  165. void *notused3;
  166. {
  167. __bam_pg_alloc1_args *argp;
  168. u_int32_t i;
  169. u_int ch;
  170. int ret;
  171. i = 0;
  172. ch = 0;
  173. notused2 = DB_TXN_ABORT;
  174. notused3 = NULL;
  175. if ((ret = __bam_pg_alloc1_read(dbenv, dbtp->data, &argp)) != 0)
  176. return (ret);
  177. printf("[%lu][%lu]bam_pg_alloc1: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  178.     (u_long)lsnp->file,
  179.     (u_long)lsnp->offset,
  180.     (u_long)argp->type,
  181.     (u_long)argp->txnid->txnid,
  182.     (u_long)argp->prev_lsn.file,
  183.     (u_long)argp->prev_lsn.offset);
  184. printf("tfileid: %ldn", (long)argp->fileid);
  185. printf("tmeta_lsn: [%lu][%lu]n",
  186.     (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
  187. printf("talloc_lsn: [%lu][%lu]n",
  188.     (u_long)argp->alloc_lsn.file, (u_long)argp->alloc_lsn.offset);
  189. printf("tpage_lsn: [%lu][%lu]n",
  190.     (u_long)argp->page_lsn.file, (u_long)argp->page_lsn.offset);
  191. printf("tpgno: %lun", (u_long)argp->pgno);
  192. printf("tptype: %lun", (u_long)argp->ptype);
  193. printf("tnext: %lun", (u_long)argp->next);
  194. printf("n");
  195. __os_free(argp, 0);
  196. return (0);
  197. }
  198. int
  199. __bam_pg_alloc1_read(dbenv, recbuf, argpp)
  200. DB_ENV *dbenv;
  201. void *recbuf;
  202. __bam_pg_alloc1_args **argpp;
  203. {
  204. __bam_pg_alloc1_args *argp;
  205. u_int8_t *bp;
  206. int ret;
  207. ret = __os_malloc(dbenv, sizeof(__bam_pg_alloc1_args) +
  208.     sizeof(DB_TXN), NULL, &argp);
  209. if (ret != 0)
  210. return (ret);
  211. argp->txnid = (DB_TXN *)&argp[1];
  212. bp = recbuf;
  213. memcpy(&argp->type, bp, sizeof(argp->type));
  214. bp += sizeof(argp->type);
  215. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  216. bp += sizeof(argp->txnid->txnid);
  217. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  218. bp += sizeof(DB_LSN);
  219. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  220. bp += sizeof(argp->fileid);
  221. memcpy(&argp->meta_lsn, bp,  sizeof(argp->meta_lsn));
  222. bp += sizeof(argp->meta_lsn);
  223. memcpy(&argp->alloc_lsn, bp,  sizeof(argp->alloc_lsn));
  224. bp += sizeof(argp->alloc_lsn);
  225. memcpy(&argp->page_lsn, bp,  sizeof(argp->page_lsn));
  226. bp += sizeof(argp->page_lsn);
  227. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  228. bp += sizeof(argp->pgno);
  229. memcpy(&argp->ptype, bp, sizeof(argp->ptype));
  230. bp += sizeof(argp->ptype);
  231. memcpy(&argp->next, bp, sizeof(argp->next));
  232. bp += sizeof(argp->next);
  233. *argpp = argp;
  234. return (0);
  235. }
  236. int
  237. __bam_pg_free_log(dbenv, txnid, ret_lsnp, flags,
  238. fileid, pgno, meta_lsn, header, next)
  239. DB_ENV *dbenv;
  240. DB_TXN *txnid;
  241. DB_LSN *ret_lsnp;
  242. u_int32_t flags;
  243. int32_t fileid;
  244. db_pgno_t pgno;
  245. DB_LSN * meta_lsn;
  246. const DBT *header;
  247. db_pgno_t next;
  248. {
  249. DBT logrec;
  250. DB_LSN *lsnp, null_lsn;
  251. u_int32_t zero;
  252. u_int32_t rectype, txn_num;
  253. int ret;
  254. u_int8_t *bp;
  255. rectype = DB_bam_pg_free;
  256. if (txnid != NULL &&
  257.     TAILQ_FIRST(&txnid->kids) != NULL &&
  258.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  259. return (ret);
  260. txn_num = txnid == NULL ? 0 : txnid->txnid;
  261. if (txnid == NULL) {
  262. ZERO_LSN(null_lsn);
  263. lsnp = &null_lsn;
  264. } else
  265. lsnp = &txnid->last_lsn;
  266. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  267.     + sizeof(fileid)
  268.     + sizeof(pgno)
  269.     + sizeof(*meta_lsn)
  270.     + sizeof(u_int32_t) + (header == NULL ? 0 : header->size)
  271.     + sizeof(next);
  272. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  273. return (ret);
  274. bp = logrec.data;
  275. memcpy(bp, &rectype, sizeof(rectype));
  276. bp += sizeof(rectype);
  277. memcpy(bp, &txn_num, sizeof(txn_num));
  278. bp += sizeof(txn_num);
  279. memcpy(bp, lsnp, sizeof(DB_LSN));
  280. bp += sizeof(DB_LSN);
  281. memcpy(bp, &fileid, sizeof(fileid));
  282. bp += sizeof(fileid);
  283. memcpy(bp, &pgno, sizeof(pgno));
  284. bp += sizeof(pgno);
  285. if (meta_lsn != NULL)
  286. memcpy(bp, meta_lsn, sizeof(*meta_lsn));
  287. else
  288. memset(bp, 0, sizeof(*meta_lsn));
  289. bp += sizeof(*meta_lsn);
  290. if (header == NULL) {
  291. zero = 0;
  292. memcpy(bp, &zero, sizeof(u_int32_t));
  293. bp += sizeof(u_int32_t);
  294. } else {
  295. memcpy(bp, &header->size, sizeof(header->size));
  296. bp += sizeof(header->size);
  297. memcpy(bp, header->data, header->size);
  298. bp += header->size;
  299. }
  300. memcpy(bp, &next, sizeof(next));
  301. bp += sizeof(next);
  302. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  303. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  304. if (txnid != NULL)
  305. txnid->last_lsn = *ret_lsnp;
  306. __os_free(logrec.data, logrec.size);
  307. return (ret);
  308. }
  309. int
  310. __bam_pg_free_print(dbenv, dbtp, lsnp, notused2, notused3)
  311. DB_ENV *dbenv;
  312. DBT *dbtp;
  313. DB_LSN *lsnp;
  314. db_recops notused2;
  315. void *notused3;
  316. {
  317. __bam_pg_free_args *argp;
  318. u_int32_t i;
  319. u_int ch;
  320. int ret;
  321. i = 0;
  322. ch = 0;
  323. notused2 = DB_TXN_ABORT;
  324. notused3 = NULL;
  325. if ((ret = __bam_pg_free_read(dbenv, dbtp->data, &argp)) != 0)
  326. return (ret);
  327. printf("[%lu][%lu]bam_pg_free: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  328.     (u_long)lsnp->file,
  329.     (u_long)lsnp->offset,
  330.     (u_long)argp->type,
  331.     (u_long)argp->txnid->txnid,
  332.     (u_long)argp->prev_lsn.file,
  333.     (u_long)argp->prev_lsn.offset);
  334. printf("tfileid: %ldn", (long)argp->fileid);
  335. printf("tpgno: %lun", (u_long)argp->pgno);
  336. printf("tmeta_lsn: [%lu][%lu]n",
  337.     (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
  338. printf("theader: ");
  339. for (i = 0; i < argp->header.size; i++) {
  340. ch = ((u_int8_t *)argp->header.data)[i];
  341. if (isprint(ch) || ch == 0xa)
  342. putchar(ch);
  343. else
  344. printf("%#x ", ch);
  345. }
  346. printf("n");
  347. printf("tnext: %lun", (u_long)argp->next);
  348. printf("n");
  349. __os_free(argp, 0);
  350. return (0);
  351. }
  352. int
  353. __bam_pg_free_read(dbenv, recbuf, argpp)
  354. DB_ENV *dbenv;
  355. void *recbuf;
  356. __bam_pg_free_args **argpp;
  357. {
  358. __bam_pg_free_args *argp;
  359. u_int8_t *bp;
  360. int ret;
  361. ret = __os_malloc(dbenv, sizeof(__bam_pg_free_args) +
  362.     sizeof(DB_TXN), NULL, &argp);
  363. if (ret != 0)
  364. return (ret);
  365. argp->txnid = (DB_TXN *)&argp[1];
  366. bp = recbuf;
  367. memcpy(&argp->type, bp, sizeof(argp->type));
  368. bp += sizeof(argp->type);
  369. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  370. bp += sizeof(argp->txnid->txnid);
  371. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  372. bp += sizeof(DB_LSN);
  373. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  374. bp += sizeof(argp->fileid);
  375. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  376. bp += sizeof(argp->pgno);
  377. memcpy(&argp->meta_lsn, bp,  sizeof(argp->meta_lsn));
  378. bp += sizeof(argp->meta_lsn);
  379. memset(&argp->header, 0, sizeof(argp->header));
  380. memcpy(&argp->header.size, bp, sizeof(u_int32_t));
  381. bp += sizeof(u_int32_t);
  382. argp->header.data = bp;
  383. bp += argp->header.size;
  384. memcpy(&argp->next, bp, sizeof(argp->next));
  385. bp += sizeof(argp->next);
  386. *argpp = argp;
  387. return (0);
  388. }
  389. int
  390. __bam_pg_free1_print(dbenv, dbtp, lsnp, notused2, notused3)
  391. DB_ENV *dbenv;
  392. DBT *dbtp;
  393. DB_LSN *lsnp;
  394. db_recops notused2;
  395. void *notused3;
  396. {
  397. __bam_pg_free1_args *argp;
  398. u_int32_t i;
  399. u_int ch;
  400. int ret;
  401. i = 0;
  402. ch = 0;
  403. notused2 = DB_TXN_ABORT;
  404. notused3 = NULL;
  405. if ((ret = __bam_pg_free1_read(dbenv, dbtp->data, &argp)) != 0)
  406. return (ret);
  407. printf("[%lu][%lu]bam_pg_free1: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  408.     (u_long)lsnp->file,
  409.     (u_long)lsnp->offset,
  410.     (u_long)argp->type,
  411.     (u_long)argp->txnid->txnid,
  412.     (u_long)argp->prev_lsn.file,
  413.     (u_long)argp->prev_lsn.offset);
  414. printf("tfileid: %ldn", (long)argp->fileid);
  415. printf("tpgno: %lun", (u_long)argp->pgno);
  416. printf("tmeta_lsn: [%lu][%lu]n",
  417.     (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
  418. printf("talloc_lsn: [%lu][%lu]n",
  419.     (u_long)argp->alloc_lsn.file, (u_long)argp->alloc_lsn.offset);
  420. printf("theader: ");
  421. for (i = 0; i < argp->header.size; i++) {
  422. ch = ((u_int8_t *)argp->header.data)[i];
  423. if (isprint(ch) || ch == 0xa)
  424. putchar(ch);
  425. else
  426. printf("%#x ", ch);
  427. }
  428. printf("n");
  429. printf("tnext: %lun", (u_long)argp->next);
  430. printf("n");
  431. __os_free(argp, 0);
  432. return (0);
  433. }
  434. int
  435. __bam_pg_free1_read(dbenv, recbuf, argpp)
  436. DB_ENV *dbenv;
  437. void *recbuf;
  438. __bam_pg_free1_args **argpp;
  439. {
  440. __bam_pg_free1_args *argp;
  441. u_int8_t *bp;
  442. int ret;
  443. ret = __os_malloc(dbenv, sizeof(__bam_pg_free1_args) +
  444.     sizeof(DB_TXN), NULL, &argp);
  445. if (ret != 0)
  446. return (ret);
  447. argp->txnid = (DB_TXN *)&argp[1];
  448. bp = recbuf;
  449. memcpy(&argp->type, bp, sizeof(argp->type));
  450. bp += sizeof(argp->type);
  451. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  452. bp += sizeof(argp->txnid->txnid);
  453. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  454. bp += sizeof(DB_LSN);
  455. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  456. bp += sizeof(argp->fileid);
  457. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  458. bp += sizeof(argp->pgno);
  459. memcpy(&argp->meta_lsn, bp,  sizeof(argp->meta_lsn));
  460. bp += sizeof(argp->meta_lsn);
  461. memcpy(&argp->alloc_lsn, bp,  sizeof(argp->alloc_lsn));
  462. bp += sizeof(argp->alloc_lsn);
  463. memset(&argp->header, 0, sizeof(argp->header));
  464. memcpy(&argp->header.size, bp, sizeof(u_int32_t));
  465. bp += sizeof(u_int32_t);
  466. argp->header.data = bp;
  467. bp += argp->header.size;
  468. memcpy(&argp->next, bp, sizeof(argp->next));
  469. bp += sizeof(argp->next);
  470. *argpp = argp;
  471. return (0);
  472. }
  473. int
  474. __bam_split1_print(dbenv, dbtp, lsnp, notused2, notused3)
  475. DB_ENV *dbenv;
  476. DBT *dbtp;
  477. DB_LSN *lsnp;
  478. db_recops notused2;
  479. void *notused3;
  480. {
  481. __bam_split1_args *argp;
  482. u_int32_t i;
  483. u_int ch;
  484. int ret;
  485. i = 0;
  486. ch = 0;
  487. notused2 = DB_TXN_ABORT;
  488. notused3 = NULL;
  489. if ((ret = __bam_split1_read(dbenv, dbtp->data, &argp)) != 0)
  490. return (ret);
  491. printf("[%lu][%lu]bam_split1: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  492.     (u_long)lsnp->file,
  493.     (u_long)lsnp->offset,
  494.     (u_long)argp->type,
  495.     (u_long)argp->txnid->txnid,
  496.     (u_long)argp->prev_lsn.file,
  497.     (u_long)argp->prev_lsn.offset);
  498. printf("tfileid: %ldn", (long)argp->fileid);
  499. printf("tleft: %lun", (u_long)argp->left);
  500. printf("tllsn: [%lu][%lu]n",
  501.     (u_long)argp->llsn.file, (u_long)argp->llsn.offset);
  502. printf("tright: %lun", (u_long)argp->right);
  503. printf("trlsn: [%lu][%lu]n",
  504.     (u_long)argp->rlsn.file, (u_long)argp->rlsn.offset);
  505. printf("tindx: %lun", (u_long)argp->indx);
  506. printf("tnpgno: %lun", (u_long)argp->npgno);
  507. printf("tnlsn: [%lu][%lu]n",
  508.     (u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
  509. printf("tpg: ");
  510. for (i = 0; i < argp->pg.size; i++) {
  511. ch = ((u_int8_t *)argp->pg.data)[i];
  512. if (isprint(ch) || ch == 0xa)
  513. putchar(ch);
  514. else
  515. printf("%#x ", ch);
  516. }
  517. printf("n");
  518. printf("n");
  519. __os_free(argp, 0);
  520. return (0);
  521. }
  522. int
  523. __bam_split1_read(dbenv, recbuf, argpp)
  524. DB_ENV *dbenv;
  525. void *recbuf;
  526. __bam_split1_args **argpp;
  527. {
  528. __bam_split1_args *argp;
  529. u_int8_t *bp;
  530. int ret;
  531. ret = __os_malloc(dbenv, sizeof(__bam_split1_args) +
  532.     sizeof(DB_TXN), NULL, &argp);
  533. if (ret != 0)
  534. return (ret);
  535. argp->txnid = (DB_TXN *)&argp[1];
  536. bp = recbuf;
  537. memcpy(&argp->type, bp, sizeof(argp->type));
  538. bp += sizeof(argp->type);
  539. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  540. bp += sizeof(argp->txnid->txnid);
  541. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  542. bp += sizeof(DB_LSN);
  543. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  544. bp += sizeof(argp->fileid);
  545. memcpy(&argp->left, bp, sizeof(argp->left));
  546. bp += sizeof(argp->left);
  547. memcpy(&argp->llsn, bp,  sizeof(argp->llsn));
  548. bp += sizeof(argp->llsn);
  549. memcpy(&argp->right, bp, sizeof(argp->right));
  550. bp += sizeof(argp->right);
  551. memcpy(&argp->rlsn, bp,  sizeof(argp->rlsn));
  552. bp += sizeof(argp->rlsn);
  553. memcpy(&argp->indx, bp, sizeof(argp->indx));
  554. bp += sizeof(argp->indx);
  555. memcpy(&argp->npgno, bp, sizeof(argp->npgno));
  556. bp += sizeof(argp->npgno);
  557. memcpy(&argp->nlsn, bp,  sizeof(argp->nlsn));
  558. bp += sizeof(argp->nlsn);
  559. memset(&argp->pg, 0, sizeof(argp->pg));
  560. memcpy(&argp->pg.size, bp, sizeof(u_int32_t));
  561. bp += sizeof(u_int32_t);
  562. argp->pg.data = bp;
  563. bp += argp->pg.size;
  564. *argpp = argp;
  565. return (0);
  566. }
  567. int
  568. __bam_split_log(dbenv, txnid, ret_lsnp, flags,
  569. fileid, left, llsn, right, rlsn, indx,
  570. npgno, nlsn, root_pgno, pg, opflags)
  571. DB_ENV *dbenv;
  572. DB_TXN *txnid;
  573. DB_LSN *ret_lsnp;
  574. u_int32_t flags;
  575. int32_t fileid;
  576. db_pgno_t left;
  577. DB_LSN * llsn;
  578. db_pgno_t right;
  579. DB_LSN * rlsn;
  580. u_int32_t indx;
  581. db_pgno_t npgno;
  582. DB_LSN * nlsn;
  583. db_pgno_t root_pgno;
  584. const DBT *pg;
  585. u_int32_t opflags;
  586. {
  587. DBT logrec;
  588. DB_LSN *lsnp, null_lsn;
  589. u_int32_t zero;
  590. u_int32_t rectype, txn_num;
  591. int ret;
  592. u_int8_t *bp;
  593. rectype = DB_bam_split;
  594. if (txnid != NULL &&
  595.     TAILQ_FIRST(&txnid->kids) != NULL &&
  596.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  597. return (ret);
  598. txn_num = txnid == NULL ? 0 : txnid->txnid;
  599. if (txnid == NULL) {
  600. ZERO_LSN(null_lsn);
  601. lsnp = &null_lsn;
  602. } else
  603. lsnp = &txnid->last_lsn;
  604. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  605.     + sizeof(fileid)
  606.     + sizeof(left)
  607.     + sizeof(*llsn)
  608.     + sizeof(right)
  609.     + sizeof(*rlsn)
  610.     + sizeof(indx)
  611.     + sizeof(npgno)
  612.     + sizeof(*nlsn)
  613.     + sizeof(root_pgno)
  614.     + sizeof(u_int32_t) + (pg == NULL ? 0 : pg->size)
  615.     + sizeof(opflags);
  616. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  617. return (ret);
  618. bp = logrec.data;
  619. memcpy(bp, &rectype, sizeof(rectype));
  620. bp += sizeof(rectype);
  621. memcpy(bp, &txn_num, sizeof(txn_num));
  622. bp += sizeof(txn_num);
  623. memcpy(bp, lsnp, sizeof(DB_LSN));
  624. bp += sizeof(DB_LSN);
  625. memcpy(bp, &fileid, sizeof(fileid));
  626. bp += sizeof(fileid);
  627. memcpy(bp, &left, sizeof(left));
  628. bp += sizeof(left);
  629. if (llsn != NULL)
  630. memcpy(bp, llsn, sizeof(*llsn));
  631. else
  632. memset(bp, 0, sizeof(*llsn));
  633. bp += sizeof(*llsn);
  634. memcpy(bp, &right, sizeof(right));
  635. bp += sizeof(right);
  636. if (rlsn != NULL)
  637. memcpy(bp, rlsn, sizeof(*rlsn));
  638. else
  639. memset(bp, 0, sizeof(*rlsn));
  640. bp += sizeof(*rlsn);
  641. memcpy(bp, &indx, sizeof(indx));
  642. bp += sizeof(indx);
  643. memcpy(bp, &npgno, sizeof(npgno));
  644. bp += sizeof(npgno);
  645. if (nlsn != NULL)
  646. memcpy(bp, nlsn, sizeof(*nlsn));
  647. else
  648. memset(bp, 0, sizeof(*nlsn));
  649. bp += sizeof(*nlsn);
  650. memcpy(bp, &root_pgno, sizeof(root_pgno));
  651. bp += sizeof(root_pgno);
  652. if (pg == NULL) {
  653. zero = 0;
  654. memcpy(bp, &zero, sizeof(u_int32_t));
  655. bp += sizeof(u_int32_t);
  656. } else {
  657. memcpy(bp, &pg->size, sizeof(pg->size));
  658. bp += sizeof(pg->size);
  659. memcpy(bp, pg->data, pg->size);
  660. bp += pg->size;
  661. }
  662. memcpy(bp, &opflags, sizeof(opflags));
  663. bp += sizeof(opflags);
  664. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  665. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  666. if (txnid != NULL)
  667. txnid->last_lsn = *ret_lsnp;
  668. __os_free(logrec.data, logrec.size);
  669. return (ret);
  670. }
  671. int
  672. __bam_split_print(dbenv, dbtp, lsnp, notused2, notused3)
  673. DB_ENV *dbenv;
  674. DBT *dbtp;
  675. DB_LSN *lsnp;
  676. db_recops notused2;
  677. void *notused3;
  678. {
  679. __bam_split_args *argp;
  680. u_int32_t i;
  681. u_int ch;
  682. int ret;
  683. i = 0;
  684. ch = 0;
  685. notused2 = DB_TXN_ABORT;
  686. notused3 = NULL;
  687. if ((ret = __bam_split_read(dbenv, dbtp->data, &argp)) != 0)
  688. return (ret);
  689. printf("[%lu][%lu]bam_split: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  690.     (u_long)lsnp->file,
  691.     (u_long)lsnp->offset,
  692.     (u_long)argp->type,
  693.     (u_long)argp->txnid->txnid,
  694.     (u_long)argp->prev_lsn.file,
  695.     (u_long)argp->prev_lsn.offset);
  696. printf("tfileid: %ldn", (long)argp->fileid);
  697. printf("tleft: %lun", (u_long)argp->left);
  698. printf("tllsn: [%lu][%lu]n",
  699.     (u_long)argp->llsn.file, (u_long)argp->llsn.offset);
  700. printf("tright: %lun", (u_long)argp->right);
  701. printf("trlsn: [%lu][%lu]n",
  702.     (u_long)argp->rlsn.file, (u_long)argp->rlsn.offset);
  703. printf("tindx: %lun", (u_long)argp->indx);
  704. printf("tnpgno: %lun", (u_long)argp->npgno);
  705. printf("tnlsn: [%lu][%lu]n",
  706.     (u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
  707. printf("troot_pgno: %lun", (u_long)argp->root_pgno);
  708. printf("tpg: ");
  709. for (i = 0; i < argp->pg.size; i++) {
  710. ch = ((u_int8_t *)argp->pg.data)[i];
  711. if (isprint(ch) || ch == 0xa)
  712. putchar(ch);
  713. else
  714. printf("%#x ", ch);
  715. }
  716. printf("n");
  717. printf("topflags: %lun", (u_long)argp->opflags);
  718. printf("n");
  719. __os_free(argp, 0);
  720. return (0);
  721. }
  722. int
  723. __bam_split_read(dbenv, recbuf, argpp)
  724. DB_ENV *dbenv;
  725. void *recbuf;
  726. __bam_split_args **argpp;
  727. {
  728. __bam_split_args *argp;
  729. u_int8_t *bp;
  730. int ret;
  731. ret = __os_malloc(dbenv, sizeof(__bam_split_args) +
  732.     sizeof(DB_TXN), NULL, &argp);
  733. if (ret != 0)
  734. return (ret);
  735. argp->txnid = (DB_TXN *)&argp[1];
  736. bp = recbuf;
  737. memcpy(&argp->type, bp, sizeof(argp->type));
  738. bp += sizeof(argp->type);
  739. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  740. bp += sizeof(argp->txnid->txnid);
  741. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  742. bp += sizeof(DB_LSN);
  743. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  744. bp += sizeof(argp->fileid);
  745. memcpy(&argp->left, bp, sizeof(argp->left));
  746. bp += sizeof(argp->left);
  747. memcpy(&argp->llsn, bp,  sizeof(argp->llsn));
  748. bp += sizeof(argp->llsn);
  749. memcpy(&argp->right, bp, sizeof(argp->right));
  750. bp += sizeof(argp->right);
  751. memcpy(&argp->rlsn, bp,  sizeof(argp->rlsn));
  752. bp += sizeof(argp->rlsn);
  753. memcpy(&argp->indx, bp, sizeof(argp->indx));
  754. bp += sizeof(argp->indx);
  755. memcpy(&argp->npgno, bp, sizeof(argp->npgno));
  756. bp += sizeof(argp->npgno);
  757. memcpy(&argp->nlsn, bp,  sizeof(argp->nlsn));
  758. bp += sizeof(argp->nlsn);
  759. memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
  760. bp += sizeof(argp->root_pgno);
  761. memset(&argp->pg, 0, sizeof(argp->pg));
  762. memcpy(&argp->pg.size, bp, sizeof(u_int32_t));
  763. bp += sizeof(u_int32_t);
  764. argp->pg.data = bp;
  765. bp += argp->pg.size;
  766. memcpy(&argp->opflags, bp, sizeof(argp->opflags));
  767. bp += sizeof(argp->opflags);
  768. *argpp = argp;
  769. return (0);
  770. }
  771. int
  772. __bam_rsplit1_print(dbenv, dbtp, lsnp, notused2, notused3)
  773. DB_ENV *dbenv;
  774. DBT *dbtp;
  775. DB_LSN *lsnp;
  776. db_recops notused2;
  777. void *notused3;
  778. {
  779. __bam_rsplit1_args *argp;
  780. u_int32_t i;
  781. u_int ch;
  782. int ret;
  783. i = 0;
  784. ch = 0;
  785. notused2 = DB_TXN_ABORT;
  786. notused3 = NULL;
  787. if ((ret = __bam_rsplit1_read(dbenv, dbtp->data, &argp)) != 0)
  788. return (ret);
  789. printf("[%lu][%lu]bam_rsplit1: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  790.     (u_long)lsnp->file,
  791.     (u_long)lsnp->offset,
  792.     (u_long)argp->type,
  793.     (u_long)argp->txnid->txnid,
  794.     (u_long)argp->prev_lsn.file,
  795.     (u_long)argp->prev_lsn.offset);
  796. printf("tfileid: %ldn", (long)argp->fileid);
  797. printf("tpgno: %lun", (u_long)argp->pgno);
  798. printf("tpgdbt: ");
  799. for (i = 0; i < argp->pgdbt.size; i++) {
  800. ch = ((u_int8_t *)argp->pgdbt.data)[i];
  801. if (isprint(ch) || ch == 0xa)
  802. putchar(ch);
  803. else
  804. printf("%#x ", ch);
  805. }
  806. printf("n");
  807. printf("tnrec: %lun", (u_long)argp->nrec);
  808. printf("trootent: ");
  809. for (i = 0; i < argp->rootent.size; i++) {
  810. ch = ((u_int8_t *)argp->rootent.data)[i];
  811. if (isprint(ch) || ch == 0xa)
  812. putchar(ch);
  813. else
  814. printf("%#x ", ch);
  815. }
  816. printf("n");
  817. printf("trootlsn: [%lu][%lu]n",
  818.     (u_long)argp->rootlsn.file, (u_long)argp->rootlsn.offset);
  819. printf("n");
  820. __os_free(argp, 0);
  821. return (0);
  822. }
  823. int
  824. __bam_rsplit1_read(dbenv, recbuf, argpp)
  825. DB_ENV *dbenv;
  826. void *recbuf;
  827. __bam_rsplit1_args **argpp;
  828. {
  829. __bam_rsplit1_args *argp;
  830. u_int8_t *bp;
  831. int ret;
  832. ret = __os_malloc(dbenv, sizeof(__bam_rsplit1_args) +
  833.     sizeof(DB_TXN), NULL, &argp);
  834. if (ret != 0)
  835. return (ret);
  836. argp->txnid = (DB_TXN *)&argp[1];
  837. bp = recbuf;
  838. memcpy(&argp->type, bp, sizeof(argp->type));
  839. bp += sizeof(argp->type);
  840. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  841. bp += sizeof(argp->txnid->txnid);
  842. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  843. bp += sizeof(DB_LSN);
  844. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  845. bp += sizeof(argp->fileid);
  846. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  847. bp += sizeof(argp->pgno);
  848. memset(&argp->pgdbt, 0, sizeof(argp->pgdbt));
  849. memcpy(&argp->pgdbt.size, bp, sizeof(u_int32_t));
  850. bp += sizeof(u_int32_t);
  851. argp->pgdbt.data = bp;
  852. bp += argp->pgdbt.size;
  853. memcpy(&argp->nrec, bp, sizeof(argp->nrec));
  854. bp += sizeof(argp->nrec);
  855. memset(&argp->rootent, 0, sizeof(argp->rootent));
  856. memcpy(&argp->rootent.size, bp, sizeof(u_int32_t));
  857. bp += sizeof(u_int32_t);
  858. argp->rootent.data = bp;
  859. bp += argp->rootent.size;
  860. memcpy(&argp->rootlsn, bp,  sizeof(argp->rootlsn));
  861. bp += sizeof(argp->rootlsn);
  862. *argpp = argp;
  863. return (0);
  864. }
  865. int
  866. __bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,
  867. fileid, pgno, pgdbt, root_pgno, nrec, rootent,
  868. rootlsn)
  869. DB_ENV *dbenv;
  870. DB_TXN *txnid;
  871. DB_LSN *ret_lsnp;
  872. u_int32_t flags;
  873. int32_t fileid;
  874. db_pgno_t pgno;
  875. const DBT *pgdbt;
  876. db_pgno_t root_pgno;
  877. db_pgno_t nrec;
  878. const DBT *rootent;
  879. DB_LSN * rootlsn;
  880. {
  881. DBT logrec;
  882. DB_LSN *lsnp, null_lsn;
  883. u_int32_t zero;
  884. u_int32_t rectype, txn_num;
  885. int ret;
  886. u_int8_t *bp;
  887. rectype = DB_bam_rsplit;
  888. if (txnid != NULL &&
  889.     TAILQ_FIRST(&txnid->kids) != NULL &&
  890.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  891. return (ret);
  892. txn_num = txnid == NULL ? 0 : txnid->txnid;
  893. if (txnid == NULL) {
  894. ZERO_LSN(null_lsn);
  895. lsnp = &null_lsn;
  896. } else
  897. lsnp = &txnid->last_lsn;
  898. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  899.     + sizeof(fileid)
  900.     + sizeof(pgno)
  901.     + sizeof(u_int32_t) + (pgdbt == NULL ? 0 : pgdbt->size)
  902.     + sizeof(root_pgno)
  903.     + sizeof(nrec)
  904.     + sizeof(u_int32_t) + (rootent == NULL ? 0 : rootent->size)
  905.     + sizeof(*rootlsn);
  906. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  907. return (ret);
  908. bp = logrec.data;
  909. memcpy(bp, &rectype, sizeof(rectype));
  910. bp += sizeof(rectype);
  911. memcpy(bp, &txn_num, sizeof(txn_num));
  912. bp += sizeof(txn_num);
  913. memcpy(bp, lsnp, sizeof(DB_LSN));
  914. bp += sizeof(DB_LSN);
  915. memcpy(bp, &fileid, sizeof(fileid));
  916. bp += sizeof(fileid);
  917. memcpy(bp, &pgno, sizeof(pgno));
  918. bp += sizeof(pgno);
  919. if (pgdbt == NULL) {
  920. zero = 0;
  921. memcpy(bp, &zero, sizeof(u_int32_t));
  922. bp += sizeof(u_int32_t);
  923. } else {
  924. memcpy(bp, &pgdbt->size, sizeof(pgdbt->size));
  925. bp += sizeof(pgdbt->size);
  926. memcpy(bp, pgdbt->data, pgdbt->size);
  927. bp += pgdbt->size;
  928. }
  929. memcpy(bp, &root_pgno, sizeof(root_pgno));
  930. bp += sizeof(root_pgno);
  931. memcpy(bp, &nrec, sizeof(nrec));
  932. bp += sizeof(nrec);
  933. if (rootent == NULL) {
  934. zero = 0;
  935. memcpy(bp, &zero, sizeof(u_int32_t));
  936. bp += sizeof(u_int32_t);
  937. } else {
  938. memcpy(bp, &rootent->size, sizeof(rootent->size));
  939. bp += sizeof(rootent->size);
  940. memcpy(bp, rootent->data, rootent->size);
  941. bp += rootent->size;
  942. }
  943. if (rootlsn != NULL)
  944. memcpy(bp, rootlsn, sizeof(*rootlsn));
  945. else
  946. memset(bp, 0, sizeof(*rootlsn));
  947. bp += sizeof(*rootlsn);
  948. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  949. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  950. if (txnid != NULL)
  951. txnid->last_lsn = *ret_lsnp;
  952. __os_free(logrec.data, logrec.size);
  953. return (ret);
  954. }
  955. int
  956. __bam_rsplit_print(dbenv, dbtp, lsnp, notused2, notused3)
  957. DB_ENV *dbenv;
  958. DBT *dbtp;
  959. DB_LSN *lsnp;
  960. db_recops notused2;
  961. void *notused3;
  962. {
  963. __bam_rsplit_args *argp;
  964. u_int32_t i;
  965. u_int ch;
  966. int ret;
  967. i = 0;
  968. ch = 0;
  969. notused2 = DB_TXN_ABORT;
  970. notused3 = NULL;
  971. if ((ret = __bam_rsplit_read(dbenv, dbtp->data, &argp)) != 0)
  972. return (ret);
  973. printf("[%lu][%lu]bam_rsplit: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  974.     (u_long)lsnp->file,
  975.     (u_long)lsnp->offset,
  976.     (u_long)argp->type,
  977.     (u_long)argp->txnid->txnid,
  978.     (u_long)argp->prev_lsn.file,
  979.     (u_long)argp->prev_lsn.offset);
  980. printf("tfileid: %ldn", (long)argp->fileid);
  981. printf("tpgno: %lun", (u_long)argp->pgno);
  982. printf("tpgdbt: ");
  983. for (i = 0; i < argp->pgdbt.size; i++) {
  984. ch = ((u_int8_t *)argp->pgdbt.data)[i];
  985. if (isprint(ch) || ch == 0xa)
  986. putchar(ch);
  987. else
  988. printf("%#x ", ch);
  989. }
  990. printf("n");
  991. printf("troot_pgno: %lun", (u_long)argp->root_pgno);
  992. printf("tnrec: %lun", (u_long)argp->nrec);
  993. printf("trootent: ");
  994. for (i = 0; i < argp->rootent.size; i++) {
  995. ch = ((u_int8_t *)argp->rootent.data)[i];
  996. if (isprint(ch) || ch == 0xa)
  997. putchar(ch);
  998. else
  999. printf("%#x ", ch);
  1000. }
  1001. printf("n");
  1002. printf("trootlsn: [%lu][%lu]n",
  1003.     (u_long)argp->rootlsn.file, (u_long)argp->rootlsn.offset);
  1004. printf("n");
  1005. __os_free(argp, 0);
  1006. return (0);
  1007. }
  1008. int
  1009. __bam_rsplit_read(dbenv, recbuf, argpp)
  1010. DB_ENV *dbenv;
  1011. void *recbuf;
  1012. __bam_rsplit_args **argpp;
  1013. {
  1014. __bam_rsplit_args *argp;
  1015. u_int8_t *bp;
  1016. int ret;
  1017. ret = __os_malloc(dbenv, sizeof(__bam_rsplit_args) +
  1018.     sizeof(DB_TXN), NULL, &argp);
  1019. if (ret != 0)
  1020. return (ret);
  1021. argp->txnid = (DB_TXN *)&argp[1];
  1022. bp = recbuf;
  1023. memcpy(&argp->type, bp, sizeof(argp->type));
  1024. bp += sizeof(argp->type);
  1025. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1026. bp += sizeof(argp->txnid->txnid);
  1027. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1028. bp += sizeof(DB_LSN);
  1029. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1030. bp += sizeof(argp->fileid);
  1031. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  1032. bp += sizeof(argp->pgno);
  1033. memset(&argp->pgdbt, 0, sizeof(argp->pgdbt));
  1034. memcpy(&argp->pgdbt.size, bp, sizeof(u_int32_t));
  1035. bp += sizeof(u_int32_t);
  1036. argp->pgdbt.data = bp;
  1037. bp += argp->pgdbt.size;
  1038. memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
  1039. bp += sizeof(argp->root_pgno);
  1040. memcpy(&argp->nrec, bp, sizeof(argp->nrec));
  1041. bp += sizeof(argp->nrec);
  1042. memset(&argp->rootent, 0, sizeof(argp->rootent));
  1043. memcpy(&argp->rootent.size, bp, sizeof(u_int32_t));
  1044. bp += sizeof(u_int32_t);
  1045. argp->rootent.data = bp;
  1046. bp += argp->rootent.size;
  1047. memcpy(&argp->rootlsn, bp,  sizeof(argp->rootlsn));
  1048. bp += sizeof(argp->rootlsn);
  1049. *argpp = argp;
  1050. return (0);
  1051. }
  1052. int
  1053. __bam_adj_log(dbenv, txnid, ret_lsnp, flags,
  1054. fileid, pgno, lsn, indx, indx_copy, is_insert)
  1055. DB_ENV *dbenv;
  1056. DB_TXN *txnid;
  1057. DB_LSN *ret_lsnp;
  1058. u_int32_t flags;
  1059. int32_t fileid;
  1060. db_pgno_t pgno;
  1061. DB_LSN * lsn;
  1062. u_int32_t indx;
  1063. u_int32_t indx_copy;
  1064. u_int32_t is_insert;
  1065. {
  1066. DBT logrec;
  1067. DB_LSN *lsnp, null_lsn;
  1068. u_int32_t rectype, txn_num;
  1069. int ret;
  1070. u_int8_t *bp;
  1071. rectype = DB_bam_adj;
  1072. if (txnid != NULL &&
  1073.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1074.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1075. return (ret);
  1076. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1077. if (txnid == NULL) {
  1078. ZERO_LSN(null_lsn);
  1079. lsnp = &null_lsn;
  1080. } else
  1081. lsnp = &txnid->last_lsn;
  1082. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1083.     + sizeof(fileid)
  1084.     + sizeof(pgno)
  1085.     + sizeof(*lsn)
  1086.     + sizeof(indx)
  1087.     + sizeof(indx_copy)
  1088.     + sizeof(is_insert);
  1089. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1090. return (ret);
  1091. bp = logrec.data;
  1092. memcpy(bp, &rectype, sizeof(rectype));
  1093. bp += sizeof(rectype);
  1094. memcpy(bp, &txn_num, sizeof(txn_num));
  1095. bp += sizeof(txn_num);
  1096. memcpy(bp, lsnp, sizeof(DB_LSN));
  1097. bp += sizeof(DB_LSN);
  1098. memcpy(bp, &fileid, sizeof(fileid));
  1099. bp += sizeof(fileid);
  1100. memcpy(bp, &pgno, sizeof(pgno));
  1101. bp += sizeof(pgno);
  1102. if (lsn != NULL)
  1103. memcpy(bp, lsn, sizeof(*lsn));
  1104. else
  1105. memset(bp, 0, sizeof(*lsn));
  1106. bp += sizeof(*lsn);
  1107. memcpy(bp, &indx, sizeof(indx));
  1108. bp += sizeof(indx);
  1109. memcpy(bp, &indx_copy, sizeof(indx_copy));
  1110. bp += sizeof(indx_copy);
  1111. memcpy(bp, &is_insert, sizeof(is_insert));
  1112. bp += sizeof(is_insert);
  1113. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1114. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1115. if (txnid != NULL)
  1116. txnid->last_lsn = *ret_lsnp;
  1117. __os_free(logrec.data, logrec.size);
  1118. return (ret);
  1119. }
  1120. int
  1121. __bam_adj_print(dbenv, dbtp, lsnp, notused2, notused3)
  1122. DB_ENV *dbenv;
  1123. DBT *dbtp;
  1124. DB_LSN *lsnp;
  1125. db_recops notused2;
  1126. void *notused3;
  1127. {
  1128. __bam_adj_args *argp;
  1129. u_int32_t i;
  1130. u_int ch;
  1131. int ret;
  1132. i = 0;
  1133. ch = 0;
  1134. notused2 = DB_TXN_ABORT;
  1135. notused3 = NULL;
  1136. if ((ret = __bam_adj_read(dbenv, dbtp->data, &argp)) != 0)
  1137. return (ret);
  1138. printf("[%lu][%lu]bam_adj: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1139.     (u_long)lsnp->file,
  1140.     (u_long)lsnp->offset,
  1141.     (u_long)argp->type,
  1142.     (u_long)argp->txnid->txnid,
  1143.     (u_long)argp->prev_lsn.file,
  1144.     (u_long)argp->prev_lsn.offset);
  1145. printf("tfileid: %ldn", (long)argp->fileid);
  1146. printf("tpgno: %lun", (u_long)argp->pgno);
  1147. printf("tlsn: [%lu][%lu]n",
  1148.     (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
  1149. printf("tindx: %lun", (u_long)argp->indx);
  1150. printf("tindx_copy: %lun", (u_long)argp->indx_copy);
  1151. printf("tis_insert: %lun", (u_long)argp->is_insert);
  1152. printf("n");
  1153. __os_free(argp, 0);
  1154. return (0);
  1155. }
  1156. int
  1157. __bam_adj_read(dbenv, recbuf, argpp)
  1158. DB_ENV *dbenv;
  1159. void *recbuf;
  1160. __bam_adj_args **argpp;
  1161. {
  1162. __bam_adj_args *argp;
  1163. u_int8_t *bp;
  1164. int ret;
  1165. ret = __os_malloc(dbenv, sizeof(__bam_adj_args) +
  1166.     sizeof(DB_TXN), NULL, &argp);
  1167. if (ret != 0)
  1168. return (ret);
  1169. argp->txnid = (DB_TXN *)&argp[1];
  1170. bp = recbuf;
  1171. memcpy(&argp->type, bp, sizeof(argp->type));
  1172. bp += sizeof(argp->type);
  1173. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1174. bp += sizeof(argp->txnid->txnid);
  1175. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1176. bp += sizeof(DB_LSN);
  1177. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1178. bp += sizeof(argp->fileid);
  1179. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  1180. bp += sizeof(argp->pgno);
  1181. memcpy(&argp->lsn, bp,  sizeof(argp->lsn));
  1182. bp += sizeof(argp->lsn);
  1183. memcpy(&argp->indx, bp, sizeof(argp->indx));
  1184. bp += sizeof(argp->indx);
  1185. memcpy(&argp->indx_copy, bp, sizeof(argp->indx_copy));
  1186. bp += sizeof(argp->indx_copy);
  1187. memcpy(&argp->is_insert, bp, sizeof(argp->is_insert));
  1188. bp += sizeof(argp->is_insert);
  1189. *argpp = argp;
  1190. return (0);
  1191. }
  1192. int
  1193. __bam_cadjust_log(dbenv, txnid, ret_lsnp, flags,
  1194. fileid, pgno, lsn, indx, adjust, opflags)
  1195. DB_ENV *dbenv;
  1196. DB_TXN *txnid;
  1197. DB_LSN *ret_lsnp;
  1198. u_int32_t flags;
  1199. int32_t fileid;
  1200. db_pgno_t pgno;
  1201. DB_LSN * lsn;
  1202. u_int32_t indx;
  1203. int32_t adjust;
  1204. u_int32_t opflags;
  1205. {
  1206. DBT logrec;
  1207. DB_LSN *lsnp, null_lsn;
  1208. u_int32_t rectype, txn_num;
  1209. int ret;
  1210. u_int8_t *bp;
  1211. rectype = DB_bam_cadjust;
  1212. if (txnid != NULL &&
  1213.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1214.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1215. return (ret);
  1216. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1217. if (txnid == NULL) {
  1218. ZERO_LSN(null_lsn);
  1219. lsnp = &null_lsn;
  1220. } else
  1221. lsnp = &txnid->last_lsn;
  1222. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1223.     + sizeof(fileid)
  1224.     + sizeof(pgno)
  1225.     + sizeof(*lsn)
  1226.     + sizeof(indx)
  1227.     + sizeof(adjust)
  1228.     + sizeof(opflags);
  1229. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1230. return (ret);
  1231. bp = logrec.data;
  1232. memcpy(bp, &rectype, sizeof(rectype));
  1233. bp += sizeof(rectype);
  1234. memcpy(bp, &txn_num, sizeof(txn_num));
  1235. bp += sizeof(txn_num);
  1236. memcpy(bp, lsnp, sizeof(DB_LSN));
  1237. bp += sizeof(DB_LSN);
  1238. memcpy(bp, &fileid, sizeof(fileid));
  1239. bp += sizeof(fileid);
  1240. memcpy(bp, &pgno, sizeof(pgno));
  1241. bp += sizeof(pgno);
  1242. if (lsn != NULL)
  1243. memcpy(bp, lsn, sizeof(*lsn));
  1244. else
  1245. memset(bp, 0, sizeof(*lsn));
  1246. bp += sizeof(*lsn);
  1247. memcpy(bp, &indx, sizeof(indx));
  1248. bp += sizeof(indx);
  1249. memcpy(bp, &adjust, sizeof(adjust));
  1250. bp += sizeof(adjust);
  1251. memcpy(bp, &opflags, sizeof(opflags));
  1252. bp += sizeof(opflags);
  1253. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1254. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1255. if (txnid != NULL)
  1256. txnid->last_lsn = *ret_lsnp;
  1257. __os_free(logrec.data, logrec.size);
  1258. return (ret);
  1259. }
  1260. int
  1261. __bam_cadjust_print(dbenv, dbtp, lsnp, notused2, notused3)
  1262. DB_ENV *dbenv;
  1263. DBT *dbtp;
  1264. DB_LSN *lsnp;
  1265. db_recops notused2;
  1266. void *notused3;
  1267. {
  1268. __bam_cadjust_args *argp;
  1269. u_int32_t i;
  1270. u_int ch;
  1271. int ret;
  1272. i = 0;
  1273. ch = 0;
  1274. notused2 = DB_TXN_ABORT;
  1275. notused3 = NULL;
  1276. if ((ret = __bam_cadjust_read(dbenv, dbtp->data, &argp)) != 0)
  1277. return (ret);
  1278. printf("[%lu][%lu]bam_cadjust: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1279.     (u_long)lsnp->file,
  1280.     (u_long)lsnp->offset,
  1281.     (u_long)argp->type,
  1282.     (u_long)argp->txnid->txnid,
  1283.     (u_long)argp->prev_lsn.file,
  1284.     (u_long)argp->prev_lsn.offset);
  1285. printf("tfileid: %ldn", (long)argp->fileid);
  1286. printf("tpgno: %lun", (u_long)argp->pgno);
  1287. printf("tlsn: [%lu][%lu]n",
  1288.     (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
  1289. printf("tindx: %lun", (u_long)argp->indx);
  1290. printf("tadjust: %ldn", (long)argp->adjust);
  1291. printf("topflags: %lun", (u_long)argp->opflags);
  1292. printf("n");
  1293. __os_free(argp, 0);
  1294. return (0);
  1295. }
  1296. int
  1297. __bam_cadjust_read(dbenv, recbuf, argpp)
  1298. DB_ENV *dbenv;
  1299. void *recbuf;
  1300. __bam_cadjust_args **argpp;
  1301. {
  1302. __bam_cadjust_args *argp;
  1303. u_int8_t *bp;
  1304. int ret;
  1305. ret = __os_malloc(dbenv, sizeof(__bam_cadjust_args) +
  1306.     sizeof(DB_TXN), NULL, &argp);
  1307. if (ret != 0)
  1308. return (ret);
  1309. argp->txnid = (DB_TXN *)&argp[1];
  1310. bp = recbuf;
  1311. memcpy(&argp->type, bp, sizeof(argp->type));
  1312. bp += sizeof(argp->type);
  1313. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1314. bp += sizeof(argp->txnid->txnid);
  1315. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1316. bp += sizeof(DB_LSN);
  1317. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1318. bp += sizeof(argp->fileid);
  1319. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  1320. bp += sizeof(argp->pgno);
  1321. memcpy(&argp->lsn, bp,  sizeof(argp->lsn));
  1322. bp += sizeof(argp->lsn);
  1323. memcpy(&argp->indx, bp, sizeof(argp->indx));
  1324. bp += sizeof(argp->indx);
  1325. memcpy(&argp->adjust, bp, sizeof(argp->adjust));
  1326. bp += sizeof(argp->adjust);
  1327. memcpy(&argp->opflags, bp, sizeof(argp->opflags));
  1328. bp += sizeof(argp->opflags);
  1329. *argpp = argp;
  1330. return (0);
  1331. }
  1332. int
  1333. __bam_cdel_log(dbenv, txnid, ret_lsnp, flags,
  1334. fileid, pgno, lsn, indx)
  1335. DB_ENV *dbenv;
  1336. DB_TXN *txnid;
  1337. DB_LSN *ret_lsnp;
  1338. u_int32_t flags;
  1339. int32_t fileid;
  1340. db_pgno_t pgno;
  1341. DB_LSN * lsn;
  1342. u_int32_t indx;
  1343. {
  1344. DBT logrec;
  1345. DB_LSN *lsnp, null_lsn;
  1346. u_int32_t rectype, txn_num;
  1347. int ret;
  1348. u_int8_t *bp;
  1349. rectype = DB_bam_cdel;
  1350. if (txnid != NULL &&
  1351.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1352.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1353. return (ret);
  1354. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1355. if (txnid == NULL) {
  1356. ZERO_LSN(null_lsn);
  1357. lsnp = &null_lsn;
  1358. } else
  1359. lsnp = &txnid->last_lsn;
  1360. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1361.     + sizeof(fileid)
  1362.     + sizeof(pgno)
  1363.     + sizeof(*lsn)
  1364.     + sizeof(indx);
  1365. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1366. return (ret);
  1367. bp = logrec.data;
  1368. memcpy(bp, &rectype, sizeof(rectype));
  1369. bp += sizeof(rectype);
  1370. memcpy(bp, &txn_num, sizeof(txn_num));
  1371. bp += sizeof(txn_num);
  1372. memcpy(bp, lsnp, sizeof(DB_LSN));
  1373. bp += sizeof(DB_LSN);
  1374. memcpy(bp, &fileid, sizeof(fileid));
  1375. bp += sizeof(fileid);
  1376. memcpy(bp, &pgno, sizeof(pgno));
  1377. bp += sizeof(pgno);
  1378. if (lsn != NULL)
  1379. memcpy(bp, lsn, sizeof(*lsn));
  1380. else
  1381. memset(bp, 0, sizeof(*lsn));
  1382. bp += sizeof(*lsn);
  1383. memcpy(bp, &indx, sizeof(indx));
  1384. bp += sizeof(indx);
  1385. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1386. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1387. if (txnid != NULL)
  1388. txnid->last_lsn = *ret_lsnp;
  1389. __os_free(logrec.data, logrec.size);
  1390. return (ret);
  1391. }
  1392. int
  1393. __bam_cdel_print(dbenv, dbtp, lsnp, notused2, notused3)
  1394. DB_ENV *dbenv;
  1395. DBT *dbtp;
  1396. DB_LSN *lsnp;
  1397. db_recops notused2;
  1398. void *notused3;
  1399. {
  1400. __bam_cdel_args *argp;
  1401. u_int32_t i;
  1402. u_int ch;
  1403. int ret;
  1404. i = 0;
  1405. ch = 0;
  1406. notused2 = DB_TXN_ABORT;
  1407. notused3 = NULL;
  1408. if ((ret = __bam_cdel_read(dbenv, dbtp->data, &argp)) != 0)
  1409. return (ret);
  1410. printf("[%lu][%lu]bam_cdel: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1411.     (u_long)lsnp->file,
  1412.     (u_long)lsnp->offset,
  1413.     (u_long)argp->type,
  1414.     (u_long)argp->txnid->txnid,
  1415.     (u_long)argp->prev_lsn.file,
  1416.     (u_long)argp->prev_lsn.offset);
  1417. printf("tfileid: %ldn", (long)argp->fileid);
  1418. printf("tpgno: %lun", (u_long)argp->pgno);
  1419. printf("tlsn: [%lu][%lu]n",
  1420.     (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
  1421. printf("tindx: %lun", (u_long)argp->indx);
  1422. printf("n");
  1423. __os_free(argp, 0);
  1424. return (0);
  1425. }
  1426. int
  1427. __bam_cdel_read(dbenv, recbuf, argpp)
  1428. DB_ENV *dbenv;
  1429. void *recbuf;
  1430. __bam_cdel_args **argpp;
  1431. {
  1432. __bam_cdel_args *argp;
  1433. u_int8_t *bp;
  1434. int ret;
  1435. ret = __os_malloc(dbenv, sizeof(__bam_cdel_args) +
  1436.     sizeof(DB_TXN), NULL, &argp);
  1437. if (ret != 0)
  1438. return (ret);
  1439. argp->txnid = (DB_TXN *)&argp[1];
  1440. bp = recbuf;
  1441. memcpy(&argp->type, bp, sizeof(argp->type));
  1442. bp += sizeof(argp->type);
  1443. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1444. bp += sizeof(argp->txnid->txnid);
  1445. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1446. bp += sizeof(DB_LSN);
  1447. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1448. bp += sizeof(argp->fileid);
  1449. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  1450. bp += sizeof(argp->pgno);
  1451. memcpy(&argp->lsn, bp,  sizeof(argp->lsn));
  1452. bp += sizeof(argp->lsn);
  1453. memcpy(&argp->indx, bp, sizeof(argp->indx));
  1454. bp += sizeof(argp->indx);
  1455. *argpp = argp;
  1456. return (0);
  1457. }
  1458. int
  1459. __bam_repl_log(dbenv, txnid, ret_lsnp, flags,
  1460. fileid, pgno, lsn, indx, isdeleted, orig,
  1461. repl, prefix, suffix)
  1462. DB_ENV *dbenv;
  1463. DB_TXN *txnid;
  1464. DB_LSN *ret_lsnp;
  1465. u_int32_t flags;
  1466. int32_t fileid;
  1467. db_pgno_t pgno;
  1468. DB_LSN * lsn;
  1469. u_int32_t indx;
  1470. u_int32_t isdeleted;
  1471. const DBT *orig;
  1472. const DBT *repl;
  1473. u_int32_t prefix;
  1474. u_int32_t suffix;
  1475. {
  1476. DBT logrec;
  1477. DB_LSN *lsnp, null_lsn;
  1478. u_int32_t zero;
  1479. u_int32_t rectype, txn_num;
  1480. int ret;
  1481. u_int8_t *bp;
  1482. rectype = DB_bam_repl;
  1483. if (txnid != NULL &&
  1484.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1485.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1486. return (ret);
  1487. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1488. if (txnid == NULL) {
  1489. ZERO_LSN(null_lsn);
  1490. lsnp = &null_lsn;
  1491. } else
  1492. lsnp = &txnid->last_lsn;
  1493. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1494.     + sizeof(fileid)
  1495.     + sizeof(pgno)
  1496.     + sizeof(*lsn)
  1497.     + sizeof(indx)
  1498.     + sizeof(isdeleted)
  1499.     + sizeof(u_int32_t) + (orig == NULL ? 0 : orig->size)
  1500.     + sizeof(u_int32_t) + (repl == NULL ? 0 : repl->size)
  1501.     + sizeof(prefix)
  1502.     + sizeof(suffix);
  1503. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1504. return (ret);
  1505. bp = logrec.data;
  1506. memcpy(bp, &rectype, sizeof(rectype));
  1507. bp += sizeof(rectype);
  1508. memcpy(bp, &txn_num, sizeof(txn_num));
  1509. bp += sizeof(txn_num);
  1510. memcpy(bp, lsnp, sizeof(DB_LSN));
  1511. bp += sizeof(DB_LSN);
  1512. memcpy(bp, &fileid, sizeof(fileid));
  1513. bp += sizeof(fileid);
  1514. memcpy(bp, &pgno, sizeof(pgno));
  1515. bp += sizeof(pgno);
  1516. if (lsn != NULL)
  1517. memcpy(bp, lsn, sizeof(*lsn));
  1518. else
  1519. memset(bp, 0, sizeof(*lsn));
  1520. bp += sizeof(*lsn);
  1521. memcpy(bp, &indx, sizeof(indx));
  1522. bp += sizeof(indx);
  1523. memcpy(bp, &isdeleted, sizeof(isdeleted));
  1524. bp += sizeof(isdeleted);
  1525. if (orig == NULL) {
  1526. zero = 0;
  1527. memcpy(bp, &zero, sizeof(u_int32_t));
  1528. bp += sizeof(u_int32_t);
  1529. } else {
  1530. memcpy(bp, &orig->size, sizeof(orig->size));
  1531. bp += sizeof(orig->size);
  1532. memcpy(bp, orig->data, orig->size);
  1533. bp += orig->size;
  1534. }
  1535. if (repl == NULL) {
  1536. zero = 0;
  1537. memcpy(bp, &zero, sizeof(u_int32_t));
  1538. bp += sizeof(u_int32_t);
  1539. } else {
  1540. memcpy(bp, &repl->size, sizeof(repl->size));
  1541. bp += sizeof(repl->size);
  1542. memcpy(bp, repl->data, repl->size);
  1543. bp += repl->size;
  1544. }
  1545. memcpy(bp, &prefix, sizeof(prefix));
  1546. bp += sizeof(prefix);
  1547. memcpy(bp, &suffix, sizeof(suffix));
  1548. bp += sizeof(suffix);
  1549. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1550. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1551. if (txnid != NULL)
  1552. txnid->last_lsn = *ret_lsnp;
  1553. __os_free(logrec.data, logrec.size);
  1554. return (ret);
  1555. }
  1556. int
  1557. __bam_repl_print(dbenv, dbtp, lsnp, notused2, notused3)
  1558. DB_ENV *dbenv;
  1559. DBT *dbtp;
  1560. DB_LSN *lsnp;
  1561. db_recops notused2;
  1562. void *notused3;
  1563. {
  1564. __bam_repl_args *argp;
  1565. u_int32_t i;
  1566. u_int ch;
  1567. int ret;
  1568. i = 0;
  1569. ch = 0;
  1570. notused2 = DB_TXN_ABORT;
  1571. notused3 = NULL;
  1572. if ((ret = __bam_repl_read(dbenv, dbtp->data, &argp)) != 0)
  1573. return (ret);
  1574. printf("[%lu][%lu]bam_repl: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1575.     (u_long)lsnp->file,
  1576.     (u_long)lsnp->offset,
  1577.     (u_long)argp->type,
  1578.     (u_long)argp->txnid->txnid,
  1579.     (u_long)argp->prev_lsn.file,
  1580.     (u_long)argp->prev_lsn.offset);
  1581. printf("tfileid: %ldn", (long)argp->fileid);
  1582. printf("tpgno: %lun", (u_long)argp->pgno);
  1583. printf("tlsn: [%lu][%lu]n",
  1584.     (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
  1585. printf("tindx: %lun", (u_long)argp->indx);
  1586. printf("tisdeleted: %lun", (u_long)argp->isdeleted);
  1587. printf("torig: ");
  1588. for (i = 0; i < argp->orig.size; i++) {
  1589. ch = ((u_int8_t *)argp->orig.data)[i];
  1590. if (isprint(ch) || ch == 0xa)
  1591. putchar(ch);
  1592. else
  1593. printf("%#x ", ch);
  1594. }
  1595. printf("n");
  1596. printf("trepl: ");
  1597. for (i = 0; i < argp->repl.size; i++) {
  1598. ch = ((u_int8_t *)argp->repl.data)[i];
  1599. if (isprint(ch) || ch == 0xa)
  1600. putchar(ch);
  1601. else
  1602. printf("%#x ", ch);
  1603. }
  1604. printf("n");
  1605. printf("tprefix: %lun", (u_long)argp->prefix);
  1606. printf("tsuffix: %lun", (u_long)argp->suffix);
  1607. printf("n");
  1608. __os_free(argp, 0);
  1609. return (0);
  1610. }
  1611. int
  1612. __bam_repl_read(dbenv, recbuf, argpp)
  1613. DB_ENV *dbenv;
  1614. void *recbuf;
  1615. __bam_repl_args **argpp;
  1616. {
  1617. __bam_repl_args *argp;
  1618. u_int8_t *bp;
  1619. int ret;
  1620. ret = __os_malloc(dbenv, sizeof(__bam_repl_args) +
  1621.     sizeof(DB_TXN), NULL, &argp);
  1622. if (ret != 0)
  1623. return (ret);
  1624. argp->txnid = (DB_TXN *)&argp[1];
  1625. bp = recbuf;
  1626. memcpy(&argp->type, bp, sizeof(argp->type));
  1627. bp += sizeof(argp->type);
  1628. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1629. bp += sizeof(argp->txnid->txnid);
  1630. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1631. bp += sizeof(DB_LSN);
  1632. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1633. bp += sizeof(argp->fileid);
  1634. memcpy(&argp->pgno, bp, sizeof(argp->pgno));
  1635. bp += sizeof(argp->pgno);
  1636. memcpy(&argp->lsn, bp,  sizeof(argp->lsn));
  1637. bp += sizeof(argp->lsn);
  1638. memcpy(&argp->indx, bp, sizeof(argp->indx));
  1639. bp += sizeof(argp->indx);
  1640. memcpy(&argp->isdeleted, bp, sizeof(argp->isdeleted));
  1641. bp += sizeof(argp->isdeleted);
  1642. memset(&argp->orig, 0, sizeof(argp->orig));
  1643. memcpy(&argp->orig.size, bp, sizeof(u_int32_t));
  1644. bp += sizeof(u_int32_t);
  1645. argp->orig.data = bp;
  1646. bp += argp->orig.size;
  1647. memset(&argp->repl, 0, sizeof(argp->repl));
  1648. memcpy(&argp->repl.size, bp, sizeof(u_int32_t));
  1649. bp += sizeof(u_int32_t);
  1650. argp->repl.data = bp;
  1651. bp += argp->repl.size;
  1652. memcpy(&argp->prefix, bp, sizeof(argp->prefix));
  1653. bp += sizeof(argp->prefix);
  1654. memcpy(&argp->suffix, bp, sizeof(argp->suffix));
  1655. bp += sizeof(argp->suffix);
  1656. *argpp = argp;
  1657. return (0);
  1658. }
  1659. int
  1660. __bam_root_log(dbenv, txnid, ret_lsnp, flags,
  1661. fileid, meta_pgno, root_pgno, meta_lsn)
  1662. DB_ENV *dbenv;
  1663. DB_TXN *txnid;
  1664. DB_LSN *ret_lsnp;
  1665. u_int32_t flags;
  1666. int32_t fileid;
  1667. db_pgno_t meta_pgno;
  1668. db_pgno_t root_pgno;
  1669. DB_LSN * meta_lsn;
  1670. {
  1671. DBT logrec;
  1672. DB_LSN *lsnp, null_lsn;
  1673. u_int32_t rectype, txn_num;
  1674. int ret;
  1675. u_int8_t *bp;
  1676. rectype = DB_bam_root;
  1677. if (txnid != NULL &&
  1678.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1679.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1680. return (ret);
  1681. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1682. if (txnid == NULL) {
  1683. ZERO_LSN(null_lsn);
  1684. lsnp = &null_lsn;
  1685. } else
  1686. lsnp = &txnid->last_lsn;
  1687. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1688.     + sizeof(fileid)
  1689.     + sizeof(meta_pgno)
  1690.     + sizeof(root_pgno)
  1691.     + sizeof(*meta_lsn);
  1692. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1693. return (ret);
  1694. bp = logrec.data;
  1695. memcpy(bp, &rectype, sizeof(rectype));
  1696. bp += sizeof(rectype);
  1697. memcpy(bp, &txn_num, sizeof(txn_num));
  1698. bp += sizeof(txn_num);
  1699. memcpy(bp, lsnp, sizeof(DB_LSN));
  1700. bp += sizeof(DB_LSN);
  1701. memcpy(bp, &fileid, sizeof(fileid));
  1702. bp += sizeof(fileid);
  1703. memcpy(bp, &meta_pgno, sizeof(meta_pgno));
  1704. bp += sizeof(meta_pgno);
  1705. memcpy(bp, &root_pgno, sizeof(root_pgno));
  1706. bp += sizeof(root_pgno);
  1707. if (meta_lsn != NULL)
  1708. memcpy(bp, meta_lsn, sizeof(*meta_lsn));
  1709. else
  1710. memset(bp, 0, sizeof(*meta_lsn));
  1711. bp += sizeof(*meta_lsn);
  1712. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1713. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1714. if (txnid != NULL)
  1715. txnid->last_lsn = *ret_lsnp;
  1716. __os_free(logrec.data, logrec.size);
  1717. return (ret);
  1718. }
  1719. int
  1720. __bam_root_print(dbenv, dbtp, lsnp, notused2, notused3)
  1721. DB_ENV *dbenv;
  1722. DBT *dbtp;
  1723. DB_LSN *lsnp;
  1724. db_recops notused2;
  1725. void *notused3;
  1726. {
  1727. __bam_root_args *argp;
  1728. u_int32_t i;
  1729. u_int ch;
  1730. int ret;
  1731. i = 0;
  1732. ch = 0;
  1733. notused2 = DB_TXN_ABORT;
  1734. notused3 = NULL;
  1735. if ((ret = __bam_root_read(dbenv, dbtp->data, &argp)) != 0)
  1736. return (ret);
  1737. printf("[%lu][%lu]bam_root: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1738.     (u_long)lsnp->file,
  1739.     (u_long)lsnp->offset,
  1740.     (u_long)argp->type,
  1741.     (u_long)argp->txnid->txnid,
  1742.     (u_long)argp->prev_lsn.file,
  1743.     (u_long)argp->prev_lsn.offset);
  1744. printf("tfileid: %ldn", (long)argp->fileid);
  1745. printf("tmeta_pgno: %lun", (u_long)argp->meta_pgno);
  1746. printf("troot_pgno: %lun", (u_long)argp->root_pgno);
  1747. printf("tmeta_lsn: [%lu][%lu]n",
  1748.     (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
  1749. printf("n");
  1750. __os_free(argp, 0);
  1751. return (0);
  1752. }
  1753. int
  1754. __bam_root_read(dbenv, recbuf, argpp)
  1755. DB_ENV *dbenv;
  1756. void *recbuf;
  1757. __bam_root_args **argpp;
  1758. {
  1759. __bam_root_args *argp;
  1760. u_int8_t *bp;
  1761. int ret;
  1762. ret = __os_malloc(dbenv, sizeof(__bam_root_args) +
  1763.     sizeof(DB_TXN), NULL, &argp);
  1764. if (ret != 0)
  1765. return (ret);
  1766. argp->txnid = (DB_TXN *)&argp[1];
  1767. bp = recbuf;
  1768. memcpy(&argp->type, bp, sizeof(argp->type));
  1769. bp += sizeof(argp->type);
  1770. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1771. bp += sizeof(argp->txnid->txnid);
  1772. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1773. bp += sizeof(DB_LSN);
  1774. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1775. bp += sizeof(argp->fileid);
  1776. memcpy(&argp->meta_pgno, bp, sizeof(argp->meta_pgno));
  1777. bp += sizeof(argp->meta_pgno);
  1778. memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
  1779. bp += sizeof(argp->root_pgno);
  1780. memcpy(&argp->meta_lsn, bp,  sizeof(argp->meta_lsn));
  1781. bp += sizeof(argp->meta_lsn);
  1782. *argpp = argp;
  1783. return (0);
  1784. }
  1785. int
  1786. __bam_curadj_log(dbenv, txnid, ret_lsnp, flags,
  1787. fileid, mode, from_pgno, to_pgno, left_pgno, first_indx,
  1788. from_indx, to_indx)
  1789. DB_ENV *dbenv;
  1790. DB_TXN *txnid;
  1791. DB_LSN *ret_lsnp;
  1792. u_int32_t flags;
  1793. int32_t fileid;
  1794. db_ca_mode mode;
  1795. db_pgno_t from_pgno;
  1796. db_pgno_t to_pgno;
  1797. db_pgno_t left_pgno;
  1798. u_int32_t first_indx;
  1799. u_int32_t from_indx;
  1800. u_int32_t to_indx;
  1801. {
  1802. DBT logrec;
  1803. DB_LSN *lsnp, null_lsn;
  1804. u_int32_t rectype, txn_num;
  1805. int ret;
  1806. u_int8_t *bp;
  1807. rectype = DB_bam_curadj;
  1808. if (txnid != NULL &&
  1809.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1810.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1811. return (ret);
  1812. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1813. if (txnid == NULL) {
  1814. ZERO_LSN(null_lsn);
  1815. lsnp = &null_lsn;
  1816. } else
  1817. lsnp = &txnid->last_lsn;
  1818. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1819.     + sizeof(fileid)
  1820.     + sizeof(mode)
  1821.     + sizeof(from_pgno)
  1822.     + sizeof(to_pgno)
  1823.     + sizeof(left_pgno)
  1824.     + sizeof(first_indx)
  1825.     + sizeof(from_indx)
  1826.     + sizeof(to_indx);
  1827. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1828. return (ret);
  1829. bp = logrec.data;
  1830. memcpy(bp, &rectype, sizeof(rectype));
  1831. bp += sizeof(rectype);
  1832. memcpy(bp, &txn_num, sizeof(txn_num));
  1833. bp += sizeof(txn_num);
  1834. memcpy(bp, lsnp, sizeof(DB_LSN));
  1835. bp += sizeof(DB_LSN);
  1836. memcpy(bp, &fileid, sizeof(fileid));
  1837. bp += sizeof(fileid);
  1838. memcpy(bp, &mode, sizeof(mode));
  1839. bp += sizeof(mode);
  1840. memcpy(bp, &from_pgno, sizeof(from_pgno));
  1841. bp += sizeof(from_pgno);
  1842. memcpy(bp, &to_pgno, sizeof(to_pgno));
  1843. bp += sizeof(to_pgno);
  1844. memcpy(bp, &left_pgno, sizeof(left_pgno));
  1845. bp += sizeof(left_pgno);
  1846. memcpy(bp, &first_indx, sizeof(first_indx));
  1847. bp += sizeof(first_indx);
  1848. memcpy(bp, &from_indx, sizeof(from_indx));
  1849. bp += sizeof(from_indx);
  1850. memcpy(bp, &to_indx, sizeof(to_indx));
  1851. bp += sizeof(to_indx);
  1852. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1853. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1854. if (txnid != NULL)
  1855. txnid->last_lsn = *ret_lsnp;
  1856. __os_free(logrec.data, logrec.size);
  1857. return (ret);
  1858. }
  1859. int
  1860. __bam_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
  1861. DB_ENV *dbenv;
  1862. DBT *dbtp;
  1863. DB_LSN *lsnp;
  1864. db_recops notused2;
  1865. void *notused3;
  1866. {
  1867. __bam_curadj_args *argp;
  1868. u_int32_t i;
  1869. u_int ch;
  1870. int ret;
  1871. i = 0;
  1872. ch = 0;
  1873. notused2 = DB_TXN_ABORT;
  1874. notused3 = NULL;
  1875. if ((ret = __bam_curadj_read(dbenv, dbtp->data, &argp)) != 0)
  1876. return (ret);
  1877. printf("[%lu][%lu]bam_curadj: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  1878.     (u_long)lsnp->file,
  1879.     (u_long)lsnp->offset,
  1880.     (u_long)argp->type,
  1881.     (u_long)argp->txnid->txnid,
  1882.     (u_long)argp->prev_lsn.file,
  1883.     (u_long)argp->prev_lsn.offset);
  1884. printf("tfileid: %ldn", (long)argp->fileid);
  1885. printf("tmode: %ldn", (long)argp->mode);
  1886. printf("tfrom_pgno: %lun", (u_long)argp->from_pgno);
  1887. printf("tto_pgno: %lun", (u_long)argp->to_pgno);
  1888. printf("tleft_pgno: %lun", (u_long)argp->left_pgno);
  1889. printf("tfirst_indx: %lun", (u_long)argp->first_indx);
  1890. printf("tfrom_indx: %lun", (u_long)argp->from_indx);
  1891. printf("tto_indx: %lun", (u_long)argp->to_indx);
  1892. printf("n");
  1893. __os_free(argp, 0);
  1894. return (0);
  1895. }
  1896. int
  1897. __bam_curadj_read(dbenv, recbuf, argpp)
  1898. DB_ENV *dbenv;
  1899. void *recbuf;
  1900. __bam_curadj_args **argpp;
  1901. {
  1902. __bam_curadj_args *argp;
  1903. u_int8_t *bp;
  1904. int ret;
  1905. ret = __os_malloc(dbenv, sizeof(__bam_curadj_args) +
  1906.     sizeof(DB_TXN), NULL, &argp);
  1907. if (ret != 0)
  1908. return (ret);
  1909. argp->txnid = (DB_TXN *)&argp[1];
  1910. bp = recbuf;
  1911. memcpy(&argp->type, bp, sizeof(argp->type));
  1912. bp += sizeof(argp->type);
  1913. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  1914. bp += sizeof(argp->txnid->txnid);
  1915. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  1916. bp += sizeof(DB_LSN);
  1917. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  1918. bp += sizeof(argp->fileid);
  1919. memcpy(&argp->mode, bp, sizeof(argp->mode));
  1920. bp += sizeof(argp->mode);
  1921. memcpy(&argp->from_pgno, bp, sizeof(argp->from_pgno));
  1922. bp += sizeof(argp->from_pgno);
  1923. memcpy(&argp->to_pgno, bp, sizeof(argp->to_pgno));
  1924. bp += sizeof(argp->to_pgno);
  1925. memcpy(&argp->left_pgno, bp, sizeof(argp->left_pgno));
  1926. bp += sizeof(argp->left_pgno);
  1927. memcpy(&argp->first_indx, bp, sizeof(argp->first_indx));
  1928. bp += sizeof(argp->first_indx);
  1929. memcpy(&argp->from_indx, bp, sizeof(argp->from_indx));
  1930. bp += sizeof(argp->from_indx);
  1931. memcpy(&argp->to_indx, bp, sizeof(argp->to_indx));
  1932. bp += sizeof(argp->to_indx);
  1933. *argpp = argp;
  1934. return (0);
  1935. }
  1936. int
  1937. __bam_rcuradj_log(dbenv, txnid, ret_lsnp, flags,
  1938. fileid, mode, root, recno, order)
  1939. DB_ENV *dbenv;
  1940. DB_TXN *txnid;
  1941. DB_LSN *ret_lsnp;
  1942. u_int32_t flags;
  1943. int32_t fileid;
  1944. ca_recno_arg mode;
  1945. db_pgno_t root;
  1946. db_recno_t recno;
  1947. u_int32_t order;
  1948. {
  1949. DBT logrec;
  1950. DB_LSN *lsnp, null_lsn;
  1951. u_int32_t rectype, txn_num;
  1952. int ret;
  1953. u_int8_t *bp;
  1954. rectype = DB_bam_rcuradj;
  1955. if (txnid != NULL &&
  1956.     TAILQ_FIRST(&txnid->kids) != NULL &&
  1957.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  1958. return (ret);
  1959. txn_num = txnid == NULL ? 0 : txnid->txnid;
  1960. if (txnid == NULL) {
  1961. ZERO_LSN(null_lsn);
  1962. lsnp = &null_lsn;
  1963. } else
  1964. lsnp = &txnid->last_lsn;
  1965. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  1966.     + sizeof(fileid)
  1967.     + sizeof(mode)
  1968.     + sizeof(root)
  1969.     + sizeof(recno)
  1970.     + sizeof(order);
  1971. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  1972. return (ret);
  1973. bp = logrec.data;
  1974. memcpy(bp, &rectype, sizeof(rectype));
  1975. bp += sizeof(rectype);
  1976. memcpy(bp, &txn_num, sizeof(txn_num));
  1977. bp += sizeof(txn_num);
  1978. memcpy(bp, lsnp, sizeof(DB_LSN));
  1979. bp += sizeof(DB_LSN);
  1980. memcpy(bp, &fileid, sizeof(fileid));
  1981. bp += sizeof(fileid);
  1982. memcpy(bp, &mode, sizeof(mode));
  1983. bp += sizeof(mode);
  1984. memcpy(bp, &root, sizeof(root));
  1985. bp += sizeof(root);
  1986. memcpy(bp, &recno, sizeof(recno));
  1987. bp += sizeof(recno);
  1988. memcpy(bp, &order, sizeof(order));
  1989. bp += sizeof(order);
  1990. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  1991. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  1992. if (txnid != NULL)
  1993. txnid->last_lsn = *ret_lsnp;
  1994. __os_free(logrec.data, logrec.size);
  1995. return (ret);
  1996. }
  1997. int
  1998. __bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, notused3)
  1999. DB_ENV *dbenv;
  2000. DBT *dbtp;
  2001. DB_LSN *lsnp;
  2002. db_recops notused2;
  2003. void *notused3;
  2004. {
  2005. __bam_rcuradj_args *argp;
  2006. u_int32_t i;
  2007. u_int ch;
  2008. int ret;
  2009. i = 0;
  2010. ch = 0;
  2011. notused2 = DB_TXN_ABORT;
  2012. notused3 = NULL;
  2013. if ((ret = __bam_rcuradj_read(dbenv, dbtp->data, &argp)) != 0)
  2014. return (ret);
  2015. printf("[%lu][%lu]bam_rcuradj: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  2016.     (u_long)lsnp->file,
  2017.     (u_long)lsnp->offset,
  2018.     (u_long)argp->type,
  2019.     (u_long)argp->txnid->txnid,
  2020.     (u_long)argp->prev_lsn.file,
  2021.     (u_long)argp->prev_lsn.offset);
  2022. printf("tfileid: %ldn", (long)argp->fileid);
  2023. printf("tmode: %ldn", (long)argp->mode);
  2024. printf("troot: %ldn", (long)argp->root);
  2025. printf("trecno: %ldn", (long)argp->recno);
  2026. printf("torder: %ldn", (long)argp->order);
  2027. printf("n");
  2028. __os_free(argp, 0);
  2029. return (0);
  2030. }
  2031. int
  2032. __bam_rcuradj_read(dbenv, recbuf, argpp)
  2033. DB_ENV *dbenv;
  2034. void *recbuf;
  2035. __bam_rcuradj_args **argpp;
  2036. {
  2037. __bam_rcuradj_args *argp;
  2038. u_int8_t *bp;
  2039. int ret;
  2040. ret = __os_malloc(dbenv, sizeof(__bam_rcuradj_args) +
  2041.     sizeof(DB_TXN), NULL, &argp);
  2042. if (ret != 0)
  2043. return (ret);
  2044. argp->txnid = (DB_TXN *)&argp[1];
  2045. bp = recbuf;
  2046. memcpy(&argp->type, bp, sizeof(argp->type));
  2047. bp += sizeof(argp->type);
  2048. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  2049. bp += sizeof(argp->txnid->txnid);
  2050. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  2051. bp += sizeof(DB_LSN);
  2052. memcpy(&argp->fileid, bp, sizeof(argp->fileid));
  2053. bp += sizeof(argp->fileid);
  2054. memcpy(&argp->mode, bp, sizeof(argp->mode));
  2055. bp += sizeof(argp->mode);
  2056. memcpy(&argp->root, bp, sizeof(argp->root));
  2057. bp += sizeof(argp->root);
  2058. memcpy(&argp->recno, bp, sizeof(argp->recno));
  2059. bp += sizeof(argp->recno);
  2060. memcpy(&argp->order, bp, sizeof(argp->order));
  2061. bp += sizeof(argp->order);
  2062. *argpp = argp;
  2063. return (0);
  2064. }
  2065. int
  2066. __bam_init_print(dbenv)
  2067. DB_ENV *dbenv;
  2068. {
  2069. int ret;
  2070. if ((ret = __db_add_recovery(dbenv,
  2071.     __bam_pg_alloc_print, DB_bam_pg_alloc)) != 0)
  2072. return (ret);
  2073. if ((ret = __db_add_recovery(dbenv,
  2074.     __bam_pg_alloc1_print, DB_bam_pg_alloc1)) != 0)
  2075. return (ret);
  2076. if ((ret = __db_add_recovery(dbenv,
  2077.     __bam_pg_free_print, DB_bam_pg_free)) != 0)
  2078. return (ret);
  2079. if ((ret = __db_add_recovery(dbenv,
  2080.     __bam_pg_free1_print, DB_bam_pg_free1)) != 0)
  2081. return (ret);
  2082. if ((ret = __db_add_recovery(dbenv,
  2083.     __bam_split1_print, DB_bam_split1)) != 0)
  2084. return (ret);
  2085. if ((ret = __db_add_recovery(dbenv,
  2086.     __bam_split_print, DB_bam_split)) != 0)
  2087. return (ret);
  2088. if ((ret = __db_add_recovery(dbenv,
  2089.     __bam_rsplit1_print, DB_bam_rsplit1)) != 0)
  2090. return (ret);
  2091. if ((ret = __db_add_recovery(dbenv,
  2092.     __bam_rsplit_print, DB_bam_rsplit)) != 0)
  2093. return (ret);
  2094. if ((ret = __db_add_recovery(dbenv,
  2095.     __bam_adj_print, DB_bam_adj)) != 0)
  2096. return (ret);
  2097. if ((ret = __db_add_recovery(dbenv,
  2098.     __bam_cadjust_print, DB_bam_cadjust)) != 0)
  2099. return (ret);
  2100. if ((ret = __db_add_recovery(dbenv,
  2101.     __bam_cdel_print, DB_bam_cdel)) != 0)
  2102. return (ret);
  2103. if ((ret = __db_add_recovery(dbenv,
  2104.     __bam_repl_print, DB_bam_repl)) != 0)
  2105. return (ret);
  2106. if ((ret = __db_add_recovery(dbenv,
  2107.     __bam_root_print, DB_bam_root)) != 0)
  2108. return (ret);
  2109. if ((ret = __db_add_recovery(dbenv,
  2110.     __bam_curadj_print, DB_bam_curadj)) != 0)
  2111. return (ret);
  2112. if ((ret = __db_add_recovery(dbenv,
  2113.     __bam_rcuradj_print, DB_bam_rcuradj)) != 0)
  2114. return (ret);
  2115. return (0);
  2116. }
  2117. int
  2118. __bam_init_recover(dbenv)
  2119. DB_ENV *dbenv;
  2120. {
  2121. int ret;
  2122. if ((ret = __db_add_recovery(dbenv,
  2123.     __bam_pg_alloc_recover, DB_bam_pg_alloc)) != 0)
  2124. return (ret);
  2125. if ((ret = __db_add_recovery(dbenv,
  2126.     __deprecated_recover, DB_bam_pg_alloc1)) != 0)
  2127. return (ret);
  2128. if ((ret = __db_add_recovery(dbenv,
  2129.     __bam_pg_free_recover, DB_bam_pg_free)) != 0)
  2130. return (ret);
  2131. if ((ret = __db_add_recovery(dbenv,
  2132.     __deprecated_recover, DB_bam_pg_free1)) != 0)
  2133. return (ret);
  2134. if ((ret = __db_add_recovery(dbenv,
  2135.     __deprecated_recover, DB_bam_split1)) != 0)
  2136. return (ret);
  2137. if ((ret = __db_add_recovery(dbenv,
  2138.     __bam_split_recover, DB_bam_split)) != 0)
  2139. return (ret);
  2140. if ((ret = __db_add_recovery(dbenv,
  2141.     __deprecated_recover, DB_bam_rsplit1)) != 0)
  2142. return (ret);
  2143. if ((ret = __db_add_recovery(dbenv,
  2144.     __bam_rsplit_recover, DB_bam_rsplit)) != 0)
  2145. return (ret);
  2146. if ((ret = __db_add_recovery(dbenv,
  2147.     __bam_adj_recover, DB_bam_adj)) != 0)
  2148. return (ret);
  2149. if ((ret = __db_add_recovery(dbenv,
  2150.     __bam_cadjust_recover, DB_bam_cadjust)) != 0)
  2151. return (ret);
  2152. if ((ret = __db_add_recovery(dbenv,
  2153.     __bam_cdel_recover, DB_bam_cdel)) != 0)
  2154. return (ret);
  2155. if ((ret = __db_add_recovery(dbenv,
  2156.     __bam_repl_recover, DB_bam_repl)) != 0)
  2157. return (ret);
  2158. if ((ret = __db_add_recovery(dbenv,
  2159.     __bam_root_recover, DB_bam_root)) != 0)
  2160. return (ret);
  2161. if ((ret = __db_add_recovery(dbenv,
  2162.     __bam_curadj_recover, DB_bam_curadj)) != 0)
  2163. return (ret);
  2164. if ((ret = __db_add_recovery(dbenv,
  2165.     __bam_rcuradj_recover, DB_bam_rcuradj)) != 0)
  2166. return (ret);
  2167. return (0);
  2168. }