Aaron Schulz has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/310591

Change subject: Make DB snapshot commit errors include active methods
......................................................................

Make DB snapshot commit errors include active methods

Change-Id: I59e501528b104e797b36103fa18792f539d92a14
---
M includes/db/Database.php
1 file changed, 23 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/91/310591/1

diff --git a/includes/db/Database.php b/includes/db/Database.php
index 109dbfe..72f5e2a 100644
--- a/includes/db/Database.php
+++ b/includes/db/Database.php
@@ -633,6 +633,25 @@
                return $this->mTrxLevel ? $this->mTrxWriteCallers : [];
        }
 
+       protected function pendingWriteAndCallbackCallers() {
+               if ( !$this->mTrxLevel ) {
+                       return [];
+               }
+
+               $fnames = $this->mTrxWriteCallers;
+               foreach ( [
+                       $this->mTrxIdleCallbacks,
+                       $this->mTrxPreCommitCallbacks,
+                       $this->mTrxEndCallbacks
+               ] as $callbacks ) {
+                       foreach ( $callbacks as $callback ) {
+                               $fnames[] = $callback[1];
+                       }
+               }
+
+               return $fnames;
+       }
+
        public function isOpen() {
                return $this->mOpened;
        }
@@ -3101,9 +3120,10 @@
        public function flushSnapshot( $fname = __METHOD__ ) {
                if ( $this->writesOrCallbacksPending() || 
$this->explicitTrxActive() ) {
                        // This only flushes transactions to clear snapshots, 
not to write data
+                       $fnames = $this->pendingWriteAndCallbackCallers();
                        throw new DBUnexpectedError(
                                $this,
-                               "$fname: Cannot COMMIT to clear snapshot 
because writes are pending."
+                               "$fname: Cannot COMMIT to clear snapshot 
because writes are pending ($fnames)."
                        );
                }
 
@@ -3590,9 +3610,10 @@
        public function getScopedLockAndFlush( $lockKey, $fname, $timeout ) {
                if ( $this->writesOrCallbacksPending() ) {
                        // This only flushes transactions to clear snapshots, 
not to write data
+                       $fnames = $this->pendingWriteAndCallbackCallers();
                        throw new DBUnexpectedError(
                                $this,
-                               "$fname: Cannot COMMIT to clear snapshot 
because writes are pending."
+                               "$fname: Cannot COMMIT to clear snapshot 
because writes are pending ($fnames)."
                        );
                }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/310591
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I59e501528b104e797b36103fa18792f539d92a14
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to