[SOLVED] Error upgrading OJS 2.4.8-5 to 3.2.0-3 : Uncaught Error: Call to a member function getContextId()

Upgrading with debug = On

Sorry, i have now another error.

PKP-Database-Logger 1591324531,171: -----
(mysqli): UPDATE submissions SET stage_id=3 WHERE submission_id IN (SELECT DISTINCT submission_id FROM review_assignments) 
   
-----

PKP-Database-Logger 1591324531,171: -----
(mysqli): UPDATE submissions SET stage_id=3 WHERE stage_id = 1 AND submission_id IN (SELECT DISTINCT submission_id FROM review_rounds) 
   
-----

PKP-Database-Logger 1591324531,171: -----
(mysqli): UPDATE submissions SET stage_id=4 WHERE submission_id IN (SELECT e1.submission_id FROM edit_decisions e1 LEFT JOIN edit_decisions e2 ON (e2.edit_decision_id > e1.edit_decision_id AND e2.submission_id = e1.submission_id) WHERE e2.edit_decision_id IS NULL AND e1.decision = 1) 
   
-----

PKP-Database-Logger 1591324531,171: -----
(mysqli): UPDATE review_rounds SET stage_id=3 
   
-----

PKP-Database-Logger 1591324531,171: Query: UPDATE review_rounds SET stage_id=3 failed. Duplicate entry '10558-3-1' for key 'review_rounds_submission_id_stage_id_round_pkey'
PKP-Database-Logger 1591324531,171: 1062: Duplicate entry '10558-3-1' for key 'review_rounds_submission_id_stage_id_round_pkey'
							ADOConnection._Execute(UPDATE review_rounds SET stage_id=3, false)% line 1246, file: /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/lib/vendor/adodb/adodb-php/adodb.inc.php
						ADOConnection.Execute(UPDATE review_rounds SET stage_id=3)% line  442, file: /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc.php
					Installer.executeSQL(UPDATE review_rounds SET stage_id=3)% line  437, file: /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc.php
				Installer.executeSQL(Array[111])% line  395, file: /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc.php
			Installer.executeAction(Array[3])% line  263, file: /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc.php
ERROR: Upgrade failed: DB: Duplicate entry '10558-3-1' for key 'review_rounds_submission_id_stage_id_round_pkey'

I applied these sentences

CREATE TABLE review_rounds_old SELECT * FROM review_rounds;
DELETE FROM review_rounds WHERE review_round_id NOT IN (SELECT MIN(review_round_id) FROM review_rounds_old GROUP BY submission_id, round);
DROP TABLE review_rounds_old;

New errors:

PKP-Database-Logger 1591396325,2932: -----
(mysqli): SELECT * FROM submissions WHERE submission_id = 5017 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): SELECT * FROM submission_settings WHERE submission_id = '5017' 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): select * from `publications` as `p` where `p`.`submission_id` in (5017) order by `p`.`version` asc 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): INSERT INTO submission_supplementary_files
				(file_id, revision)
			VALUES
				(38976, 1) 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): DELETE FROM review_round_files
			WHERE submission_id = 5017 AND stage_id = 3 AND file_id = 38976 AND revision = 1 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): INSERT INTO review_round_files
				(submission_id, review_round_id, stage_id, file_id, revision)
			VALUES (5017, 2006, 3, 38976, 1) 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): SELECT r.*, r2.review_revision FROM review_assignments r
			LEFT JOIN review_rounds r2 ON (r.review_round_id = r2.review_round_id) WHERE	r.submission_id = 5017 AND r2.review_round_id = 2006 AND r2.stage_id = 3 ORDER BY review_id 
   
-----

PKP-Database-Logger 1591396325,2932: -----
(mysqli): SELECT * FROM users WHERE user_id = 5774 
   
-----

PHP Fatal error:  Uncaught Error: Call to a member function getFullName() on null in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php:485
Stack trace:
#0 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(69): ReviewAssignmentDAO->_fromRow(Array)
#1 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(218): ReviewAssignmentDAO->_getReviewAssignmentsArray('SELECT r.*, r2....', Array)
#2 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/classes/install/Upgrade.inc.php(1494): ReviewAssignmentDAO->getBySubmissionId('5017', 2006, 3)
#3 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc.php(417): Upgrade->provideSupplementaryFilesForReview(Object(Upgrade), Array)
#4 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/install/Installer.inc in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php on line 485

I applied

DELETE FROM review_assignments WHERE review_id IN (SELECT r.review_id FROM review_assignments r LEFT JOIN users u ON (r.reviewer_id = u.user_id) WHERE u.user_id IS NULL);

But now

PKP-Database-Logger 1591468778,479: -----
(mysqli): SELECT * FROM users WHERE user_id = 7145 
   
-----

PKP-Database-Logger 1591468778,479: -----
(mysqli): SELECT * FROM user_settings WHERE user_id = '7145' 
   
-----

PKP-Database-Logger 1591468778,479: -----
(mysqli): SELECT * FROM submissions WHERE submission_id = 11142 
   
-----

