From: Ayush Chandekar <ayu.chandekar@gmail.com>
To: git@vger.kernel.org
Subject: [PATCH 1/2] midx: show progress during QSORT operation
Date: Mon, 10 Feb 2025 13:16:22 +0530 [thread overview]
Message-ID: <20250210074623.136599-2-ayu.chandekar@gmail.com> (raw)
In-Reply-To: <20250210074623.136599-1-ayu.chandekar@gmail.com>
Add progress reporting during the QSORT operation in multi-pack-index
verification. This helps users track the progress of large sorting
operations.
In previous versions, the progress would jump directly from 0% to 100%
without any intermediate updates.
Signed-off-by: Ayush Chandekar <ayu.chandekar@gmail.com>
---
midx.c | 43 +++++++++++++++++++++++++++++--------------
1 file changed, 29 insertions(+), 14 deletions(-)
diff --git a/midx.c b/midx.c
index d91088efb8..69937f5ca8 100644
--- a/midx.c
+++ b/midx.c
@@ -14,6 +14,7 @@
#include "pack-bitmap.h"
#include "pack-revindex.h"
+
int midx_checksum_valid(struct multi_pack_index *m);
void clear_midx_files_ext(const char *object_dir, const char *ext,
const char *keep_hash);
@@ -853,32 +854,43 @@ static void midx_report(const char *fmt, ...)
va_end(ap);
}
+/*
+ * Limit calls to display_progress() for performance reasons.
+ * The interval here was arbitrarily chosen.
+ */
+#define SPARSE_PROGRESS_INTERVAL (1 << 12)
+#define midx_display_sparse_progress(progress, n) \
+ do { \
+ uint64_t _n = (n); \
+ if ((_n & (SPARSE_PROGRESS_INTERVAL - 1)) == 0) \
+ display_progress(progress, _n); \
+ } while (0)
+
struct pair_pos_vs_id
{
uint32_t pos;
uint32_t pack_int_id;
};
+static struct progress *sort_progress;
+static uint64_t last_max_pos;
+
static int compare_pair_pos_vs_id(const void *_a, const void *_b)
{
struct pair_pos_vs_id *a = (struct pair_pos_vs_id *)_a;
struct pair_pos_vs_id *b = (struct pair_pos_vs_id *)_b;
+
+ if (sort_progress) {
+ uint64_t max_pos = (a->pos > b->pos) ? a->pos : b->pos;
+ if (max_pos > last_max_pos) {
+ last_max_pos = max_pos;
+ midx_display_sparse_progress(sort_progress, last_max_pos);
+ }
+ }
return b->pack_int_id - a->pack_int_id;
}
-/*
- * Limit calls to display_progress() for performance reasons.
- * The interval here was arbitrarily chosen.
- */
-#define SPARSE_PROGRESS_INTERVAL (1 << 12)
-#define midx_display_sparse_progress(progress, n) \
- do { \
- uint64_t _n = (n); \
- if ((_n & (SPARSE_PROGRESS_INTERVAL - 1)) == 0) \
- display_progress(progress, _n); \
- } while (0)
-
int verify_midx_file(struct repository *r, const char *object_dir, unsigned flags)
{
struct pair_pos_vs_id *pairs = NULL;
@@ -960,12 +972,15 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag
pairs[i].pack_int_id = nth_midxed_pack_int_id(m, i);
}
- if (flags & MIDX_PROGRESS)
+ if (flags & MIDX_PROGRESS) {
progress = start_sparse_progress(r,
_("Sorting objects by packfile"),
m->num_objects);
- display_progress(progress, 0); /* TODO: Measure QSORT() progress */
+ last_max_pos = 0;
+ sort_progress = progress;
+ }
QSORT(pairs, m->num_objects, compare_pair_pos_vs_id);
+ sort_progress = NULL;
stop_progress(&progress);
if (flags & MIDX_PROGRESS)
--
2.48.GIT
next prev parent reply other threads:[~2025-02-10 7:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-10 7:46 [GSOC][RFC PATCH 0/2] midx: implement progress reporting for QSORT operation Ayush Chandekar
2025-02-10 7:46 ` Ayush Chandekar [this message]
2025-02-10 16:55 ` [PATCH 1/2] midx: show progress during " Junio C Hamano
2025-02-11 12:23 ` Ayush Chandekar
2025-02-11 16:29 ` Junio C Hamano
2025-02-10 7:46 ` [PATCH 2/2] t5319: add test for MIDX QSORT progress reporting Ayush Chandekar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250210074623.136599-2-ayu.chandekar@gmail.com \
--to=ayu.chandekar@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).