--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -18,14 +18,15 @@
import pysolr
import oembed
import markdown
-from pypeline.markup import markup as pypeline_markup
import pygments
import pygments.lexers
import pygments.formatters
import pygments.util
+import webob.exc
from tg import config, session
from pylons import c, request
from paste.deploy.converters import asbool, asint
+from pypeline.markup import markup as pypeline_markup
import ew as ew_core
import ew.jinja2_ew as ew
@@ -48,9 +49,11 @@
is available during requests via the 'app_globals' variable.
"""
+ __shared_state = {}
def __init__(self):
- """Do nothing, by default."""
+ self.__dict__ = self.__shared_state
+ if self.__shared_state: return
self.allura_templates = pkg_resources.resource_filename('allura', 'templates')
# Setup SOLR
@@ -288,8 +291,21 @@
self._publish(xn, key, message, **kw)
def send_all_messages(self):
+ max_tries = 3
for xn, messages in c.queued_messages.items():
- self.amq_conn.publish(xn, messages)
+ for tryno in range(max_tries):
+ try:
+ self.amq_conn.publish(xn, messages)
+ break
+ except Exception:
+ log.warning(
+ 'Exception sending message to amqp (try #%d)',
+ tryno, exc_info=True)
+ self.amq_conn.reset()
+ else:
+ log.error('Giving up sending messages, reset connection & 500')
+ self.amq_conn.reset()
+ raise webob.exc.HTTPInternalServerError()
c.queued_messages = defaultdict(list)
def _publish(self, xn, routing_key, message, **kw):
@@ -324,6 +340,10 @@
def hits(self):
return len(self)
+ @property
+ def docs(self):
+ return self
+
def __init__(self):
self.db = {}
@@ -333,6 +353,8 @@
self.db[o['id']] = o
def search(self, q, fq=None, **kw):
+ if isinstance(q, unicode):
+ q = q.encode('latin-1')
# Parse query
preds = []
q_parts = shlex.split(q)