Merge pull request #1897 from coreos-inc/hash-executor-whitelist
Add hash-based staged rollout to build executors
This commit is contained in:
commit
0c2b4ed9c1
1 changed files with 15 additions and 4 deletions
|
@ -9,6 +9,7 @@ import trollius
|
||||||
import datetime
|
import datetime
|
||||||
import release
|
import release
|
||||||
import socket
|
import socket
|
||||||
|
import hashlib
|
||||||
|
|
||||||
from jinja2 import FileSystemLoader, Environment
|
from jinja2 import FileSystemLoader, Environment
|
||||||
from trollius import coroutine, From, Return, get_event_loop
|
from trollius import coroutine, From, Return, get_event_loop
|
||||||
|
@ -69,11 +70,21 @@ class BuilderExecutor(object):
|
||||||
|
|
||||||
def allowed_for_namespace(self, namespace):
|
def allowed_for_namespace(self, namespace):
|
||||||
""" Returns true if this executor can be used for builds in the given namespace. """
|
""" Returns true if this executor can be used for builds in the given namespace. """
|
||||||
namespace_whitelist = self.executor_config.get('NAMESPACE_WHITELIST')
|
|
||||||
if namespace_whitelist is not None:
|
|
||||||
return namespace in namespace_whitelist
|
|
||||||
|
|
||||||
return True
|
# Check for an explicit namespace whitelist.
|
||||||
|
namespace_whitelist = self.executor_config.get('NAMESPACE_WHITELIST')
|
||||||
|
if namespace_whitelist is not None and namespace in namespace_whitelist:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Check for a staged rollout percentage. If found, we hash the namespace and, if it is found
|
||||||
|
# in the first X% of the character space, we allow this executor to be used.
|
||||||
|
staged_rollout = self.executor_config.get('STAGED_ROLLOUT')
|
||||||
|
if staged_rollout is not None:
|
||||||
|
bucket = int(hashlib.sha256(namespace).hexdigest()[-2:], 16)
|
||||||
|
return bucket < (256 * staged_rollout)
|
||||||
|
|
||||||
|
# If there are no restrictions in place, we are free to use this executor.
|
||||||
|
return staged_rollout is None and namespace_whitelist is None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def minimum_retry_threshold(self):
|
def minimum_retry_threshold(self):
|
||||||
|
|
Reference in a new issue