[rhmessaging-commits] rhmessaging commits: r4342 - in mgmt/newdata/cumin/python/cumin: account and 2 other directories.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Fri Sep 24 17:53:28 EDT 2010


Author: justi9
Date: 2010-09-24 17:53:27 -0400 (Fri, 24 Sep 2010)
New Revision: 4342

Modified:
   mgmt/newdata/cumin/python/cumin/account/widgets.py
   mgmt/newdata/cumin/python/cumin/database.py
   mgmt/newdata/cumin/python/cumin/grid/daemon.py
   mgmt/newdata/cumin/python/cumin/messaging/binding.py
   mgmt/newdata/cumin/python/cumin/messaging/broker.py
   mgmt/newdata/cumin/python/cumin/messaging/brokergroup.py
   mgmt/newdata/cumin/python/cumin/messaging/brokerlink.py
   mgmt/newdata/cumin/python/cumin/messaging/queue.py
   mgmt/newdata/cumin/python/cumin/parameters.py
   mgmt/newdata/cumin/python/cumin/sqladapter.py
   mgmt/newdata/cumin/python/cumin/stat.py
   mgmt/newdata/cumin/python/cumin/widgets.py
Log:
More in the department of safe connection reuse and exception handling

Modified: mgmt/newdata/cumin/python/cumin/account/widgets.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/account/widgets.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/account/widgets.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -116,8 +116,7 @@
             self.validate(session)
 
             if not self.errors.get(session):
-                conn = self.app.database.get_connection()
-                cursor = conn.cursor()
+                cursor = self.app.database.get_read_cursor()
 
                 cls = self.app.model.com_redhat_cumin.User
                 user = cls.get_object(cursor, name=name)
@@ -203,16 +202,20 @@
         self.validate(session)
 
         if not self.errors.get(session):
+            password = self.new0.get(session)
+
             conn = self.app.database.get_connection()
-            cursor = conn.cursor()
 
-            password = self.new0.get(session)
+            try:
+                cursor = conn.cursor()
 
-            user = session.client_session.attributes["login_session"].user
-            user.password = crypt_password(password)
-            user.save(cursor)
+                user = session.client_session.attributes["login_session"].user
+                user.password = crypt_password(password)
+                user.save(cursor)
 
-            conn.commit()
+                conn.commit()
+            finally:
+                conn.close()
 
             task = ObjectTask(self.app)
             invoc = task.start(session, None)

Modified: mgmt/newdata/cumin/python/cumin/database.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/database.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/database.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -2,6 +2,8 @@
 import re
 import threading
 
+from psycopg2.extensions import *
+
 from util import *
 
 log = logging.getLogger("cumin.database")
@@ -20,14 +22,23 @@
         #m = re.match(r"^([^:]+)://([^@]+)@([^/]+)/(.+)$", self.uri)
 
     def get_connection(self):
-        conn = getattr(self.thread_local, "connection", None)
+        return psycopg2.connect(self.dsn)
 
+    def get_read_connection(self):
+        key = "read_connection"
+        conn = getattr(self.thread_local, key, None)
+
         if not conn or conn.closed:
-            conn = psycopg2.connect(self.dsn)
-            setattr(self.thread_local, "connection", conn)
+            conn = self.get_connection()
+            setattr(self.thread_local, key, conn)
 
+            conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
+
         return conn
 
+    def get_read_cursor(self):
+        return self.get_read_connection().cursor()
+
     def __repr__(self):
         return self.__class__.__name__
 

Modified: mgmt/newdata/cumin/python/cumin/grid/daemon.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/grid/daemon.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/grid/daemon.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -3,16 +3,11 @@
 
 class DaemonFrameTask(ObjectFrameTask):
     def get_master(self, system_name, invoc):
+        cursor = self.app.database.get_read_cursor()
+
         cls = self.app.model.com_redhat_grid.Master
+        master = cls.get_object(cursor, System=system_name)
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
-
-        try:
-            master = cls.get_object(cursor, System=system_name)
-        finally:
-            conn.close()
-
         if not master:
             invoc.exception = Exception("Master daemon not running")
             invoc.status = invoc.FAILED
@@ -58,16 +53,11 @@
 
 class DaemonSelectorTask(ObjectSelectorTask):
     def get_master(self, system_name, invoc):
