Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom review form possible responses get garbled on upgrade form 3.2.1-x to 3.3.0-x #9953

Closed
asmecher opened this issue May 9, 2024 · 5 comments
Assignees
Labels
Bug:3:Critical A bug that prevents a substantial minority of users from using the software.
Milestone

Comments

@asmecher
Copy link
Member

asmecher commented May 9, 2024

Describe the bug
When journals using custom review forms with multiple options upgrade form 3.2.1-x to 3.3.0-x, the possible responses get garbled. See for details:

https://forum.pkp.sfu.ca/t/ojs-review-form-settings-get-deleted-overwritten-on-upgrade-from-3-2-to-3-3/87542

The problem is that there is a generic function that attempts to convert setting values from serialized objects to JSON for ..._settings tables, but it does not expect the cardinality of data that the review_form_element_settings table has, so multiple rows get clobbered with an update that was supposed to just affect one. This changes the review_form_element_settings case to use the right keys.

PRs:

@asmecher asmecher added the Bug:3:Critical A bug that prevents a substantial minority of users from using the software. label May 9, 2024
@asmecher asmecher added this to the 3.3.0-18 milestone May 9, 2024
@asmecher asmecher self-assigned this May 9, 2024
asmecher added a commit to asmecher/ojs that referenced this issue May 9, 2024
asmecher added a commit to asmecher/pkp-lib that referenced this issue May 9, 2024
asmecher added a commit to asmecher/pkp-lib that referenced this issue May 9, 2024
@asmecher asmecher closed this as completed May 9, 2024
@marcbria
Copy link
Collaborator

Hi @asmecher

I think this change introduced a regression in 3.3.0-18 and after.

When you upgrade from stable-3.2 to 3.3.0-17 works like a charm (except for the review forms) but when I try to upgrade to *-18 and it shows the following error:

2024-09-18 08:41:16 [migration: OJSv3_3_0UpgradeMigration]                                                                                                                                    
Failed to migrate the settings entity "object_for_review_settings"                                                                                                                            
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'setting_name' in 'field list' in /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.p
hp:80                                                                                                                                                                                         
Stack trace:                                                                                                                                                                                  
#0 /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(80): PDO->prepare()                                                                              
#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(331): Doctrine\DBAL\Driver\PDOConnection->prepare()                                              
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(664): Illuminate\Database\Connection->Illuminate\Database\{closure}()                            
#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\Database\Connection->runQueryCallback()
#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\Database\Connection->run()
#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2270): Illuminate\Database\Connection->select()
#6 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2258): Illuminate\Database\Query\Builder->runSelect()
#7 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2753): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}()
#8 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2259): Illuminate\Database\Query\Builder->onceWithColumns()
#9 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(114): Illuminate\Database\Query\Builder->get()
#10 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(37): OJSv3_3_0UpgradeMigration->_settingsAsJSON()
#11 /var/www/html/lib/pkp/classes/install/Installer.inc.php(406): OJSv3_3_0UpgradeMigration->up()
#12 /var/www/html/lib/pkp/classes/install/Installer.inc.php(252): Installer->executeAction()
#13 /var/www/html/lib/pkp/classes/install/Installer.inc.php(175): Installer->executeInstaller() 
#14 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(89): Installer->execute()
#15 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(65): UpgradeTool->upgrade()
#16 /var/www/html/tools/upgrade.php(22): UpgradeTool->execute()
#17 {main}

But although the error, the process finishes with the "Successful" message and journal seams to work fine... but the list of Archived articles disappear.

Commented initially here:
https://forum.pkp.sfu.ca/t/ojs-review-form-settings-get-deleted-overwritten-on-upgrade-from-3-2-to-3-3/87542/12

@asmecher
Copy link
Member Author

@marcbria, can you include the entire output of the upgrade process?

@marcbria
Copy link
Collaborator

Sure, but it doesn't explain much more.

That's the full output:

Upgrade OJS for qp...
 
