From: Nathan Bossart Date: Wed, 19 Jul 2023 15:54:00 -0700 Subject: [PATCH v2 1/4] misc binaryheap fixes --- src/backend/postmaster/pgarch.c | 12 ++++++------ src/backend/replication/logical/reorderbuffer.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 46af349564..c28e6f2070 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -108,7 +108,7 @@ static ArchiveModuleState *archive_module_state; * archive_status. Minimizing the number of directory scans when there are * many files to archive can significantly improve archival rate. * - * arch_heap is a max-heap that is used during the directory scan to track + * arch_heap is a min-heap that is used during the directory scan to track * the highest-priority files to archive. After the directory scan * completes, the file names are stored in ascending order of priority in * arch_files. pgarch_readyXlog() returns files from arch_files until it @@ -248,7 +248,7 @@ PgArchiverMain(void) arch_files = palloc(sizeof(struct arch_files_state)); arch_files->arch_files_size = 0; - /* Initialize our max-heap for prioritizing files to archive. */ + /* Initialize our min-heap for prioritizing files to archive. */ arch_files->arch_heap = binaryheap_allocate(NUM_FILES_PER_DIRECTORY_SCAN, ready_file_comparator, NULL); @@ -624,7 +624,7 @@ pgarch_readyXlog(char *xlog) basename[basenamelen] = '\0'; /* - * Store the file in our max-heap if it has a high enough priority. + * Store the file in our min-heap if it has a high enough priority. */ if (arch_files->arch_heap->bh_size < NUM_FILES_PER_DIRECTORY_SCAN) { @@ -644,15 +644,15 @@ pgarch_readyXlog(char *xlog) * Remove the lowest priority file and add the current one to the * heap. */ - arch_file = DatumGetCString(binaryheap_remove_first(arch_files->arch_heap)); + arch_file = DatumGetCString(binaryheap_first(arch_files->arch_heap)); strcpy(arch_file, basename); - binaryheap_add(arch_files->arch_heap, CStringGetDatum(arch_file)); + binaryheap_replace_first(arch_files->arch_heap, CStringGetDatum(arch_file)); } } FreeDir(rldir); /* If no files were found, simply return. */ - if (arch_files->arch_heap->bh_size == 0) + if (binaryheap_empty(arch_files->arch_heap)) return false; /* diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 26d252bd87..05bbcecd29 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1381,7 +1381,7 @@ ReorderBufferIterTXNNext(ReorderBuffer *rb, ReorderBufferIterTXNState *state) int32 off; /* nothing there anymore */ - if (state->heap->bh_size == 0) + if (binaryheap_empty(state->heap)) return NULL; off = DatumGetInt32(binaryheap_first(state->heap)); -- 2.25.1 --qDbXVdCdHGoSgWSk Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v2-0002-make-binaryheap-available-to-frontend.patch"