+        cursor = self.app.database.get_read_cursor()
+    
         cls = self.app.model.com_redhat_grid.Master
+        master = cls.get_object(cursor, System=system_name)
     
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
-    
-        try:
-            master = cls.get_object(cursor, System=system_name)
-        finally:
-            conn.close()
-    
         if not master:
             invoc.exception = Exception("Master daemon not running")
             invoc.status = invoc.FAILED

Modified: mgmt/newdata/cumin/python/cumin/messaging/binding.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/messaging/binding.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/messaging/binding.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -22,23 +22,20 @@
     def do_invoke(self, invoc, binding):
         assert isinstance(binding, RosemaryObject)
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
 
         queue = None
         exchange = None
+
         try:
-            try:
-                cls = self.app.model.org_apache_qpid_broker.Queue
-                queue = cls.get_object_by_id(cursor, binding._queueRef_id)
-                cls = self.app.model.org_apache_qpid_broker.Exchange
-                exchange = cls.get_object_by_id(cursor, binding._exchangeRef_id)
-            except Exception, e:
-                invoc.status = "failed"
-                invoc.exception = e
-                log.exception(e)
-        finally:
-            conn.close()
+            cls = self.app.model.org_apache_qpid_broker.Queue
+            queue = cls.get_object_by_id(cursor, binding._queueRef_id)
+            cls = self.app.model.org_apache_qpid_broker.Exchange
+            exchange = cls.get_object_by_id(cursor, binding._exchangeRef_id)
+        except Exception, e:
+            invoc.status = "failed"
+            invoc.exception = e
+            log.exception(e)
 
         if queue and exchange:
             session = self.app.model.get_session_by_object(binding)
@@ -95,23 +92,20 @@
     def do_invoke(self, invoc, binding):
         assert isinstance(binding, RosemaryObject)
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
 
         queue = None
         exchange = None
+
         try:
-            try:
-                cls = self.app.model.org_apache_qpid_broker.Queue
-                queue = cls.get_object_by_id(cursor, binding._queueRef_id)
-                cls = self.app.model.org_apache_qpid_broker.Exchange
-                exchange = cls.get_object_by_id(cursor, binding._exchangeRef_id)
-            except Exception, e:
-                invoc.status = "failed"
-                invoc.exception = e
-                log.exception(e)
-        finally:
-            conn.close()
+            cls = self.app.model.org_apache_qpid_broker.Queue
+            queue = cls.get_object_by_id(cursor, binding._queueRef_id)
+            cls = self.app.model.org_apache_qpid_broker.Exchange
+            exchange = cls.get_object_by_id(cursor, binding._exchangeRef_id)
+        except Exception, e:
+            invoc.status = "failed"
+            invoc.exception = e
+            log.exception(e)
 
         if queue and exchange:
             session = self.app.model.get_session_by_object(binding)

Modified: mgmt/newdata/cumin/python/cumin/messaging/broker.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/messaging/broker.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/messaging/broker.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -368,16 +368,19 @@
 
     def do_invoke(self, invoc, broker, groups):
         conn = self.app.database.get_connection()
-        cursor = conn.cursor()
 
-        cls = self.app.model.com_redhat_cumin.BrokerGroup
-        all_groups = cls.get_selection(cursor)
-        selected_ids = [x._id for x in groups]
+        try:
+            cursor = conn.cursor()
 
-        cls = self.app.model.com_redhat_cumin.BrokerGroupMapping
-        try:
+            cls = self.app.model.com_redhat_cumin.BrokerGroup
+            all_groups = cls.get_selection(cursor)
+            selected_ids = [x._id for x in groups]
+
+            cls = self.app.model.com_redhat_cumin.BrokerGroupMapping
+
             for group in all_groups:
-                existing_mapping = cls.get_selection(cursor, _broker_id=broker._id, _group_id=group._id)
+                existing_mapping = cls.get_selection \
+                    (cursor, _broker_id=broker._id, _group_id=group._id)
                 if not group._id in selected_ids:
                     if len(existing_mapping) > 0:
                         existing_mapping[0].delete(cursor)
