summaryrefslogtreecommitdiff
path: root/zuul/driver/gerrit
diff options
context:
space:
mode:
authorJames E. Blair <jim@acmegating.com>2021-09-23 19:29:05 -0700
committerJames E. Blair <jim@acmegating.com>2021-09-24 13:48:37 -0700
commitc4268b1b46e0dc4b5380f0c8b37a9b8b21c377ec (patch)
tree5aab8c1469f139f6567de9fb3b385cad6e6ab264 /zuul/driver/gerrit
parent27b677df914abfbc145c03549a9caff54b093316 (diff)
downloadzuul-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.py27
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)