mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-04 03:08:21 +08:00
Koji perm_id cache
This commit is contained in:
@@ -30,6 +30,7 @@ import tempfile
|
||||
import glob
|
||||
import datetime
|
||||
import time
|
||||
import dogpile.cache
|
||||
import random
|
||||
import string
|
||||
import kobo.rpmlib
|
||||
@@ -56,6 +57,7 @@ class KojiModuleBuilder(GenericBuilder):
|
||||
|
||||
backend = "koji"
|
||||
_build_lock = threading.Lock()
|
||||
newRegion = make_region().configure("dogpile.cache.memory")
|
||||
|
||||
@module_build_service.utils.validate_koji_tag('tag_name')
|
||||
def __init__(self, owner, module, config, tag_name, components):
|
||||
@@ -90,6 +92,10 @@ class KojiModuleBuilder(GenericBuilder):
|
||||
return "<KojiModuleBuilder module: %s, tag: %s>" % (
|
||||
self.module_str, self.tag_name)
|
||||
|
||||
@dogpile.cache.memory.cache_on_arguments()
|
||||
def getPerms(self):
|
||||
return dict([(p['name'], p['id']) for p in self.koji_session.getAllPerms()])
|
||||
|
||||
@module_build_service.utils.retry(wait_on=(IOError, koji.GenericError))
|
||||
def buildroot_ready(self, artifacts=None):
|
||||
"""
|
||||
@@ -598,7 +604,8 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules
|
||||
if taginfo['locked']:
|
||||
raise SystemError("Tag %s: master lock already set. Can't edit tag" % taginfo['name'])
|
||||
|
||||
perm_ids = dict([(p['name'], p['id']) for p in self.koji_session.getAllPerms()])
|
||||
perm_ids = self.getPerms()
|
||||
|
||||
if perm not in perm_ids:
|
||||
raise ValueError("Unknown permissions %s" % perm)
|
||||
|
||||
|
||||
22
module_build_service/builder/koji_cache.py
Normal file
22
module_build_service/builder/koji_cache.py
Normal file
@@ -0,0 +1,22 @@
|
||||
import dogpile.cache
|
||||
from KojiModuleBuilder import KojiModuleBuilder
|
||||
import pylibmc
|
||||
import koji
|
||||
|
||||
#set up CacheRegion
|
||||
koji_perm_ids = pylibmc.Client(["127.0.0.1"], binary=True,
|
||||
behaviors={"tcp_nodelay": True,
|
||||
"ketama": True})
|
||||
|
||||
region = make_region().configure(
|
||||
'koji_perm_ids.pylibmc',
|
||||
arguments = {
|
||||
'url': ["127.0.0.1"],
|
||||
}
|
||||
)
|
||||
|
||||
@region.cache_on_arguments()
|
||||
def generate_perm_id(perm):
|
||||
|
||||
|
||||
|
||||
24
module_build_service/builder/setup_memcache.py
Normal file
24
module_build_service/builder/setup_memcache.py
Normal file
@@ -0,0 +1,24 @@
|
||||
/*set up memcache server for koji perm_ids*/
|
||||
|
||||
my $memclient = Cache::Memcached->new({ servers => [ '10.0.0.10:11211', '10.0.0.11:11211' ]});
|
||||
memcli = new Memcache
|
||||
memcli:add_server('10.0.0.10:11211')
|
||||
|
||||
sql = "SELECT * FROM user WHERE user_id = ?"
|
||||
key = 'SQL:' . user_id . ':' . md5sum(sql)
|
||||
|
||||
if (defined result = memcli:get(key)) {
|
||||
return result
|
||||
} else {
|
||||
handler = run_sql(sql, user_id)
|
||||
|
||||
# Often what you get back when executing SQL is a special handler
|
||||
# object. You can't directly cache this. Stick to strings, arrays,
|
||||
# and hashes/dictionaries/tables
|
||||
rows_array = handler:turn_into_an_array
|
||||
|
||||
# Cache it for five minutes
|
||||
memcli:set(key, rows_array, 5 * 60)
|
||||
|
||||
return rows_array
|
||||
}
|
||||
Reference in New Issue
Block a user