2024-09-18 13:41:58 [pre-install]
2024-09-18 13:41:58 [load: upgrade.xml]
2024-09-18 13:41:58 [version: 3.3.0.19]
2024-09-18 13:41:58 [code: Installer Installer::checkPhpVersion]
2024-09-18 13:41:58 [code: Installer Installer::installDefaultNavigationMenus]
WARNING: The NavigationMenu (ContextId: 1, Title: User Navigation Menu, Area: user) will be skipped because the specified area has already a NavigationMenu attached.
WARNING: The NavigationMenu (ContextId: 1, Title: Primary Navigation Menu, Area: primary) will be skipped because the specified area has already a NavigationMenu attached.
WARNING: The NavigationMenu (ContextId: 0, Title: User Navigation Menu, Area: user) will be skipped because the specified area has already a NavigationMenu attached.
2024-09-18 13:41:58 [code: Installer Installer::migrateStaticPagesToNavigationMenuItems]
2024-09-18 13:41:58 [migration: PKPv3_3_0UpgradeMigration]
Removing orphaned submission_files entry ID 828 with submission_id 342
Removing orphaned submission_files entry ID 829 with submission_id 342
Removing orphaned submission_files entry ID 830 with submission_id 342
Removing orphaned submission_files entry ID 831 with submission_id 342
Removing orphaned submission_files entry ID 832 with submission_id 342
Removing orphaned submission_files entry ID 833 with submission_id 342
Removing orphaned submission_files entry ID 834 with submission_id 342
Removing orphaned submission_files entry ID 835 with submission_id 342
Removing orphaned submission_files entry ID 836 with submission_id 342
Removing orphaned submission_files entry ID 1005 with submission_id 342
Removing orphaned submission_files entry ID 1006 with submission_id 342
Removing orphaned submission_files entry ID 1007 with submission_id 342
Removing orphaned submission_files entry ID 1008 with submission_id 342
Removing orphaned submission_files entry ID 1009 with submission_id 342
Removing orphaned submission_files entry ID 888 with submission_id 355
Removing orphaned submission_files entry ID 929 with submission_id 355
Removing orphaned submission_files entry ID 951 with submission_id 355
Removing orphaned submission_files entry ID 959 with submission_id 355
Removing orphaned submission_files entry ID 960 with submission_id 355
Removing orphaned submission_files entry ID 941 with submission_id 360
Removing orphaned submission_files entry ID 1030 with submission_id 367
Removing orphaned submission_files entry ID 1031 with submission_id 367
Removing orphaned submission_files entry ID 1032 with submission_id 367
Removing orphaned submission_files entry ID 1033 with submission_id 367
Removing orphaned submission_files entry ID 1034 with submission_id 367
Removing orphaned submission_files entry ID 1035 with submission_id 367
Removing orphaned submission_files entry ID 1321 with submission_id 388
Removing orphaned submission_files entry ID 1322 with submission_id 388
Removing orphaned submission_files entry ID 1324 with submission_id 388
Removing orphaned submission_files entry ID 1356 with submission_id 394
Removing orphaned submission_files entry ID 1357 with submission_id 394
Removing orphaned submission_files entry ID 1392 with submission_id 394
Removing orphaned submission_files entry ID 1398 with submission_id 394
Removing orphaned submission_files entry ID 1399 with submission_id 394
Removing orphaned submission_files entry ID 1400 with submission_id 394
Removing orphaned review_files entry with review_id ID 132 and submission_file_id 1133
Removing orphaned review_files entry with review_id ID 133 and submission_file_id 1133
Removing orphaned review_files entry with review_id ID 137 and submission_file_id 1164
Removing orphaned review_files entry with review_id ID 221 and submission_file_id 1531
Removing orphaned review_files entry with review_id ID 222 and submission_file_id 1531
Removing orphaned review_files entry with review_id ID 230 and submission_file_id 1558
2024-09-18 13:42:09 [migration: OJSv3_3_0UpgradeMigration]
PHP Fatal error:  Uncaught TypeError: substr(): Argument #3 ($length) must be of type ?int, string given in /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php:181
Stack trace:
#0 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(181): substr()
#1 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(120): OJSv3_3_0UpgradeMigration->_toJSON()
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php(202): OJSv3_3_0UpgradeMigration->{closure}()
#3 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(121): Illuminate\Support\Collection->each()
#4 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(37): OJSv3_3_0UpgradeMigration->_settingsAsJSON()
#5 /var/www/html/lib/pkp/classes/install/Installer.inc.php(406): OJSv3_3_0UpgradeMigration->up()
#6 /var/www/html/lib/pkp/classes/install/Installer.inc.php(252): Installer->executeAction()
#7 /var/www/html/lib/pkp/classes/install/Installer.inc.php(175): Installer->executeInstaller()
#8 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(89): Installer->execute()
#9 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(65): UpgradeTool->upgrade()
#10 /var/www/html/tools/upgrade.php(22): UpgradeTool->execute()
#11 {main}
  thrown in /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php on line 181

@asmecher
Copy link
Member Author

