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

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 "txn.h"
  14. int
  15. __txn_old_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
  16. DB_ENV *dbenv;
  17. DBT *dbtp;
  18. DB_LSN *lsnp;
  19. db_recops notused2;
  20. void *notused3;
  21. {
  22. __txn_old_regop_args *argp;
  23. u_int32_t i;
  24. u_int ch;
  25. int ret;
  26. i = 0;
  27. ch = 0;
  28. notused2 = DB_TXN_ABORT;
  29. notused3 = NULL;
  30. if ((ret = __txn_old_regop_read(dbenv, dbtp->data, &argp)) != 0)
  31. return (ret);
  32. printf("[%lu][%lu]txn_old_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  33.     (u_long)lsnp->file,
  34.     (u_long)lsnp->offset,
  35.     (u_long)argp->type,
  36.     (u_long)argp->txnid->txnid,
  37.     (u_long)argp->prev_lsn.file,
  38.     (u_long)argp->prev_lsn.offset);
  39. printf("topcode: %lun", (u_long)argp->opcode);
  40. printf("n");
  41. __os_free(argp, 0);
  42. return (0);
  43. }
  44. int
  45. __txn_old_regop_read(dbenv, recbuf, argpp)
  46. DB_ENV *dbenv;
  47. void *recbuf;
  48. __txn_old_regop_args **argpp;
  49. {
  50. __txn_old_regop_args *argp;
  51. u_int8_t *bp;
  52. int ret;
  53. ret = __os_malloc(dbenv, sizeof(__txn_old_regop_args) +
  54.     sizeof(DB_TXN), NULL, &argp);
  55. if (ret != 0)
  56. return (ret);
  57. argp->txnid = (DB_TXN *)&argp[1];
  58. bp = recbuf;
  59. memcpy(&argp->type, bp, sizeof(argp->type));
  60. bp += sizeof(argp->type);
  61. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  62. bp += sizeof(argp->txnid->txnid);
  63. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  64. bp += sizeof(DB_LSN);
  65. memcpy(&argp->opcode, bp, sizeof(argp->opcode));
  66. bp += sizeof(argp->opcode);
  67. *argpp = argp;
  68. return (0);
  69. }
  70. int
  71. __txn_regop_log(dbenv, txnid, ret_lsnp, flags,
  72. opcode, timestamp)
  73. DB_ENV *dbenv;
  74. DB_TXN *txnid;
  75. DB_LSN *ret_lsnp;
  76. u_int32_t flags;
  77. u_int32_t opcode;
  78. int32_t timestamp;
  79. {
  80. DBT logrec;
  81. DB_LSN *lsnp, null_lsn;
  82. u_int32_t rectype, txn_num;
  83. int ret;
  84. u_int8_t *bp;
  85. rectype = DB_txn_regop;
  86. if (txnid != NULL &&
  87.     TAILQ_FIRST(&txnid->kids) != NULL &&
  88.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  89. return (ret);
  90. txn_num = txnid == NULL ? 0 : txnid->txnid;
  91. if (txnid == NULL) {
  92. ZERO_LSN(null_lsn);
  93. lsnp = &null_lsn;
  94. } else
  95. lsnp = &txnid->last_lsn;
  96. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  97.     + sizeof(opcode)
  98.     + sizeof(timestamp);
  99. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  100. return (ret);
  101. bp = logrec.data;
  102. memcpy(bp, &rectype, sizeof(rectype));
  103. bp += sizeof(rectype);
  104. memcpy(bp, &txn_num, sizeof(txn_num));
  105. bp += sizeof(txn_num);
  106. memcpy(bp, lsnp, sizeof(DB_LSN));
  107. bp += sizeof(DB_LSN);
  108. memcpy(bp, &opcode, sizeof(opcode));
  109. bp += sizeof(opcode);
  110. memcpy(bp, &timestamp, sizeof(timestamp));
  111. bp += sizeof(timestamp);
  112. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  113. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  114. if (txnid != NULL)
  115. txnid->last_lsn = *ret_lsnp;
  116. __os_free(logrec.data, logrec.size);
  117. return (ret);
  118. }
  119. int
  120. __txn_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
  121. DB_ENV *dbenv;
  122. DBT *dbtp;
  123. DB_LSN *lsnp;
  124. db_recops notused2;
  125. void *notused3;
  126. {
  127. __txn_regop_args *argp;
  128. u_int32_t i;
  129. u_int ch;
  130. int ret;
  131. i = 0;
  132. ch = 0;
  133. notused2 = DB_TXN_ABORT;
  134. notused3 = NULL;
  135. if ((ret = __txn_regop_read(dbenv, dbtp->data, &argp)) != 0)
  136. return (ret);
  137. printf("[%lu][%lu]txn_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  138.     (u_long)lsnp->file,
  139.     (u_long)lsnp->offset,
  140.     (u_long)argp->type,
  141.     (u_long)argp->txnid->txnid,
  142.     (u_long)argp->prev_lsn.file,
  143.     (u_long)argp->prev_lsn.offset);
  144. printf("topcode: %lun", (u_long)argp->opcode);
  145. printf("ttimestamp: %ldn", (long)argp->timestamp);
  146. printf("n");
  147. __os_free(argp, 0);
  148. return (0);
  149. }
  150. int
  151. __txn_regop_read(dbenv, recbuf, argpp)
  152. DB_ENV *dbenv;
  153. void *recbuf;
  154. __txn_regop_args **argpp;
  155. {
  156. __txn_regop_args *argp;
  157. u_int8_t *bp;
  158. int ret;
  159. ret = __os_malloc(dbenv, sizeof(__txn_regop_args) +
  160.     sizeof(DB_TXN), NULL, &argp);
  161. if (ret != 0)
  162. return (ret);
  163. argp->txnid = (DB_TXN *)&argp[1];
  164. bp = recbuf;
  165. memcpy(&argp->type, bp, sizeof(argp->type));
  166. bp += sizeof(argp->type);
  167. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  168. bp += sizeof(argp->txnid->txnid);
  169. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  170. bp += sizeof(DB_LSN);
  171. memcpy(&argp->opcode, bp, sizeof(argp->opcode));
  172. bp += sizeof(argp->opcode);
  173. memcpy(&argp->timestamp, bp, sizeof(argp->timestamp));
  174. bp += sizeof(argp->timestamp);
  175. *argpp = argp;
  176. return (0);
  177. }
  178. int
  179. __txn_old_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
  180. DB_ENV *dbenv;
  181. DBT *dbtp;
  182. DB_LSN *lsnp;
  183. db_recops notused2;
  184. void *notused3;
  185. {
  186. __txn_old_ckp_args *argp;
  187. u_int32_t i;
  188. u_int ch;
  189. int ret;
  190. i = 0;
  191. ch = 0;
  192. notused2 = DB_TXN_ABORT;
  193. notused3 = NULL;
  194. if ((ret = __txn_old_ckp_read(dbenv, dbtp->data, &argp)) != 0)
  195. return (ret);
  196. printf("[%lu][%lu]txn_old_ckp: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  197.     (u_long)lsnp->file,
  198.     (u_long)lsnp->offset,
  199.     (u_long)argp->type,
  200.     (u_long)argp->txnid->txnid,
  201.     (u_long)argp->prev_lsn.file,
  202.     (u_long)argp->prev_lsn.offset);
  203. printf("tckp_lsn: [%lu][%lu]n",
  204.     (u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
  205. printf("tlast_ckp: [%lu][%lu]n",
  206.     (u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset);
  207. printf("n");
  208. __os_free(argp, 0);
  209. return (0);
  210. }
  211. int
  212. __txn_old_ckp_read(dbenv, recbuf, argpp)
  213. DB_ENV *dbenv;
  214. void *recbuf;
  215. __txn_old_ckp_args **argpp;
  216. {
  217. __txn_old_ckp_args *argp;
  218. u_int8_t *bp;
  219. int ret;
  220. ret = __os_malloc(dbenv, sizeof(__txn_old_ckp_args) +
  221.     sizeof(DB_TXN), NULL, &argp);
  222. if (ret != 0)
  223. return (ret);
  224. argp->txnid = (DB_TXN *)&argp[1];
  225. bp = recbuf;
  226. memcpy(&argp->type, bp, sizeof(argp->type));
  227. bp += sizeof(argp->type);
  228. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  229. bp += sizeof(argp->txnid->txnid);
  230. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  231. bp += sizeof(DB_LSN);
  232. memcpy(&argp->ckp_lsn, bp,  sizeof(argp->ckp_lsn));
  233. bp += sizeof(argp->ckp_lsn);
  234. memcpy(&argp->last_ckp, bp,  sizeof(argp->last_ckp));
  235. bp += sizeof(argp->last_ckp);
  236. *argpp = argp;
  237. return (0);
  238. }
  239. int
  240. __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
  241. ckp_lsn, last_ckp, timestamp)
  242. DB_ENV *dbenv;
  243. DB_TXN *txnid;
  244. DB_LSN *ret_lsnp;
  245. u_int32_t flags;
  246. DB_LSN * ckp_lsn;
  247. DB_LSN * last_ckp;
  248. int32_t timestamp;
  249. {
  250. DBT logrec;
  251. DB_LSN *lsnp, null_lsn;
  252. u_int32_t rectype, txn_num;
  253. int ret;
  254. u_int8_t *bp;
  255. rectype = DB_txn_ckp;
  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(*ckp_lsn)
  268.     + sizeof(*last_ckp)
  269.     + sizeof(timestamp);
  270. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  271. return (ret);
  272. bp = logrec.data;
  273. memcpy(bp, &rectype, sizeof(rectype));
  274. bp += sizeof(rectype);
  275. memcpy(bp, &txn_num, sizeof(txn_num));
  276. bp += sizeof(txn_num);
  277. memcpy(bp, lsnp, sizeof(DB_LSN));
  278. bp += sizeof(DB_LSN);
  279. if (ckp_lsn != NULL)
  280. memcpy(bp, ckp_lsn, sizeof(*ckp_lsn));
  281. else
  282. memset(bp, 0, sizeof(*ckp_lsn));
  283. bp += sizeof(*ckp_lsn);
  284. if (last_ckp != NULL)
  285. memcpy(bp, last_ckp, sizeof(*last_ckp));
  286. else
  287. memset(bp, 0, sizeof(*last_ckp));
  288. bp += sizeof(*last_ckp);
  289. memcpy(bp, &timestamp, sizeof(timestamp));
  290. bp += sizeof(timestamp);
  291. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  292. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  293. if (txnid != NULL)
  294. txnid->last_lsn = *ret_lsnp;
  295. __os_free(logrec.data, logrec.size);
  296. return (ret);
  297. }
  298. int
  299. __txn_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
  300. DB_ENV *dbenv;
  301. DBT *dbtp;
  302. DB_LSN *lsnp;
  303. db_recops notused2;
  304. void *notused3;
  305. {
  306. __txn_ckp_args *argp;
  307. u_int32_t i;
  308. u_int ch;
  309. int ret;
  310. i = 0;
  311. ch = 0;
  312. notused2 = DB_TXN_ABORT;
  313. notused3 = NULL;
  314. if ((ret = __txn_ckp_read(dbenv, dbtp->data, &argp)) != 0)
  315. return (ret);
  316. printf("[%lu][%lu]txn_ckp: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  317.     (u_long)lsnp->file,
  318.     (u_long)lsnp->offset,
  319.     (u_long)argp->type,
  320.     (u_long)argp->txnid->txnid,
  321.     (u_long)argp->prev_lsn.file,
  322.     (u_long)argp->prev_lsn.offset);
  323. printf("tckp_lsn: [%lu][%lu]n",
  324.     (u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
  325. printf("tlast_ckp: [%lu][%lu]n",
  326.     (u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset);
  327. printf("ttimestamp: %ldn", (long)argp->timestamp);
  328. printf("n");
  329. __os_free(argp, 0);
  330. return (0);
  331. }
  332. int
  333. __txn_ckp_read(dbenv, recbuf, argpp)
  334. DB_ENV *dbenv;
  335. void *recbuf;
  336. __txn_ckp_args **argpp;
  337. {
  338. __txn_ckp_args *argp;
  339. u_int8_t *bp;
  340. int ret;
  341. ret = __os_malloc(dbenv, sizeof(__txn_ckp_args) +
  342.     sizeof(DB_TXN), NULL, &argp);
  343. if (ret != 0)
  344. return (ret);
  345. argp->txnid = (DB_TXN *)&argp[1];
  346. bp = recbuf;
  347. memcpy(&argp->type, bp, sizeof(argp->type));
  348. bp += sizeof(argp->type);
  349. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  350. bp += sizeof(argp->txnid->txnid);
  351. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  352. bp += sizeof(DB_LSN);
  353. memcpy(&argp->ckp_lsn, bp,  sizeof(argp->ckp_lsn));
  354. bp += sizeof(argp->ckp_lsn);
  355. memcpy(&argp->last_ckp, bp,  sizeof(argp->last_ckp));
  356. bp += sizeof(argp->last_ckp);
  357. memcpy(&argp->timestamp, bp, sizeof(argp->timestamp));
  358. bp += sizeof(argp->timestamp);
  359. *argpp = argp;
  360. return (0);
  361. }
  362. int
  363. __txn_xa_regop_old_print(dbenv, dbtp, lsnp, notused2, notused3)
  364. DB_ENV *dbenv;
  365. DBT *dbtp;
  366. DB_LSN *lsnp;
  367. db_recops notused2;
  368. void *notused3;
  369. {
  370. __txn_xa_regop_old_args *argp;
  371. u_int32_t i;
  372. u_int ch;
  373. int ret;
  374. i = 0;
  375. ch = 0;
  376. notused2 = DB_TXN_ABORT;
  377. notused3 = NULL;
  378. if ((ret = __txn_xa_regop_old_read(dbenv, dbtp->data, &argp)) != 0)
  379. return (ret);
  380. printf("[%lu][%lu]txn_xa_regop_old: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  381.     (u_long)lsnp->file,
  382.     (u_long)lsnp->offset,
  383.     (u_long)argp->type,
  384.     (u_long)argp->txnid->txnid,
  385.     (u_long)argp->prev_lsn.file,
  386.     (u_long)argp->prev_lsn.offset);
  387. printf("topcode: %lun", (u_long)argp->opcode);
  388. printf("txid: ");
  389. for (i = 0; i < argp->xid.size; i++) {
  390. ch = ((u_int8_t *)argp->xid.data)[i];
  391. if (isprint(ch) || ch == 0xa)
  392. putchar(ch);
  393. else
  394. printf("%#x ", ch);
  395. }
  396. printf("n");
  397. printf("tformatID: %ldn", (long)argp->formatID);
  398. printf("tgtrid: %un", argp->gtrid);
  399. printf("tbqual: %un", argp->bqual);
  400. printf("n");
  401. __os_free(argp, 0);
  402. return (0);
  403. }
  404. int
  405. __txn_xa_regop_old_read(dbenv, recbuf, argpp)
  406. DB_ENV *dbenv;
  407. void *recbuf;
  408. __txn_xa_regop_old_args **argpp;
  409. {
  410. __txn_xa_regop_old_args *argp;
  411. u_int8_t *bp;
  412. int ret;
  413. ret = __os_malloc(dbenv, sizeof(__txn_xa_regop_old_args) +
  414.     sizeof(DB_TXN), NULL, &argp);
  415. if (ret != 0)
  416. return (ret);
  417. argp->txnid = (DB_TXN *)&argp[1];
  418. bp = recbuf;
  419. memcpy(&argp->type, bp, sizeof(argp->type));
  420. bp += sizeof(argp->type);
  421. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  422. bp += sizeof(argp->txnid->txnid);
  423. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  424. bp += sizeof(DB_LSN);
  425. memcpy(&argp->opcode, bp, sizeof(argp->opcode));
  426. bp += sizeof(argp->opcode);
  427. memset(&argp->xid, 0, sizeof(argp->xid));
  428. memcpy(&argp->xid.size, bp, sizeof(u_int32_t));
  429. bp += sizeof(u_int32_t);
  430. argp->xid.data = bp;
  431. bp += argp->xid.size;
  432. memcpy(&argp->formatID, bp, sizeof(argp->formatID));
  433. bp += sizeof(argp->formatID);
  434. memcpy(&argp->gtrid, bp, sizeof(argp->gtrid));
  435. bp += sizeof(argp->gtrid);
  436. memcpy(&argp->bqual, bp, sizeof(argp->bqual));
  437. bp += sizeof(argp->bqual);
  438. *argpp = argp;
  439. return (0);
  440. }
  441. int
  442. __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
  443. opcode, xid, formatID, gtrid, bqual, begin_lsn)
  444. DB_ENV *dbenv;
  445. DB_TXN *txnid;
  446. DB_LSN *ret_lsnp;
  447. u_int32_t flags;
  448. u_int32_t opcode;
  449. const DBT *xid;
  450. int32_t formatID;
  451. u_int32_t gtrid;
  452. u_int32_t bqual;
  453. DB_LSN * begin_lsn;
  454. {
  455. DBT logrec;
  456. DB_LSN *lsnp, null_lsn;
  457. u_int32_t zero;
  458. u_int32_t rectype, txn_num;
  459. int ret;
  460. u_int8_t *bp;
  461. rectype = DB_txn_xa_regop;
  462. if (txnid != NULL &&
  463.     TAILQ_FIRST(&txnid->kids) != NULL &&
  464.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  465. return (ret);
  466. txn_num = txnid == NULL ? 0 : txnid->txnid;
  467. if (txnid == NULL) {
  468. ZERO_LSN(null_lsn);
  469. lsnp = &null_lsn;
  470. } else
  471. lsnp = &txnid->last_lsn;
  472. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  473.     + sizeof(opcode)
  474.     + sizeof(u_int32_t) + (xid == NULL ? 0 : xid->size)
  475.     + sizeof(formatID)
  476.     + sizeof(gtrid)
  477.     + sizeof(bqual)
  478.     + sizeof(*begin_lsn);
  479. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  480. return (ret);
  481. bp = logrec.data;
  482. memcpy(bp, &rectype, sizeof(rectype));
  483. bp += sizeof(rectype);
  484. memcpy(bp, &txn_num, sizeof(txn_num));
  485. bp += sizeof(txn_num);
  486. memcpy(bp, lsnp, sizeof(DB_LSN));
  487. bp += sizeof(DB_LSN);
  488. memcpy(bp, &opcode, sizeof(opcode));
  489. bp += sizeof(opcode);
  490. if (xid == NULL) {
  491. zero = 0;
  492. memcpy(bp, &zero, sizeof(u_int32_t));
  493. bp += sizeof(u_int32_t);
  494. } else {
  495. memcpy(bp, &xid->size, sizeof(xid->size));
  496. bp += sizeof(xid->size);
  497. memcpy(bp, xid->data, xid->size);
  498. bp += xid->size;
  499. }
  500. memcpy(bp, &formatID, sizeof(formatID));
  501. bp += sizeof(formatID);
  502. memcpy(bp, &gtrid, sizeof(gtrid));
  503. bp += sizeof(gtrid);
  504. memcpy(bp, &bqual, sizeof(bqual));
  505. bp += sizeof(bqual);
  506. if (begin_lsn != NULL)
  507. memcpy(bp, begin_lsn, sizeof(*begin_lsn));
  508. else
  509. memset(bp, 0, sizeof(*begin_lsn));
  510. bp += sizeof(*begin_lsn);
  511. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  512. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  513. if (txnid != NULL)
  514. txnid->last_lsn = *ret_lsnp;
  515. __os_free(logrec.data, logrec.size);
  516. return (ret);
  517. }
  518. int
  519. __txn_xa_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
  520. DB_ENV *dbenv;
  521. DBT *dbtp;
  522. DB_LSN *lsnp;
  523. db_recops notused2;
  524. void *notused3;
  525. {
  526. __txn_xa_regop_args *argp;
  527. u_int32_t i;
  528. u_int ch;
  529. int ret;
  530. i = 0;
  531. ch = 0;
  532. notused2 = DB_TXN_ABORT;
  533. notused3 = NULL;
  534. if ((ret = __txn_xa_regop_read(dbenv, dbtp->data, &argp)) != 0)
  535. return (ret);
  536. printf("[%lu][%lu]txn_xa_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  537.     (u_long)lsnp->file,
  538.     (u_long)lsnp->offset,
  539.     (u_long)argp->type,
  540.     (u_long)argp->txnid->txnid,
  541.     (u_long)argp->prev_lsn.file,
  542.     (u_long)argp->prev_lsn.offset);
  543. printf("topcode: %lun", (u_long)argp->opcode);
  544. printf("txid: ");
  545. for (i = 0; i < argp->xid.size; i++) {
  546. ch = ((u_int8_t *)argp->xid.data)[i];
  547. if (isprint(ch) || ch == 0xa)
  548. putchar(ch);
  549. else
  550. printf("%#x ", ch);
  551. }
  552. printf("n");
  553. printf("tformatID: %ldn", (long)argp->formatID);
  554. printf("tgtrid: %un", argp->gtrid);
  555. printf("tbqual: %un", argp->bqual);
  556. printf("tbegin_lsn: [%lu][%lu]n",
  557.     (u_long)argp->begin_lsn.file, (u_long)argp->begin_lsn.offset);
  558. printf("n");
  559. __os_free(argp, 0);
  560. return (0);
  561. }
  562. int
  563. __txn_xa_regop_read(dbenv, recbuf, argpp)
  564. DB_ENV *dbenv;
  565. void *recbuf;
  566. __txn_xa_regop_args **argpp;
  567. {
  568. __txn_xa_regop_args *argp;
  569. u_int8_t *bp;
  570. int ret;
  571. ret = __os_malloc(dbenv, sizeof(__txn_xa_regop_args) +
  572.     sizeof(DB_TXN), NULL, &argp);
  573. if (ret != 0)
  574. return (ret);
  575. argp->txnid = (DB_TXN *)&argp[1];
  576. bp = recbuf;
  577. memcpy(&argp->type, bp, sizeof(argp->type));
  578. bp += sizeof(argp->type);
  579. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  580. bp += sizeof(argp->txnid->txnid);
  581. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  582. bp += sizeof(DB_LSN);
  583. memcpy(&argp->opcode, bp, sizeof(argp->opcode));
  584. bp += sizeof(argp->opcode);
  585. memset(&argp->xid, 0, sizeof(argp->xid));
  586. memcpy(&argp->xid.size, bp, sizeof(u_int32_t));
  587. bp += sizeof(u_int32_t);
  588. argp->xid.data = bp;
  589. bp += argp->xid.size;
  590. memcpy(&argp->formatID, bp, sizeof(argp->formatID));
  591. bp += sizeof(argp->formatID);
  592. memcpy(&argp->gtrid, bp, sizeof(argp->gtrid));
  593. bp += sizeof(argp->gtrid);
  594. memcpy(&argp->bqual, bp, sizeof(argp->bqual));
  595. bp += sizeof(argp->bqual);
  596. memcpy(&argp->begin_lsn, bp,  sizeof(argp->begin_lsn));
  597. bp += sizeof(argp->begin_lsn);
  598. *argpp = argp;
  599. return (0);
  600. }
  601. int
  602. __txn_child_old_print(dbenv, dbtp, lsnp, notused2, notused3)
  603. DB_ENV *dbenv;
  604. DBT *dbtp;
  605. DB_LSN *lsnp;
  606. db_recops notused2;
  607. void *notused3;
  608. {
  609. __txn_child_old_args *argp;
  610. u_int32_t i;
  611. u_int ch;
  612. int ret;
  613. i = 0;
  614. ch = 0;
  615. notused2 = DB_TXN_ABORT;
  616. notused3 = NULL;
  617. if ((ret = __txn_child_old_read(dbenv, dbtp->data, &argp)) != 0)
  618. return (ret);
  619. printf("[%lu][%lu]txn_child_old: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  620.     (u_long)lsnp->file,
  621.     (u_long)lsnp->offset,
  622.     (u_long)argp->type,
  623.     (u_long)argp->txnid->txnid,
  624.     (u_long)argp->prev_lsn.file,
  625.     (u_long)argp->prev_lsn.offset);
  626. printf("topcode: %lun", (u_long)argp->opcode);
  627. printf("tparent: 0x%lxn", (u_long)argp->parent);
  628. printf("n");
  629. __os_free(argp, 0);
  630. return (0);
  631. }
  632. int
  633. __txn_child_old_read(dbenv, recbuf, argpp)
  634. DB_ENV *dbenv;
  635. void *recbuf;
  636. __txn_child_old_args **argpp;
  637. {
  638. __txn_child_old_args *argp;
  639. u_int8_t *bp;
  640. int ret;
  641. ret = __os_malloc(dbenv, sizeof(__txn_child_old_args) +
  642.     sizeof(DB_TXN), NULL, &argp);
  643. if (ret != 0)
  644. return (ret);
  645. argp->txnid = (DB_TXN *)&argp[1];
  646. bp = recbuf;
  647. memcpy(&argp->type, bp, sizeof(argp->type));
  648. bp += sizeof(argp->type);
  649. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  650. bp += sizeof(argp->txnid->txnid);
  651. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  652. bp += sizeof(DB_LSN);
  653. memcpy(&argp->opcode, bp, sizeof(argp->opcode));
  654. bp += sizeof(argp->opcode);
  655. memcpy(&argp->parent, bp, sizeof(argp->parent));
  656. bp += sizeof(argp->parent);
  657. *argpp = argp;
  658. return (0);
  659. }
  660. int
  661. __txn_child_log(dbenv, txnid, ret_lsnp, flags,
  662. child, c_lsn)
  663. DB_ENV *dbenv;
  664. DB_TXN *txnid;
  665. DB_LSN *ret_lsnp;
  666. u_int32_t flags;
  667. u_int32_t child;
  668. DB_LSN * c_lsn;
  669. {
  670. DBT logrec;
  671. DB_LSN *lsnp, null_lsn;
  672. u_int32_t rectype, txn_num;
  673. int ret;
  674. u_int8_t *bp;
  675. rectype = DB_txn_child;
  676. if (txnid != NULL &&
  677.     TAILQ_FIRST(&txnid->kids) != NULL &&
  678.     (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
  679. return (ret);
  680. txn_num = txnid == NULL ? 0 : txnid->txnid;
  681. if (txnid == NULL) {
  682. ZERO_LSN(null_lsn);
  683. lsnp = &null_lsn;
  684. } else
  685. lsnp = &txnid->last_lsn;
  686. logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
  687.     + sizeof(child)
  688.     + sizeof(*c_lsn);
  689. if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
  690. return (ret);
  691. bp = logrec.data;
  692. memcpy(bp, &rectype, sizeof(rectype));
  693. bp += sizeof(rectype);
  694. memcpy(bp, &txn_num, sizeof(txn_num));
  695. bp += sizeof(txn_num);
  696. memcpy(bp, lsnp, sizeof(DB_LSN));
  697. bp += sizeof(DB_LSN);
  698. memcpy(bp, &child, sizeof(child));
  699. bp += sizeof(child);
  700. if (c_lsn != NULL)
  701. memcpy(bp, c_lsn, sizeof(*c_lsn));
  702. else
  703. memset(bp, 0, sizeof(*c_lsn));
  704. bp += sizeof(*c_lsn);
  705. DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
  706. ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
  707. if (txnid != NULL)
  708. txnid->last_lsn = *ret_lsnp;
  709. __os_free(logrec.data, logrec.size);
  710. return (ret);
  711. }
  712. int
  713. __txn_child_print(dbenv, dbtp, lsnp, notused2, notused3)
  714. DB_ENV *dbenv;
  715. DBT *dbtp;
  716. DB_LSN *lsnp;
  717. db_recops notused2;
  718. void *notused3;
  719. {
  720. __txn_child_args *argp;
  721. u_int32_t i;
  722. u_int ch;
  723. int ret;
  724. i = 0;
  725. ch = 0;
  726. notused2 = DB_TXN_ABORT;
  727. notused3 = NULL;
  728. if ((ret = __txn_child_read(dbenv, dbtp->data, &argp)) != 0)
  729. return (ret);
  730. printf("[%lu][%lu]txn_child: rec: %lu txnid %lx prevlsn [%lu][%lu]n",
  731.     (u_long)lsnp->file,
  732.     (u_long)lsnp->offset,
  733.     (u_long)argp->type,
  734.     (u_long)argp->txnid->txnid,
  735.     (u_long)argp->prev_lsn.file,
  736.     (u_long)argp->prev_lsn.offset);
  737. printf("tchild: 0x%lxn", (u_long)argp->child);
  738. printf("tc_lsn: [%lu][%lu]n",
  739.     (u_long)argp->c_lsn.file, (u_long)argp->c_lsn.offset);
  740. printf("n");
  741. __os_free(argp, 0);
  742. return (0);
  743. }
  744. int
  745. __txn_child_read(dbenv, recbuf, argpp)
  746. DB_ENV *dbenv;
  747. void *recbuf;
  748. __txn_child_args **argpp;
  749. {
  750. __txn_child_args *argp;
  751. u_int8_t *bp;
  752. int ret;
  753. ret = __os_malloc(dbenv, sizeof(__txn_child_args) +
  754.     sizeof(DB_TXN), NULL, &argp);
  755. if (ret != 0)
  756. return (ret);
  757. argp->txnid = (DB_TXN *)&argp[1];
  758. bp = recbuf;
  759. memcpy(&argp->type, bp, sizeof(argp->type));
  760. bp += sizeof(argp->type);
  761. memcpy(&argp->txnid->txnid,  bp, sizeof(argp->txnid->txnid));
  762. bp += sizeof(argp->txnid->txnid);
  763. memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
  764. bp += sizeof(DB_LSN);
  765. memcpy(&argp->child, bp, sizeof(argp->child));
  766. bp += sizeof(argp->child);
  767. memcpy(&argp->c_lsn, bp,  sizeof(argp->c_lsn));
  768. bp += sizeof(argp->c_lsn);
  769. *argpp = argp;
  770. return (0);
  771. }
  772. int
  773. __txn_init_print(dbenv)
  774. DB_ENV *dbenv;
  775. {
  776. int ret;
  777. if ((ret = __db_add_recovery(dbenv,
  778.     __txn_old_regop_print, DB_txn_old_regop)) != 0)
  779. return (ret);
  780. if ((ret = __db_add_recovery(dbenv,
  781.     __txn_regop_print, DB_txn_regop)) != 0)
  782. return (ret);
  783. if ((ret = __db_add_recovery(dbenv,
  784.     __txn_old_ckp_print, DB_txn_old_ckp)) != 0)
  785. return (ret);
  786. if ((ret = __db_add_recovery(dbenv,
  787.     __txn_ckp_print, DB_txn_ckp)) != 0)
  788. return (ret);
  789. if ((ret = __db_add_recovery(dbenv,
  790.     __txn_xa_regop_old_print, DB_txn_xa_regop_old)) != 0)
  791. return (ret);
  792. if ((ret = __db_add_recovery(dbenv,
  793.     __txn_xa_regop_print, DB_txn_xa_regop)) != 0)
  794. return (ret);
  795. if ((ret = __db_add_recovery(dbenv,
  796.     __txn_child_old_print, DB_txn_child_old)) != 0)
  797. return (ret);
  798. if ((ret = __db_add_recovery(dbenv,
  799.     __txn_child_print, DB_txn_child)) != 0)
  800. return (ret);
  801. return (0);
  802. }
  803. int
  804. __txn_init_recover(dbenv)
  805. DB_ENV *dbenv;
  806. {
  807. int ret;
  808. if ((ret = __db_add_recovery(dbenv,
  809.     __deprecated_recover, DB_txn_old_regop)) != 0)
  810. return (ret);
  811. if ((ret = __db_add_recovery(dbenv,
  812.     __txn_regop_recover, DB_txn_regop)) != 0)
  813. return (ret);
  814. if ((ret = __db_add_recovery(dbenv,
  815.     __deprecated_recover, DB_txn_old_ckp)) != 0)
  816. return (ret);
  817. if ((ret = __db_add_recovery(dbenv,
  818.     __txn_ckp_recover, DB_txn_ckp)) != 0)
  819. return (ret);
  820. if ((ret = __db_add_recovery(dbenv,
  821.     __deprecated_recover, DB_txn_xa_regop_old)) != 0)
  822. return (ret);
  823. if ((ret = __db_add_recovery(dbenv,
  824.     __txn_xa_regop_recover, DB_txn_xa_regop)) != 0)
  825. return (ret);
  826. if ((ret = __db_add_recovery(dbenv,
  827.     __deprecated_recover, DB_txn_child_old)) != 0)
  828. return (ret);
  829. if ((ret = __db_add_recovery(dbenv,
  830.     __txn_child_recover, DB_txn_child)) != 0)
  831. return (ret);
  832. return (0);
  833. }