@@ -388,9 +391,9 @@
                         new_mapping._group_id = group._id
                         new_mapping.fake_qmf_values()
                         new_mapping.save(cursor)
+
+            conn.commit()
         finally:
-            cursor.close()
+            conn.close()
 
-        conn.commit()
-
         invoc.end()

Modified: mgmt/newdata/cumin/python/cumin/messaging/brokergroup.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/messaging/brokergroup.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/messaging/brokergroup.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -40,15 +40,16 @@
 
     def do_invoke(self, invoc, group):
         conn = self.app.database.get_connection()
-        cursor = conn.cursor()
 
         try:
+            cursor = conn.cursor()
+
             group.delete(cursor)
+
+            conn.commit()
         finally:
-            cursor.close()
+            conn.close()
 
-        conn.commit()
-
         invoc.end()
 
 class BrokerGroupInputSet(CheckboxInputSet):
@@ -123,22 +124,23 @@
 
     def do_invoke(self, invoc, obj, name, description):
         conn = self.app.database.get_connection()
-        cursor = conn.cursor()
 
-        cls = self.app.model.com_redhat_cumin.BrokerGroup
-        group = cls.create_object(cursor)
+        try:
+            cursor = conn.cursor()
 
-        group.name = name
-        group.description = description
-        group.fake_qmf_values()
+            cls = self.app.model.com_redhat_cumin.BrokerGroup
+            group = cls.create_object(cursor)
 
-        try:
+            group.name = name
+            group.description = description
+            group.fake_qmf_values()
+
             group.save(cursor)
+
+            conn.commit()
         finally:
-            cursor.close()
+            conn.close()
 
-        conn.commit()
-
         invoc.description = "Add broker group '%s'" % name
 
         invoc.end()
@@ -173,15 +175,16 @@
         group.description = description
 
         conn = self.app.database.get_connection()
-        cursor = conn.cursor()
 
         try:
+            cursor = conn.cursor()
+
             group.save(cursor)
+
+            conn.commit()
         finally:
-            cursor.close()
+            conn.close()
 
-        conn.commit()
-
         invoc.end()
 
 class BrokerGroupEditForm(BrokerGroupForm):
@@ -215,15 +218,16 @@
 
     def do_invoke(self, invoc, group):
         conn = self.app.database.get_connection()
-        cursor = conn.cursor()
 
         try:
+            cursor = conn.cursor()
+
             group.delete(cursor)
+
+            conn.commit()
         finally:
-            cursor.close()
+            conn.close()
 
-        conn.commit()
-
         invoc.end()
 
 class BrokerEngroup(ObjectFrameTask):

Modified: mgmt/newdata/cumin/python/cumin/messaging/brokerlink.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/messaging/brokerlink.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/messaging/brokerlink.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -355,19 +355,11 @@
 
     def do_invoke(self, invoc, vhost, host, port, durable, username,
                   password, transport):
-        # XXX ugh.  need to pass session into do_invoke instead of
-        # this
+        cursor = self.app.database.get_read_cursor()
 
         cls = self.app.model.org_apache_qpid_broker.Broker
+        obj = cls.get_object(cursor, _id=vhost._brokerRef_id)
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
-
-        try:
-            obj = cls.get_object(cursor, _id=vhost._brokerRef_id)
-        finally:
-            cursor.close()
-
         if username == "anonymous":
             mech = "ANONYMOUS"
         else:

Modified: mgmt/newdata/cumin/python/cumin/messaging/queue.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/messaging/queue.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/messaging/queue.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -598,13 +598,11 @@
         return "Move messages"
 
     def do_invoke(self, invoc, vhost, src, dst, count):
+        cursor = self.app.database.get_read_cursor()
+
         cls = self.app.model.org_apache_qpid_broker.Broker
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
-        try:
-            broker = cls.get_object_by_id(cursor, vhost._brokerRef_id)
-        finally:
-            cursor.close()
+        broker = cls.get_object_by_id(cursor, vhost._brokerRef_id)
+
         self.qmf_call(invoc, broker, "queueMoveMessages", src, dst, count)
 
 class MoveQueueMessages(MoveMessagesBase):

Modified: mgmt/newdata/cumin/python/cumin/parameters.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/parameters.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/parameters.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -34,14 +34,9 @@
         self.cls = cls
 
     def do_unmarshal(self, string):
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
+        return self.cls.get_object_by_id(cursor, int(string))
 