@marcbria, that's a different error message; it's fixed in #10445.

@marcbria
Copy link
Collaborator

It's clear that it's not a good idea working at late hours. :-)
I mixed -18 and -19 issues. Let me try again.

Upgrade OJS for qp...

2024-09-19 07:44:50 [pre-install]
2024-09-19 07:44:50 [load: upgrade.xml]
2024-09-19 07:44:50 [version: 3.3.0.18]
2024-09-19 07:44:50 [code: Installer Installer::checkPhpVersion] 
2024-09-19 07:44:50 [code: Installer Installer::installDefaultNavigationMenus]
WARNING: The NavigationMenu (ContextId: 1, Title: User Navigation Menu, Area: user) will be skipped because the specified area has already a NavigationMenu attached.
WARNING: The NavigationMenu (ContextId: 1, Title: Primary Navigation Menu, Area: primary) will be skipped because the specified area has already a NavigationMenu attached.
WARNING: The NavigationMenu (ContextId: 0, Title: User Navigation Menu, Area: user) will be skipped because the specified area has already a NavigationMenu attached.
2024-09-19 07:44:50 [code: Installer Installer::migrateStaticPagesToNavigationMenuItems]
2024-09-19 07:44:50 [migration: PKPv3_3_0UpgradeMigration]
Removing orphaned submission_files entry ID 828 with submission_id 342
Removing orphaned submission_files entry ID 829 with submission_id 342
Removing orphaned submission_files entry ID 830 with submission_id 342 
Removing orphaned submission_files entry ID 831 with submission_id 342 
Removing orphaned submission_files entry ID 832 with submission_id 342
Removing orphaned submission_files entry ID 833 with submission_id 342 
Removing orphaned submission_files entry ID 834 with submission_id 342 
Removing orphaned submission_files entry ID 835 with submission_id 342 
Removing orphaned submission_files entry ID 836 with submission_id 342 
Removing orphaned submission_files entry ID 1005 with submission_id 342
Removing orphaned submission_files entry ID 1006 with submission_id 342
Removing orphaned submission_files entry ID 1007 with submission_id 342
Removing orphaned submission_files entry ID 1008 with submission_id 342
Removing orphaned submission_files entry ID 1009 with submission_id 342
Removing orphaned submission_files entry ID 888 with submission_id 355
Removing orphaned submission_files entry ID 929 with submission_id 355
Removing orphaned submission_files entry ID 951 with submission_id 355
Removing orphaned submission_files entry ID 959 with submission_id 355
Removing orphaned submission_files entry ID 960 with submission_id 355 
Removing orphaned submission_files entry ID 941 with submission_id 360
Removing orphaned submission_files entry ID 1030 with submission_id 367
Removing orphaned submission_files entry ID 1031 with submission_id 367
Removing orphaned submission_files entry ID 1032 with submission_id 367
Removing orphaned submission_files entry ID 1033 with submission_id 367
Removing orphaned submission_files entry ID 1034 with submission_id 367
Removing orphaned submission_files entry ID 1035 with submission_id 367
Removing orphaned submission_files entry ID 1321 with submission_id 388
Removing orphaned submission_files entry ID 1322 with submission_id 388
Removing orphaned submission_files entry ID 1324 with submission_id 388
Removing orphaned submission_files entry ID 1356 with submission_id 394
Removing orphaned submission_files entry ID 1357 with submission_id 394
Removing orphaned submission_files entry ID 1392 with submission_id 394
Removing orphaned submission_files entry ID 1398 with submission_id 394
Removing orphaned submission_files entry ID 1399 with submission_id 394
Removing orphaned submission_files entry ID 1400 with submission_id 394
Removing orphaned review_files entry with review_id ID 132 and submission_file_id 1133
Removing orphaned review_files entry with review_id ID 133 and submission_file_id 1133
Removing orphaned review_files entry with review_id ID 137 and submission_file_id 1164
Removing orphaned review_files entry with review_id ID 221 and submission_file_id 1531
Removing orphaned review_files entry with review_id ID 222 and submission_file_id 1531
Removing orphaned review_files entry with review_id ID 230 and submission_file_id 1558
2024-09-19 07:45:01 [migration: OJSv3_3_0UpgradeMigration]
Failed to migrate the settings entity "object_for_review_settings"
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'setting_name' in 'field list' in /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:80
Stack trace:
#0 /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(80): PDO->prepare() 
#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(331): Doctrine\DBAL\Driver\PDOConnection->prepare()
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(664): Illuminate\Database\Connection->Illuminate\Database\{closure}()
#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\Database\Connection->runQueryCallback()
#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\Database\Connection->run() 
#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2270): Illuminate\Database\Connection->select()
#6 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2258): Illuminate\Database\Query\Builder->runSelect()
#7 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2753): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}() 
#8 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2259): Illuminate\Database\Query\Builder->onceWithColumns()
#9 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(114): Illuminate\Database\Query\Builder->get()
#10 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(37): OJSv3_3_0UpgradeMigration->_settingsAsJSON() 
#11 /var/www/html/lib/pkp/classes/install/Installer.inc.php(406): OJSv3_3_0UpgradeMigration->up() 
#12 /var/www/html/lib/pkp/classes/install/Installer.inc.php(252): Installer->executeAction()
#13 /var/www/html/lib/pkp/classes/install/Installer.inc.php(175): Installer->executeInstaller()
#14 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(89): Installer->execute()
#15 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(65): UpgradeTool->upgrade()
#16 /var/www/html/tools/upgrade.php(22): UpgradeTool->execute()
#17 {main} 

