)]}'
{"taskflow/persistence/backends/impl_sqlalchemy.py":[{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"2edc46d2a62baa29e4c6f18f9fc73dc93617636e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            self._owns_engine \u003d True"},{"line_number":164,"context_line":"        self._session_maker \u003d None"},{"line_number":165,"context_line":"        self._validated \u003d False"},{"line_number":166,"context_line":"        self._lock \u003d threading.RLock()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _create_engine(self):"},{"line_number":169,"context_line":"        # NOTE(harlowja): copy the internal one so that we don\u0027t modify it via"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_296d1605","line":166,"updated":"2014-06-09 18:18:18.000000000","message":"This is added, but I don\u0027t see any code taking advantage of it.  Does the decorator need this?","commit_id":"433a3fdf03b55c8309f6ef252d69278970f40d73"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"455d63081aff8e78a41b264d61a6f61eb54b8075","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            self._owns_engine \u003d True"},{"line_number":164,"context_line":"        self._session_maker \u003d None"},{"line_number":165,"context_line":"        self._validated \u003d False"},{"line_number":166,"context_line":"        self._lock \u003d threading.RLock()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _create_engine(self):"},{"line_number":169,"context_line":"        # NOTE(harlowja): copy the internal one so that we don\u0027t modify it via"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_82d35c5e","line":166,"in_reply_to":"1ae5cdf2_296d1605","updated":"2014-06-09 21:38:06.000000000","message":"Ya, the decorator itself looks for this attribute to lock onto.","commit_id":"433a3fdf03b55c8309f6ef252d69278970f40d73"},{"author":{"_account_id":9648,"name":"Greg Hill","email":"greg.hill@rackspace.com","username":"jimbobhickville"},"change_message_id":"2edc46d2a62baa29e4c6f18f9fc73dc93617636e","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                                                      autocommit\u003dTrue)"},{"line_number":221,"context_line":"        return self._session_maker"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @lock_utils.locked"},{"line_number":224,"context_line":"    def get_connection(self):"},{"line_number":225,"context_line":"        conn \u003d Connection(self, self._get_session_maker(), self.engine)"},{"line_number":226,"context_line":"        if not self._validated:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4917c251","line":223,"updated":"2014-06-09 18:18:18.000000000","message":"Do we need to lock both methods or is the lock on \u0027engine\u0027 enough (since this calls out to that one anyway)?","commit_id":"433a3fdf03b55c8309f6ef252d69278970f40d73"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"455d63081aff8e78a41b264d61a6f61eb54b8075","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                                                      autocommit\u003dTrue)"},{"line_number":221,"context_line":"        return self._session_maker"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @lock_utils.locked"},{"line_number":224,"context_line":"    def get_connection(self):"},{"line_number":225,"context_line":"        conn \u003d Connection(self, self._get_session_maker(), self.engine)"},{"line_number":226,"context_line":"        if not self._validated:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_426794b7","line":223,"in_reply_to":"1ae5cdf2_4917c251","updated":"2014-06-09 21:38:06.000000000","message":"Let me reduce the scope a little, its still needed around the initial session fetch and engine attribute access (to ensure both of these happen in one atomic unit), its not likely but the session_maker could access a different engine if this atomicity isn\u0027t done.","commit_id":"433a3fdf03b55c8309f6ef252d69278970f40d73"},{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"6c89af7298095fd3f3d55af9df3dbe75b9d82269","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            self._owns_engine \u003d True"},{"line_number":164,"context_line":"        self._session_maker \u003d None"},{"line_number":165,"context_line":"        self._validated \u003d False"},{"line_number":166,"context_line":"        self._lock \u003d threading.Lock()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _create_engine(self):"},{"line_number":169,"context_line":"        # NOTE(harlowja): copy the internal one so that we don\u0027t modify it via"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_834f6b91","line":166,"updated":"2014-06-19 16:07:47.000000000","message":"Use RLock()?","commit_id":"cea2b44acbcb98ac6a1794093a59a625f43f2838"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cb026abc45e7fc547cc788fcbc69c6191597bfba","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            self._owns_engine \u003d True"},{"line_number":164,"context_line":"        self._session_maker \u003d None"},{"line_number":165,"context_line":"        self._validated \u003d False"},{"line_number":166,"context_line":"        self._lock \u003d threading.Lock()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _create_engine(self):"},{"line_number":169,"context_line":"        # NOTE(harlowja): copy the internal one so that we don\u0027t modify it via"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_fbea00ab","line":166,"in_reply_to":"1ae5cdf2_834f6b91","updated":"2014-07-10 03:26:51.000000000","message":"Reentrant locking currently not needed; if in the future it becomes needed then likely we should switch but the current 2 methods that lock don\u0027t call each other in ways that will cause a deadlock.","commit_id":"cea2b44acbcb98ac6a1794093a59a625f43f2838"}]}