-        try:
-            return self.cls.get_object_by_id(cursor, int(string))
-        finally:
-            cursor.close()
-
     def do_marshal(self, obj):
         return str(obj._id)
 
@@ -86,13 +81,9 @@
         id = int(string)
         cls = self.app.model.com_redhat_cumin.BrokerGroup
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
 
-        try:
-            return cls.get_object_by_id(cursor, id)
-        finally:
-            cursor.close()
+        return cls.get_object_by_id(cursor, id)
 
 class BrokerParameter(Parameter):
     def do_unmarshal(self, string):

Modified: mgmt/newdata/cumin/python/cumin/sqladapter.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/sqladapter.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/sqladapter.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -16,15 +16,11 @@
     def get_count(self, values):
         # XXX urgh.  I want session in here
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
 
-        try:
-            self.query.execute(cursor, values, columns=("count(1)",))
+        self.query.execute(cursor, values, columns=("count(1)",))
 
-            return cursor.fetchone()[0]
-        finally:
-            cursor.close()
+        return cursor.fetchone()[0]
 
     def get_sql_options(self, options):
         sql_options = SqlQueryOptions()
@@ -41,17 +37,13 @@
     def get_data(self, values, options):
         sql_options = self.get_sql_options(options)
 
-        conn = self.app.database.get_connection()
-        cursor = conn.cursor()
+        cursor = self.app.database.get_read_cursor()
 
-        try:
-            self.query.execute(cursor, values,
-                               columns=self.columns,
-                               options=sql_options)
+        self.query.execute(cursor, values,
+                           columns=self.columns,
+                           options=sql_options)
 
-            return cursor.fetchall()
-        finally:
-            cursor.close()
+        return cursor.fetchall()
 
 class SqlField(DataAdapterField):
     def __init__(self, adapter, column):

Modified: mgmt/newdata/cumin/python/cumin/stat.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/stat.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/stat.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -528,14 +528,10 @@
                 rosemary_package = self.app.model._packages_by_name[rpackage]
                 rosemary_class = rosemary_package._classes_by_name[rclass]
 
-                id =  self.widget.id.get(session)
-                conn = self.app.database.get_connection()
-                cursor = conn.cursor()
+                id = self.widget.id.get(session)
+                cursor = self.app.database.get_read_cursor()
 
-                try:
-                    obj = rosemary_class.get_object(cursor, _id=id)
-                finally:
-                    cursor.close()
+                obj = rosemary_class.get_object(cursor, _id=id)
 
                 self.set(session, obj)
 

Modified: mgmt/newdata/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/widgets.py	2010-09-24 15:37:19 UTC (rev 4341)
+++ mgmt/newdata/cumin/python/cumin/widgets.py	2010-09-24 21:53:27 UTC (rev 4342)
@@ -26,7 +26,7 @@
 
 class CuminSqlDataSet(SqlDataSet):
     def get_connection(self, session):
-        return self.app.database.get_connection()
+        return self.app.database.get_read_connection()
 
 class CuminHeartBeat(Widget):
     """ the intent is to add stuff here """
@@ -770,7 +770,7 @@
                 return super(CuminTable.Links, self).do_render(session)
 
     def get_connection(self, session):
-        return self.app.database.get_connection()
+        return self.app.database.get_read_connection()
 
     def do_process(self, session, *args):
         super(CuminTable, self).do_process(session, *args)
@@ -1342,22 +1342,8 @@
         self.error_tmpl = WidgetTemplate(self, "error_html")
         self.not_found_tmpl = WidgetTemplate(self, "not_found_html")
 
-    def service(self, session):
-        try:
-            return super(CuminPage, self).service(session)
-        except PageRedirect:
-            raise
-        except:
-            conn = self.app.database.get_connection()
-
-            if not conn.closed:
-                conn.rollback()
-
-            raise
-
     def do_process(self, session):
-        conn = self.app.database.get_connection()
-        session.cursor = conn.cursor()
+        session.cursor = self.app.database.get_read_cursor()
 
         if not self.authorized(session):
             page = self.app.login_page



More information about the rhmessaging-commits mailing list