PHP Fatal error:  Uncaught Error: Call to a member function getContextId() on null in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php:542
Stack trace:
#0 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php(518): ReviewAssignment->isRead()
#1 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewRound/ReviewRound.inc.php(213): ReviewAssignment->getStatus()
#2 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewRound/ReviewRoundDAO.inc.php(260): ReviewRound->determineStatus()
#3 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(467): ReviewRoundDAO->updateStatus(Object(ReviewRound))
#4 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(544): ReviewAssignmentD in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php on line 542

Perhaps, i did all bad

Thanks

Hi @juanito,

Those steps look reasonable so far. This message:

PHP Fatal error:  Uncaught Error: Call to a member function getContextId() on null in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php:542
Stack trace:
#0 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php(518): ReviewAssignment->isRead()
#1 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewRound/ReviewRound.inc.php(213): ReviewAssignment->getStatus()
#2 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewRound/ReviewRoundDAO.inc.php(260): ReviewRound->determineStatus()
#3 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(467): ReviewRoundDAO->updateStatus(Object(ReviewRound))
#4 /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php(544): ReviewAssignmentD in /home/mari/Escritorio/EUS/7MAY20/pruebasSED/ojs-3.2.0-3/lib/pkp/classes/submission/reviewAssignment/ReviewAssignment.inc.php on line 542

…suggests to me that you have review assignments that refer to nonexistent submissions. Try this in your OJS 2.x database:

SELECT review_id FROM review_assignments ra LEFT JOIN articles a ON (ra.submission_id = a.article_id) WHERE a.article_id IS NULL;

Regards,
Alec Smecher
Public Knowledge Project Team

Thanks @asmecher . I changed ra.article_id by ra.submission_id

MariaDB [r]> SELECT review_id FROM review_assignments ra LEFT JOIN articles a ON (ra.submission_id = a.article_id) WHERE a.article_id IS NULL;
+-----------+
| review_id |
+-----------+
|      3499 |
|      3500 |
|      3501 |
|      3502 |
|      3276 |
|      3277 |
|      3431 |
|      3474 |
|      3333 |
|      3334 |
|      3699 |
|      3278 |
|      3289 |
|      3302 |
|      3303 |
|      3321 |
|      3475 |
|      3476 |
|      3477 |
|      3511 |
|      3279 |
|      3280 |
|      3315 |
|      3336 |
|      3337 |
|      3287 |
|      3288 |
|      3290 |
|      3291 |
|      3376 |
|      3447 |
|      3297 |
|      3300 |
|      3293 |
|      3294 |
|      3298 |
|      3299 |
|      3295 |
|      3296 |
|      3306 |
|      3307 |
|      3308 |
|      3327 |
|      3338 |
|      3459 |
|      3309 |
|      3310 |
|      3460 |
|      3599 |
|      3600 |
|      3711 |
|      3313 |
|      3314 |
|      3383 |
|      3286 |
|      3343 |
|      3503 |
|      3504 |
|      3505 |
|      3506 |
|      3821 |
|      3630 |
|      3631 |
+-----------+
63 rows in set (1.301 sec)

MariaDB [r]> 

DELETE?

Thanks

Hi @juanito,

Yes, that’s my mistake – I’ve corrected it in the query above. But yes, these are review assignments that are associated with non-existent articles, and should be deleted.

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like

Is this query correct? Thanks

DELETE FROM review_assignments WHERE review_id IN (SELECT review_id FROM review_assignments ra LEFT JOIN articles a ON (ra.submission_id = a.article_id) WHERE a.article_id IS NULL);

Hi @juanito,

At a glance, yes. But make sure you have a complete backup.

Regards,
Alec Smecher
Public Knowledge Project Team

No problem. Thanks. I am going to test, the upgrade process… : )

Hi @juanito,

Applying the change linked here might speed it up considerably: Upgrade process performs slowly · Issue #5703 · pkp/pkp-lib · GitHub
(This is to be included in the 3.2.1 release.)

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like

Thank you very much @asmecher .

I did:

DELETE FROM review_assignments WHERE review_id IN (SELECT review_id FROM review_assignments ra LEFT JOIN articles a ON (ra.submission_id = a.article_id) WHERE a.article_id IS NULL);

and

cd dbscripts/xml/upgrade/
rm 3.2.0_preupdate_versioning.xml 
wget https://raw.githubusercontent.com/pkp/ojs/bc1b4d95b171fe223f515696e537d4733911d2ab/dbscripts/xml/upgrade/3.2.0_preupdate_versioning.xml
rm 3.2.0_versioning.xml 
wget https://github.com/pkp/ojs/blob/bc1b4d95b171fe223f515696e537d4733911d2ab/dbscripts/xml/upgrade/3.2.0_versioning.xml

21 hours
Successfully upgraded to version 3.2.0.3

I owe you two pizzas :pizza:

Hi @juanito,

Excellent! You’ll be glad to know we’re doing a lot of infrastructural work on the upgrade toolset, and you’ll start to see huge improvements in both speed and (we hope) reliability starting with version 3.3…

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like