##// END OF EJS Templates
Don't create one big transaction when doing cache-keys cleanup....
Don't create one big transaction when doing cache-keys cleanup. Should improve locking issues with db transactions when purging large ammount of keys

File last commit:

r3700:3563bb7b merge default
r3977:7c84b383 default
Show More
__init__.py
130 lines | 3.8 KiB | text/x-python | PythonLexer
fidex corrent variables passed to dnconfig,...
r783 # -*- coding: utf-8 -*-
"""
code docs, updates
r903 rhodecode.lib.celerylib.__init__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fidex corrent variables passed to dnconfig,...
r783
celery libs for RhodeCode
source code cleanup: remove trailing white space, normalize file endings
r1203
fidex corrent variables passed to dnconfig,...
r783 :created_on: Nov 27, 2010
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
fidex corrent variables passed to dnconfig,...
r783 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
fidex corrent variables passed to dnconfig,...
r783 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
fidex corrent variables passed to dnconfig,...
r783 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
fidex corrent variables passed to dnconfig,...
r783
Celery is configured by the .ini files and run from paster now...
r776 import os
import sys
import socket
import traceback
import logging
fixes issue #197 Relative paths for pidlocks
r1354 from os.path import dirname as dn, join as jn
fixes #340 session cleanup for celery tasks
r1929 from pylons import config
Celery is configured by the .ini files and run from paster now...
r776
fidex corrent variables passed to dnconfig,...
r783 from hashlib import md5
from decorator import decorator
fixes for vcs 0.2.0and new slicing methods
r1082
Added VCS into rhodecode core for faster and easier deployments of new versions
r2007 from rhodecode.lib.vcs.utils.lazy import LazyProperty
Don't clear dbsessions when celery_eager is turned on
r2299 from rhodecode import CELERY_ON, CELERY_EAGER
utils/conf...
r2109 from rhodecode.lib.utils2 import str2bool, safe_str
fidex corrent variables passed to dnconfig,...
r783 from rhodecode.lib.pidlock import DaemonLock, LockHeld
fixes #340 session cleanup for celery tasks
r1929 from rhodecode.model import init_model
from rhodecode.model import meta
from rhodecode.model.db import Statistics, Repository, User
from sqlalchemy import engine_from_config
fidex corrent variables passed to dnconfig,...
r783
Another better solution for establishing connection with messaging broker in celery....
r1003 from celery.messaging import establish_connection
fixes for vcs 0.2.0and new slicing methods
r1082
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
- refactoring to overcome poor usage of global pylons config...
r1723
renamed project to rhodecode
r547 class ResultWrapper(object):
def __init__(self, task):
self.task = task
Celery is configured by the .ini files and run from paster now...
r776
renamed project to rhodecode
r547 @LazyProperty
def result(self):
return self.task
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264
renamed project to rhodecode
r547 def run_task(task, *args, **kwargs):
Mads Kiilerich
fix SyntaxWarning: name 'CELERY_ON' is used prior to global declaration
r3460 global CELERY_ON
Celery is configured by the .ini files and run from paster now...
r776 if CELERY_ON:
try:
fixed celery issues, default loader was not set as PylonsLoader
r1004 t = task.apply_async(args=args, kwargs=kwargs)
garden...
r1976 log.info('running task %s:%s' % (t.task_id, task))
Celery is configured by the .ini files and run from paster now...
r776 return t
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264
Celery is configured by the .ini files and run from paster now...
r776 except socket.error, e:
fixed Python2.5 socket error
r1414 if isinstance(e, IOError) and e.errno == 111:
Celery is configured by the .ini files and run from paster now...
r776 log.debug('Unable to connect to celeryd. Sync execution')
in case we turn on celery, and connection fails, set the global flag CELERY_ON to false, helps with odd...
r3427 CELERY_ON = False
Celery is configured by the .ini files and run from paster now...
r776 else:
log.error(traceback.format_exc())
except KeyError, e:
log.debug('Unable to connect to celeryd. Sync execution')
except Exception, e:
log.error(traceback.format_exc())
garden...
r1976 log.debug('executing task %s in sync mode' % task)
more error catching on celery run_task
r558 return ResultWrapper(task(*args, **kwargs))
renamed project to rhodecode
r547
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 def __get_lockkey(func, *fargs, **fkwargs):
params = list(fargs)
params.extend(['%s-%s' % ar for ar in fkwargs.items()])
func_name = str(func.__name__) if hasattr(func, '__name__') else str(func)
fixes issue #197 Relative paths for pidlocks
r1354 lockkey = 'task_%s.lock' % \
Fixed problems with unicode cache keys in celery
r1611 md5(func_name + '-' + '-'.join(map(safe_str, params))).hexdigest()
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 return lockkey
renamed project to rhodecode
r547 def locked_task(func):
def __wrapper(func, *fargs, **fkwargs):
moved locking of commit stats into the task itself to remove race conditions when lock was not removed before starting another task.
r1264 lockkey = __get_lockkey(func, *fargs, **fkwargs)
fixes #666 move lockkey path location to cache_dir to ensure this path is always writable for rhodecode server
r3055 lockkey_path = config['app_conf']['cache_dir']
fixes issue #197 Relative paths for pidlocks
r1354
garden...
r1976 log.info('running task with lockkey %s' % lockkey)
renamed project to rhodecode
r547 try:
fixes #258 RhodeCode 1.2 assumes egg folder is writable
r1540 l = DaemonLock(file_=jn(lockkey_path, lockkey))
renamed project to rhodecode
r547 ret = func(*fargs, **fkwargs)
l.release()
return ret
except LockHeld:
log.info('LockHeld')
Celery is configured by the .ini files and run from paster now...
r776 return 'Task with key %s already running' % lockkey
renamed project to rhodecode
r547
Celery is configured by the .ini files and run from paster now...
r776 return decorator(__wrapper, func)
fixes #340 session cleanup for celery tasks
r1929
def get_session():
if CELERY_ON:
engine = engine_from_config(config, 'sqlalchemy.db1.')
init_model(engine)
New repo model create function...
r2524 sa = meta.Session()
fixes #340 session cleanup for celery tasks
r1929 return sa
def dbsession(func):
def __wrapper(func, *fargs, **fkwargs):
try:
ret = func(*fargs, **fkwargs)
return ret
finally:
Mads Kiilerich
follow Python conventions for boolean values...
r3625 if CELERY_ON and not CELERY_EAGER:
cleanup task session only if celery is on
r1930 meta.Session.remove()
fixes #340 session cleanup for celery tasks
r1929
return decorator(__wrapper, func)