diff options
author | James E. Blair <jim@acmegating.com> | 2021-09-23 19:29:05 -0700 |
---|---|---|
committer | James E. Blair <jim@acmegating.com> | 2021-09-24 13:48:37 -0700 |
commit | c4268b1b46e0dc4b5380f0c8b37a9b8b21c377ec (patch) | |
tree | 5aab8c1469f139f6567de9fb3b385cad6e6ab264 /zuul/driver/gerrit | |
parent | 27b677df914abfbc145c03549a9caff54b093316 (diff) | |
download | zuul-c4268b1b46e0dc4b5380f0c8b37a9b8b21c377ec.tar.gz |
Use structured change cache keys
This adds a ChangeKey class which is essentially a structured universal
identifier for a change-like object (Ref, Branch, Change, PR, whatever).
We can use this in ZK objects to reference changes, and by doing so, we
can in many cases avoid actually referencing the change objects
themselves.
This also updates the actual keys in ZK to be sha256sums of the structured
key (for brevity and simplicity of encoding).
Change-Id: I6cd62973d48ad3515f6aa8a8172b9e9c19fcda55
Diffstat (limited to 'zuul/driver/gerrit')
-rw-r--r-- | zuul/driver/gerrit/gerritconnection.py | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/zuul/driver/gerrit/gerritconnection.py b/zuul/driver/gerrit/gerritconnection.py index 7b7107b92..bf71aba1f 100644 --- a/zuul/driver/gerrit/gerritconnection.py +++ b/zuul/driver/gerrit/gerritconnection.py @@ -42,7 +42,11 @@ from zuul.driver.gerrit.gerritmodel import GerritChange, GerritTriggerEvent from zuul.driver.git.gitwatcher import GitWatcher from zuul.lib.logutil import get_annotated_logger from zuul.model import Ref, Tag, Branch, Project -from zuul.zk.change_cache import AbstractChangeCache, ConcurrentUpdateError +from zuul.zk.change_cache import ( + AbstractChangeCache, + ChangeKey, + ConcurrentUpdateError, +) from zuul.zk.event_queues import ConnectionEventQueue, EventReceiverElection # HTTP timeout in seconds @@ -311,7 +315,9 @@ class GerritEventConnector(threading.Thread): # cache as it may be a dependency if event.change_number: refresh = True - key = str((event.change_number, event.patch_number)) + key = ChangeKey(self.connection.connection_name, None, + 'GerritChange', str(event.change_number), + str(event.patch_number)) if self.connection._change_cache.get(key) is None: refresh = False for tenant in self.connection.sched.abide.tenants.values(): @@ -760,7 +766,8 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): # Ensure number and patchset are str number = str(number) patchset = str(patchset) - key = str((number, patchset)) + key = ChangeKey(self.connection_name, None, + 'GerritChange', number, patchset) change = self._change_cache.get(key) if change and not refresh: return change @@ -776,7 +783,8 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): def _getTag(self, event): tag = event.ref[len('refs/tags/'):] - key = str((event.project_name, tag, event.newrev)) + key = ChangeKey(self.connection_name, None, + 'Tag', tag, event.newrev) change = self._change_cache.get(key) if change: return change @@ -794,7 +802,8 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): return change def _getBranch(self, event, branch, ref): - key = str((event.project_name, branch, event.newrev)) + key = ChangeKey(self.connection_name, None, + 'Branch', branch, event.newrev) change = self._change_cache.get(key) if change: return change @@ -812,7 +821,8 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): return change def _getRef(self, event): - key = str((event.project_name, event.ref, event.newrev)) + key = ChangeKey(self.connection_name, None, + 'Ref', event.ref, event.newrev) change = self._change_cache.get(key) if change: return change @@ -856,6 +866,7 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): result.message): if match != change_id: continue + # Note: This is not a ChangeCache ChangeKey key = (result.number, result.current_patchset) if key in seen: continue @@ -992,7 +1003,9 @@ class GerritConnection(ZKChangeCacheMixin, BaseConnection): return True data = self.queryChange(change.number) - key = str((change.number, change.patchset)) + key = ChangeKey(self.connection_name, None, + 'GerritChange', str(change.number), + str(change.patchset)) def _update_change(c): c.update(data, self) |