Koji perm_id cache

This commit is contained in:
Neha Prasad
2017-07-07 12:37:17 -04:00
parent 93092a43be
commit 5ff58867f4
3 changed files with 54 additions and 1 deletions

View File

@@ -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)

View 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):

View 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
}