After upgrading to Tuleap 16.11, we are facing to an issue concerning the new 'Artifact link' field. The update of some artefacts fails with an Internal serveur error:
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: PHP Fatal error: Uncaught TypeError: Tuleap\Tracker\Artifact\Changeset\ArtifactLink\SubmittedValueConvertor::convert(): Argument #1 ($submitted_value) must be of type array, string given, c>
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: Stack trace:
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #0 /usr/share/tuleap/plugins/tracker/include/FormElement/Field/ArtifactLink/ArtifactLinkField.php(1398): Tuleap\Tracker\Artifact\Changeset\ArtifactLink\SubmittedValueConvertor->convert()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #1 /usr/share/tuleap/plugins/tracker/include/Workflow/WorkflowUpdateChecker.php(71): Tuleap\Tracker\FormElement\Field\ArtifactLink\ArtifactLinkField->hasChanges()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #2 /usr/share/tuleap/plugins/tracker/include/Workflow/WorkflowUpdateChecker.php(50): Tuleap\Tracker\Workflow\WorkflowUpdateChecker->fieldHasChanges()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #3 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/NewChangesetFieldsValidator.php(61): Tuleap\Tracker\Workflow\WorkflowUpdateChecker->canFieldBeUpdated()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #4 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/FieldsValidator.php(89): Tracker_Artifact_Changeset_NewChangesetFieldsValidator->validateField()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #5 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/FieldsValidator.php(64): Tracker_Artifact_Changeset_FieldsValidator->validateOneField()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #6 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/NewChangesetValidator.php(59): Tracker_Artifact_Changeset_FieldsValidator->validate()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #7 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/NewChangesetCreator.php(72): Tuleap\Tracker\Artifact\Changeset\NewChangesetValidator->validateNewChangeset()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #8 /usr/share/tuleap/src/vendor/paragonie/easydb/src/EasyDB.php(1263): Tuleap\Tracker\Artifact\Changeset\NewChangesetCreator->{closure:Tuleap\Tracker\Artifact\Changeset\NewChangesetCreator::>
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #9 /usr/share/tuleap/src/common/DB/DBTransactionExecutorWithConnection.php(44): ParagonIE\EasyDB\EasyDB->tryFlatTransaction()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #10 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Changeset/NewChangesetCreator.php(61): Tuleap\DB\DBTransactionExecutorWithConnection->execute()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #11 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Link/ArtifactReverseLinksUpdater.php(117): Tuleap\Tracker\Artifact\Changeset\NewChangesetCreator->create()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #12 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Link/ArtifactReverseLinksUpdater.php(93): Tuleap\Tracker\Artifact\Link\ArtifactReverseLinksUpdater->saveChangesets()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #13 /usr/share/tuleap/src/common/NeverThrow/Ok.php(70): Tuleap\Tracker\Artifact\Link\ArtifactReverseLinksUpdater->{closure:Tuleap\Tracker\Artifact\Link\ArtifactReverseLinksUpdater::updateArt>
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #14 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Link/ArtifactReverseLinksUpdater.php(93): Tuleap\NeverThrow\Ok->andThen()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #15 /usr/share/tuleap/plugins/tracker/include/Action/UpdateArtifactAction.php(108): Tuleap\Tracker\Artifact\Link\ArtifactReverseLinksUpdater->updateArtifactAndItsLinks()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #16 /usr/share/tuleap/plugins/tracker/include/Tracker/Artifact/Artifact.php(950): Tuleap\Tracker\Action\UpdateArtifactAction->process()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #17 /usr/share/tuleap/plugins/tracker/include/Tracker/TrackerManager.php(116): Tuleap\Tracker\Artifact\Artifact->process()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #18 /usr/share/tuleap/plugins/tracker/include/Tracker/TrackerManager.php(169): TrackerManager->processSubElement()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #19 /usr/share/tuleap/plugins/tracker/include/TrackerPluginDefaultController.php(45): TrackerManager->process()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #20 /usr/share/tuleap/src/common/Request/FrontRouter.php(251): Tuleap\Tracker\TrackerPluginDefaultController->process()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #21 /usr/share/tuleap/src/common/Request/FrontRouter.php(109): Tuleap\Request\FrontRouter->routeHandler()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #22 /usr/share/tuleap/src/www/index.php(50): Tuleap\Request\FrontRouter->route()
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: #23 {main}
sept. 02 14:06:23 tuleap.c-s.fr php[4020142]: thrown in /usr/share/tuleap/plugins/tracker/include/Artifact/Changeset/ArtifactLink/SubmittedValueConvertor.php on line 58
We noticed that, with an artefact that have no issue, the first argument of the method convert()
is an Array like
Array
(
[new_values] =>
[removed_values] => Array
(
)
[list_of_artifactlinkinfo] => Array
(
[3667] => Tracker_ArtifactLinkInfo Object
(
[artifact_id:protected] => 3667
[keyword:protected] => FT
[group_id:protected] => 174
[tracker_id:protected] => 405
[last_changeset_id:protected] => 47936
[type:Tracker_ArtifactLinkInfo:private] => failed
[artifact:Tracker_ArtifactLinkInfo:private] =>
)
)
)
But, with an artefact that fail, the first argument is a String like
{"field_id":65523,"all_links":[{"id":195184,"direction":"forward","type":""}]}
We can't see visual obvious differences between the two artefacts to explain the difference in behavior.
The issue occurs only with the new artifact link interface.
Unfortunately, we didn't find a way to reproduce such a case from scratch. Don't hesitate to suggest us things to investigate.