mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-11-01 03:48:57 +08:00 
			
		
		
		
	mdbx: minor refine internal audit.
Change-Id: I0e177e9c9ecf1da97084c175f80b3e987391194c
This commit is contained in:
		
							
								
								
									
										35
									
								
								src/core.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								src/core.c
									
									
									
									
									
								
							| @@ -8437,9 +8437,8 @@ int mdbx_txn_abort(MDBX_txn *txn) { | ||||
|   return mdbx_txn_end(txn, MDBX_END_ABORT | MDBX_END_SLOT | MDBX_END_FREE); | ||||
| } | ||||
|  | ||||
| /* Count all the pages in each DB and in the freelist and make sure | ||||
|  * it matches the actual number of pages being used. | ||||
|  * All named DBs must be open for a correct count. */ | ||||
| /* Count all the pages in each DB and in the GC and make sure | ||||
|  * it matches the actual number of pages being used. */ | ||||
| static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|                                 bool dont_filter_gc) { | ||||
|   pgno_t pending = 0; | ||||
| @@ -8453,7 +8452,7 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|   if (unlikely(rc != MDBX_SUCCESS)) | ||||
|     return rc; | ||||
|  | ||||
|   pgno_t freecount = 0; | ||||
|   pgno_t gc = 0; | ||||
|   MDBX_val key, data; | ||||
|   while ((rc = mdbx_cursor_get(&cx.outer, &key, &data, MDBX_NEXT)) == 0) { | ||||
|     if (!dont_filter_gc) { | ||||
| @@ -8468,7 +8467,7 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|         goto skip; | ||||
|     } | ||||
|  | ||||
|     freecount += *(pgno_t *)data.iov_base; | ||||
|     gc += *(pgno_t *)data.iov_base; | ||||
|   skip:; | ||||
|   } | ||||
|   mdbx_tassert(txn, rc == MDBX_NOTFOUND); | ||||
| @@ -8476,7 +8475,7 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|   for (MDBX_dbi i = FREE_DBI; i < txn->mt_numdbs; i++) | ||||
|     txn->mt_dbistate[i] &= ~DBI_AUDITED; | ||||
|  | ||||
|   pgno_t count = 0; | ||||
|   pgno_t used = NUM_METAS; | ||||
|   for (MDBX_dbi i = FREE_DBI; i <= MAIN_DBI; i++) { | ||||
|     if (!(txn->mt_dbistate[i] & DBI_VALID)) | ||||
|       continue; | ||||
| @@ -8486,8 +8485,8 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|     txn->mt_dbistate[i] |= DBI_AUDITED; | ||||
|     if (txn->mt_dbs[i].md_root == P_INVALID) | ||||
|       continue; | ||||
|     count += txn->mt_dbs[i].md_branch_pages + txn->mt_dbs[i].md_leaf_pages + | ||||
|              txn->mt_dbs[i].md_overflow_pages; | ||||
|     used += txn->mt_dbs[i].md_branch_pages + txn->mt_dbs[i].md_leaf_pages + | ||||
|             txn->mt_dbs[i].md_overflow_pages; | ||||
|  | ||||
|     if (i != MAIN_DBI) | ||||
|       continue; | ||||
| @@ -8515,7 +8514,7 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|           count += | ||||
|           used += | ||||
|               db->md_branch_pages + db->md_leaf_pages + db->md_overflow_pages; | ||||
|         } | ||||
|       } | ||||
| @@ -8530,8 +8529,8 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|       continue; | ||||
|     for (MDBX_txn *t = txn; t; t = t->mt_parent) | ||||
|       if (F_ISSET(t->mt_dbistate[i], DBI_DIRTY | DBI_CREAT)) { | ||||
|         count += t->mt_dbs[i].md_branch_pages + t->mt_dbs[i].md_leaf_pages + | ||||
|                  t->mt_dbs[i].md_overflow_pages; | ||||
|         used += t->mt_dbs[i].md_branch_pages + t->mt_dbs[i].md_leaf_pages + | ||||
|                 t->mt_dbs[i].md_overflow_pages; | ||||
|         txn->mt_dbistate[i] |= DBI_AUDITED; | ||||
|         break; | ||||
|       } | ||||
| @@ -8545,21 +8544,21 @@ static __cold int mdbx_audit_ex(MDBX_txn *txn, unsigned retired_stored, | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (pending + freecount + count + NUM_METAS == txn->mt_next_pgno) | ||||
|   if (pending + gc + used == txn->mt_next_pgno) | ||||
|     return MDBX_SUCCESS; | ||||
|  | ||||
|   if ((txn->mt_flags & MDBX_TXN_RDONLY) == 0) | ||||
|     mdbx_error("audit @%" PRIaTXN ": %u(pending) = %u(loose-count) + " | ||||
|                "%u(reclaimed-list) + %u(retired-pending) - %u(retired-stored)", | ||||
|     mdbx_error("audit @%" PRIaTXN ": %u(pending) = %u(loose) + " | ||||
|                "%u(reclaimed) + %u(retired-pending) - %u(retired-stored)", | ||||
|                txn->mt_txnid, pending, txn->tw.loose_count, | ||||
|                MDBX_PNL_SIZE(txn->tw.reclaimed_pglist), | ||||
|                txn->tw.retired_pages ? MDBX_PNL_SIZE(txn->tw.retired_pages) : 0, | ||||
|                retired_stored); | ||||
|   mdbx_error("audit @%" PRIaTXN ": %" PRIaPGNO "(pending) + %" PRIaPGNO | ||||
|              "(free) + %" PRIaPGNO "(count) = %" PRIaPGNO | ||||
|              "(total) <> %" PRIaPGNO "(next-pgno)", | ||||
|              txn->mt_txnid, pending, freecount, count + NUM_METAS, | ||||
|              pending + freecount + count + NUM_METAS, txn->mt_next_pgno); | ||||
|              "(gc) + %" PRIaPGNO "(count) = %" PRIaPGNO "(total) <> %" PRIaPGNO | ||||
|              "(allocated)", | ||||
|              txn->mt_txnid, pending, gc, used, pending + gc + used, | ||||
|              txn->mt_next_pgno); | ||||
|   return MDBX_PROBLEM; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user