Next Doctrine\DBAL\Driver\PDO\Exception: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'setting_name' in 'field list' in /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php:18
Stack trace:
#0 /var/www/html/lib/pkp/lib/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(85): Doctrine\DBAL\Driver\PDO\Exception::new() 
#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(331): Doctrine\DBAL\Driver\PDOConnection->prepare()
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(664): Illuminate\Database\Connection->Illuminate\Database\{closure}()
#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\Database\Connection->runQueryCallback()
#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\Database\Connection->run() 
#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2270): Illuminate\Database\Connection->select()
#6 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2258): Illuminate\Database\Query\Builder->runSelect()
#7 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2753): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}() 
#8 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2259): Illuminate\Database\Query\Builder->onceWithColumns()
#9 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(114): Illuminate\Database\Query\Builder->get()
#10 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(37): OJSv3_3_0UpgradeMigration->_settingsAsJSON() 
#11 /var/www/html/lib/pkp/classes/install/Installer.inc.php(406): OJSv3_3_0UpgradeMigration->up() 
#12 /var/www/html/lib/pkp/classes/install/Installer.inc.php(252): Installer->executeAction()
#13 /var/www/html/lib/pkp/classes/install/Installer.inc.php(175): Installer->executeInstaller()
#14 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(89): Installer->execute()
#15 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(65): UpgradeTool->upgrade()
#16 /var/www/html/tools/upgrade.php(22): UpgradeTool->execute()
#17 {main} 

Next Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'setting_name' in 'field list' (SQL: select `setting_name`, `setting_value`, `s`.* from `object_for_review_settings` as `s` where `setting_type` = object) in /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illumina
te/Database/Connection.php:671
Stack trace:
#0 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\Database\Connection->runQueryCallback()
#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\Database\Connection->run() 
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2270): Illuminate\Database\Connection->select()
#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2258): Illuminate\Database\Query\Builder->runSelect()
#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2753): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}() 
#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2259): Illuminate\Database\Query\Builder->onceWithColumns()
#6 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(114): Illuminate\Database\Query\Builder->get()
#7 /var/www/html/classes/migration/upgrade/OJSv3_3_0UpgradeMigration.inc.php(37): OJSv3_3_0UpgradeMigration->_settingsAsJSON()
#8 /var/www/html/lib/pkp/classes/install/Installer.inc.php(406): OJSv3_3_0UpgradeMigration->up()
#9 /var/www/html/lib/pkp/classes/install/Installer.inc.php(252): Installer->executeAction() 
#10 /var/www/html/lib/pkp/classes/install/Installer.inc.php(175): Installer->executeInstaller()
#11 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(89): Installer->execute()
#12 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.inc.php(65): UpgradeTool->upgrade()
#13 /var/www/html/tools/upgrade.php(22): UpgradeTool->execute()
#14 {main}
2024-09-19 07:45:02 [note: docs/release-notes/README-3.3.0]
2024-09-19 07:45:02 [code: Installer Installer::addPluginVersions]
2024-09-19 07:45:03 [post-install]

Release Notes
----------------------------------------
OJS 3.3.0 Release Notes
Git tag: 3_3_0-18

An then the full list of changes and the "Succesfully" message.

DB dump packaged and ready to send if it's useful to you in some sense.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug:3:Critical A bug that prevents a substantial minority of users from using the software.
Projects
None yet
Development

No branches or pull requests

2 participants