Skip to content
Permalink
Browse files

Merge pull request #2198 from dscho/avoid-commit-graph-lock-contention

Avoid commit-graph lock contention
  • Loading branch information...
dscho committed May 19, 2019
2 parents 898cf27 + 441bb2d commit 69e7a4cd2fba6d75062445e5c8ad383ab29ddeb0
Showing with 21 additions and 18 deletions.
  1. +1 −1 builtin/am.c
  2. +1 −1 builtin/clone.c
  3. +1 −1 builtin/fetch.c
  4. +2 −2 builtin/gc.c
  5. +1 −1 builtin/merge.c
  6. +1 −1 builtin/rebase.c
  7. +1 −1 builtin/receive-pack.c
  8. +1 −1 builtin/repack.c
  9. +4 −4 commit-graph.c
  10. +1 −1 commit-graph.h
  11. +1 −1 object.c
  12. +4 −1 packfile.c
  13. +1 −1 packfile.h
  14. +1 −1 upload-pack.c
@@ -1800,7 +1800,7 @@ static void am_run(struct am_state *state, int resume)
*/
if (!state->rebasing) {
am_destroy(state);
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
}
}
@@ -1243,7 +1243,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
transport_disconnect(transport);

if (option_dissociate) {
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
dissociate_from_references();
}

@@ -1672,7 +1672,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)

string_list_clear(&list, 0);

close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);

argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
if (verbosity < 0)
@@ -632,7 +632,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
gc_before_repack();

if (!repository_format_precious_objects) {
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
if (run_command_v_opt(repack.argv, RUN_GIT_CMD))
die(FAILED_RUN, repack.argv[0]);

@@ -660,7 +660,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
report_garbage = report_pack_garbage;
reprepare_packed_git(the_repository);
if (pack_garbage.nr > 0) {
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
clean_pack_garbage();
}

@@ -449,7 +449,7 @@ static void finish(struct commit *head_commit,
* We ignore errors in 'gc --auto', since the
* user should see them.
*/
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
}
}
@@ -328,7 +328,7 @@ static int finish_rebase(struct rebase_options *opts)

delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
apply_autostash(opts);
close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
/*
* We ignore errors in 'gc --auto', since the
* user should see them.
@@ -2032,7 +2032,7 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
proc.git_cmd = 1;
proc.argv = argv_gc_auto;

close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);
if (!start_command(&proc)) {
if (use_sideband)
copy_to_sideband(proc.err, -1, NULL);
@@ -419,7 +419,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
if (!names.nr && !po_args.quiet)
printf_ln(_("Nothing new to pack."));

close_all_packs(the_repository->objects);
close_object_store(the_repository->objects);

/*
* Ok we have prepared all new packfiles.
@@ -305,10 +305,10 @@ int generation_numbers_enabled(struct repository *r)
return !!first_generation;
}

void close_commit_graph(struct repository *r)
void close_commit_graph(struct raw_object_store *o)
{
free_commit_graph(r->objects->commit_graph);
r->objects->commit_graph = NULL;
free_commit_graph(o->commit_graph);
o->commit_graph = NULL;
}

static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos)
@@ -1049,7 +1049,7 @@ void write_commit_graph(const char *obj_dir,
stop_progress(&progress);
strbuf_release(&progress_title);

close_commit_graph(the_repository);
close_commit_graph(the_repository->objects);
finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
commit_lock_file(&lk);

@@ -72,7 +72,7 @@ void write_commit_graph(const char *obj_dir,

int verify_commit_graph(struct repository *r, struct commit_graph *g);

void close_commit_graph(struct repository *);
void close_commit_graph(struct raw_object_store *);
void free_commit_graph(struct commit_graph *);

#endif
@@ -517,7 +517,7 @@ void raw_object_store_clear(struct raw_object_store *o)
o->loaded_alternates = 0;

INIT_LIST_HEAD(&o->packed_git_mru);
close_all_packs(o);
close_object_store(o);
o->packed_git = NULL;
}

@@ -16,6 +16,7 @@
#include "tree.h"
#include "object-store.h"
#include "midx.h"
#include "commit-graph.h"

char *odb_pack_name(struct strbuf *buf,
const unsigned char *sha1,
@@ -336,7 +337,7 @@ void close_pack(struct packed_git *p)
close_pack_index(p);
}

void close_all_packs(struct raw_object_store *o)
void close_object_store(struct raw_object_store *o)
{
struct packed_git *p;

@@ -350,6 +351,8 @@ void close_all_packs(struct raw_object_store *o)
close_midx(o->multi_pack_index);
o->multi_pack_index = NULL;
}

close_commit_graph(o);
}

/*
@@ -81,7 +81,7 @@ extern uint32_t get_pack_fanout(struct packed_git *p, uint32_t value);
extern unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned long *);
extern void close_pack_windows(struct packed_git *);
extern void close_pack(struct packed_git *);
extern void close_all_packs(struct raw_object_store *o);
extern void close_object_store(struct raw_object_store *o);
extern void unuse_pack(struct pack_window **);
extern void clear_delta_base_cache(void);
extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
@@ -717,7 +717,7 @@ static void deepen_by_rev_list(struct packet_writer *writer, int ac,
{
struct commit_list *result;

close_commit_graph(the_repository);
close_commit_graph(the_repository->objects);
result = get_shallow_commits_by_rev_list(ac, av, SHALLOW, NOT_SHALLOW);
send_shallow(writer, result);
free_commit_list(result);

0 comments on commit 69e7a4c

Please sign in to comment.
You can’t perform that action at this time.