Browse Source

Reland "git-cache: contains_revision returns False if sentient file exists"

This reverts commit 550706e9f4a39b00e39fe4d46ebea2bd26eb24de.

Reason for revert: https://crrev.com/c/6497038 was landed to make a fix for the lock failure.

Bug: 41488725
Original change's description:
> Revert "git-cache: contains_revision returns False if sentient file exists"
>
> This reverts commit 5a267a66a61fa3baa1c8326523bc54f48a50fcd9.
>
> Reason for revert: Causing gclient sync failures: https://ci.chromium.org/ui/p/chromeos/builders/staging/staging-amd64-generic-msan-fuzzer/b8716255278944170913
>
> Bug: 41488725
> Original change's description:
> > git-cache: contains_revision returns False if sentient file exists
> >
> > If git_cache.populate() gets interrupted midway, it can possibly leave
> > a git mirror in a state where only some commits are available. Cloning
> > such a repo results in an empty repository and causes subsequent git
> > checkout to fail.
> >
> > If the sentient file exists, it indicates that the bootstrapping
> > process was interrupted. This CL updates git_cache.contains_revision()
> > such that it returns False if the sentient file exists. Then,
> > the caller can call mirror.populate() to re-populate the repo/rev.
> >
> > Bug: 41488725
> > Change-Id: I24fd24e300f5a9f9349589496d6b5f3dacf71fd2
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6491733
> > Reviewed-by: Gavin Mak <gavinmak@google.com>
> > Commit-Queue: Scott Lee <ddoman@chromium.org>
> > Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
>
> Bug: 41488725
> Change-Id: I50f3ce5f0b6802db5969546d43a4fe1ab2dcf3c0
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6497449
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Commit-Queue: Scott Lee <ddoman@chromium.org>
> Reviewed-by: Scott Lee <ddoman@chromium.org>
> Auto-Submit: Andrew Lamb <andrewlamb@chromium.org>

Bug: 41488725
Change-Id: Ia74db70be221f7cdf0960632644162bb3d39e5e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6507483
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Scott Lee <ddoman@chromium.org>
Scott Lee 3 months ago
parent
commit
8a150ad9d7
1 changed files with 8 additions and 0 deletions
  1. 8 0
      git_cache.py

+ 8 - 0
git_cache.py

@@ -317,6 +317,14 @@ class Mirror(object):
         if not self.exists():
             return False
 
+        # If the cache population is in progress, this will raise LockError().
+        with lockfile.lock(self.mirror_path, timeout=0):
+            # If the sentinent file exists at this point, it indicates that
+            # the bootstrapping process was interrupted, leaving the cache
+            # entries in a bad state.
+            if os.path.isfile(self._init_sentient_file):
+                return False
+
         if sys.platform.startswith('win'):
             # Windows .bat scripts use ^ as escape sequence, which means we have
             # to escape it with itself for every .bat invocation.