[#5105] introduce a new "task" db for monq_task collection
diff --git a/Allura/allura/command/show_models.py b/Allura/allura/command/show_models.py
index 95558ec..7dc1c0a 100644
--- a/Allura/allura/command/show_models.py
+++ b/Allura/allura/command/show_models.py
@@ -111,9 +111,8 @@
     def command(self):
         from allura import model as M
         self.basic_setup()
-        # Collect indexes by collection name
-        main_indexes = defaultdict(list)
-        project_indexes = defaultdict(list)
+        main_indexes = defaultdict(lambda: defaultdict(list))  # by db, then collection name
+        project_indexes = defaultdict(list)  # by collection name
         base.log.info('Collecting indexes...')
         for m in Mapper.all_mappers():
             mgr = m.collection.m
@@ -124,15 +123,16 @@
                 continue
             base.log.info('... for class %s', cls)
             if session(cls) in (
-                M.main_orm_session, M.repository_orm_session):
-                idx = main_indexes[cname]
+                M.main_orm_session, M.repository_orm_session, M.task_orm_session):
+                idx = main_indexes[session(cls)][cname]
             else:
                 idx = project_indexes[cname]
             idx.extend(mgr.indexes)
         base.log.info('Updating indexes for main DB')
-        db = M.main_doc_session.db
-        for name, indexes in main_indexes.iteritems():
-            self._update_indexes(db[name], indexes)
+        for odm_session, db_indexes in main_indexes.iteritems():
+            db = odm_session.impl.db
+            for name, indexes in db_indexes.iteritems():
+                self._update_indexes(db[name], indexes)
         base.log.info('Updating indexes for project DBs')
         configured_dbs = set()
         for projects in utils.chunked_find(M.Project):
diff --git a/Allura/allura/model/__init__.py b/Allura/allura/model/__init__.py
index a329e34..5ce734e 100644
--- a/Allura/allura/model/__init__.py
+++ b/Allura/allura/model/__init__.py
@@ -22,6 +22,7 @@
 from .session import main_doc_session, main_orm_session
 from .session import project_doc_session, project_orm_session
 from .session import artifact_orm_session, repository_orm_session
+from .session import task_orm_session
 from .session import ArtifactSessionExtension
 
 import repo
diff --git a/Allura/allura/model/monq_model.py b/Allura/allura/model/monq_model.py
index 9964fc8..a9b2278 100644
--- a/Allura/allura/model/monq_model.py
+++ b/Allura/allura/model/monq_model.py
@@ -13,10 +13,11 @@
 from ming.orm import session, FieldProperty
 from ming.orm.declarative import MappedClass
 
-from .session import main_orm_session
+from .session import task_orm_session
 
 log = logging.getLogger(__name__)
 
+
 class MonQTask(MappedClass):
     '''Task to be executed by the taskd daemon.
 
@@ -40,7 +41,7 @@
     states = ('ready', 'busy', 'error', 'complete')
     result_types = ('keep', 'forget')
     class __mongometa__:
-        session = main_orm_session
+        session = task_orm_session
         name = 'monq_task'
         indexes = [
             [
@@ -236,7 +237,7 @@
             raise
         finally:
             self.time_stop = datetime.utcnow()
-            main_orm_session.flush(self)
+            session(self).flush(self)
             if restore_context:
                 c.project = old_cproject
                 c.app = old_capp
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 11c3ff2..f3d5e22 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -68,8 +68,10 @@
 
 main_doc_session = Session.by_name('main')
 project_doc_session = Session.by_name('project')
+task_doc_session = Session.by_name('task')
 main_orm_session = ThreadLocalORMSession(main_doc_session)
 project_orm_session = ThreadLocalORMSession(project_doc_session)
+task_orm_session = ThreadLocalORMSession(task_doc_session)
 artifact_orm_session = ThreadLocalORMSession(
     doc_session=project_doc_session,
     extensions = [ ArtifactSessionExtension ])
diff --git a/Allura/development.ini b/Allura/development.ini
index 0d835b7..cd67320 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -130,8 +130,11 @@
 activitystream.enabled = false
 
 # Ming setup
+# These don't necessarily have to be separate databases, they could
+# be all in the same database if desired
 ming.main.uri = mongodb://127.0.0.1:27017/allura
 ming.project.uri = mongodb://127.0.0.1:27017/project-data
+ming.task.uri = mongodb://127.0.0.1:27017/task
 ming.zarkov.uri = mongodb://127.0.0.1:27017/zarkov
 
 # Zarkov host setting, requires the zarkov and gevent libraries.
diff --git a/Allura/test.ini b/Allura/test.ini
index 6b37100..fa951e2 100644
--- a/Allura/test.ini
+++ b/Allura/test.ini
@@ -27,6 +27,7 @@
 # ming.main.master = mongo://127.0.0.1:27018/allura
 ming.main.uri = mim:///allura
 ming.project.uri = mim:///project-data
+ming.task.uri = mim:///task
 
 # ActivityStream
 activitystream.master = mim://