-
Notifications
You must be signed in to change notification settings - Fork 9.3k
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
Something went wrong while saving the category in Magento 2.1.9 #11055
Comments
We have the same problems, it seems like it's due to GTID-based replication in MySQL. MySQL cloud providers seems to use GTID enabled because it's best to protect against data loss during replica creation and failover, and it also makes replication more robust. Creating categories seems to work on MySQL with GTID disabled at least when it's on localhost. It also works with google SQL instance when using MySQL First Generation. |
Hello, We are facing the exact issue for adding subcategories after upgrading from Magento EE2.1.6 to 2.1.9, we are able to add new root categories and sub categories inside but not to the old ones which we created in 2.1.6.. We are using Google Cloud MySql Second generation too, where we have verified that the GTID is enabled by default, and cannot be turned off. What is the solution for this issue, as we are unable to Add sub categories to our old root categories. Please resolve this issue or send us a workaround on how to update them. Please note that we are also using Magento EE2.1.9 with Split Database. Thank you. |
This is also an issue for me. Using MySQL 5.7 on Google Cloud MySql Second Generation. I can't reindex Product EAV as it is giving the General error:
Is there a workaround for this? I would really like to use replication with my Google Cloud SQL. After testing, it appears that this same error occurs even if you do not have replication enabled, but are using binary logs. In other words, any time that you are using GTID's it appears to cause a problem. |
This has been a problem since magento 1. We were using Rackspace HA database setup and it broke the checkout. This was 3 years ago already and now I read it still exists in the latest versions. So basically magento does not support proper HA on the biggest clouds, because they ALL use GTID and it can't be turned off. |
I have same issue. Magento 2.1.8. |
We are using the Google Cloud SQL server where we encountered the same problem.
There for we downgraded to MySQL 1e gen. 5.6 in order to evade the issue. |
Maybe it can just change the This should theoretically solve the GTID consistency problem. PS: @pareshpa you can try to format your output, maybe using Syntax highlighting: https://guides.github.com/features/mastering-markdown. |
Same problem here after upgrading from Magento 2.1.9 to 2.2.0. |
did you disabled GTID?
…---- On Thu, 26 Oct 2017 19:03:58 +0300 gvi <[email protected]> wrote ----
Same problem here when upgrading from Magento 2.1.9 to 2.2.0.
My server in on Ubuntu 16.04 with Mysql 5.7.19 and php 7.0.24.
How should I fix it ?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.
|
GTID replication is useful. So disabling GTID isn't cool. |
How to disable it ? I've tried this : But got an error at the first command : Also, from this command, I can't see anything showing that I'm using GTID : |
@pareshpa, thank you for your report. |
@magento-engcom-team I think you need to reproduce it by using a clean installation + Google MySQL 2nd Gen instance (or other sql with same issue). |
@pareshpa, thank you for your report. |
@magento-engcom-team we have the same problem with the same version. But we get that only on a second store-view. The default store view is working. |
@magento-engcom-team same problem here with GTID and MySQL 2nd Gen instance |
This is still an issue and unforchunately broke a lot of my client installs which are all running on Google Compute Engine. @magento-engcom-team please don't use canned responces about non-reproducable bugs without actually trying to reproduce. This issue exists in all GCE Cloud SQL 2nd gen instances. It's simple to reproduce outside of GCE by using the following flag in your MySQL config:
|
As per my knowledge, GCE does not allow to disable the GTID. If you have any idea regarding how to disable it then please let me know. |
It's due to GTID-based replication in MySQL. So to replicate you need to set up an MySQL server with GTID-based replication. Install an new Magento 2.1.8 or later and try to add a subcategory under a store view root category and the error appears. I have had it on several installations and the only solution was to downgrade or move MySQL to a none GTID-based replication. @magento-engcom-team How to re open this issue? |
@magento-engcom-team This should be opened again. We have someone trying to solve this here |
Somebody suggested that this flag could be disabled in google SQL cloud by
disabling the binary logs in the backup section. Since I don't use database
replication I gave it a try and it seem to work. At least I don't have
errors in the cron_schedule table anymore. This could be a work around if
you don't need replication and point-in-time backup recovery.
…On Fri, 10 Nov 2017 at 08:07 nordicwebteam ***@***.***> wrote:
@magento-engcom-team <https://github.com/magento-engcom-team> This should
be opened again.
We have someone trying to solve this here
https://github.com/bangerkuwranger/Magento-2-GTID-Safe-URL-Rewrite-Tables
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#11055 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AEGpQJigC_J-sq-hf8rjIX8Uk32bki75ks5s0_YjgaJpZM4PkH0y>
.
|
@NordicWebTeam Great ! It fixed the problem for me. |
@NordicWebTeam the module you've linked to DOES work, but it's currently not transaction safe... The short version of the caveat is that you are likely to get exceptions and/or data issues if more than one admin user is saving a category at a time... so I DON'T currently recommend this for use in production. The longer version: Alternatively, as mentioned, any cloud sql instances, if they don't require binary safe replication, can have binary logging disabled (make sure to remove any failover/read clones in gcloud, if that's your system), and set the trust_binary_log_creator flag on your instance. Your uptime may suffer... but you can use the admin category save during the process. I don't know if the Magento team is planning on resolving this issue in any future releases, but given the way it is structuring tables (I'm glaring warily at the preponderance of sql triggers...), binary safe operation, and DB scalability/uptime in general, is less of a priority than application performance in overall design... so I wouldn't hold my breath. Not necessarily what we'd all like, but that's their choice to make. I'll drop another note in this thread once the module appears stable enough for production use, for anyone who is facing the same issue. |
@magento-engcom-team We've reproduced the issue with a clean installation of v2.1.9 using a Google Cloud SQL 2nd gen instance as well... the important step is to create a failover (turn on high-availability), which will guarantee that the temporary table creation in the category url rewrite module will trigger an exception because it violates GTID consistency. This appears to be true for any high-availability SQL-compatible cloud service, but the specific concerns for GCloud are detailed here: https://cloud.google.com/sql/docs/mysql/features#differences |
The module by @bangerkuwranger actually worked partly for me. I was able to create new subcategories (in the backend: Catalog > Categories), but I was still unable to change the position of subcategories. When running bin/magento indexer:reindex, I still had an error message:
To fix this issue temporarily, I finally moved my database from Aliyun RDS cloud to my own MySQL server. My Aliyun RDS server is running MySQL 5.6 with enforce_gtid_consistency=ON but I can upgrade to MySQL 5.7, although it's also set to enforce_gtid_consistency=ON, I'm still wondering: could this upgrade fix the issue ?
|
@Gvigner I don't think that will fix the issue, because certain SQL statements will not work (CREATE TEMPORARY TABLE for example) inside of a transaction. As I understand it, your only option is use SQL statements that don't implicitly commit - see here https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html That is part of the reason why this feels so important to have in the base Magento instead of as a plugin. GTID consistency is crucial for high-availability web stores. If you are in the midst of a Black Friday or Cyber Monday sales push, losing even a minute of data can be catastrophic. Replication and binary logging are very important in reducing this risk. |
@magento-engcom-team Please reopen the issue and |
I got this answer from Magento Support regarding same issue on the EE version (New installation of Magento EE 2.2). "After researching this closer I found that we do not support GTID and have seen a couple of problems including this one. It looks like my colleague opened a feature enhancement to get this looked at at some point. I recommend you refer to the release notes when we release new versions to see if we added anything to accommodate this behavior." So it looks like @magento-engcom-team should be aware of the problem somehow. |
@scrivvles Thanks for the reply but I have no idea how to implement "SQL statements that don't implicitly commit", the only option I see for me with Aliyun RDS for the moment is to downgrade to MySQL 5.5. |
@pareshpa According to @magento-engcom-team you could reopen this issue. |
We are facing this same issue running Magento 2.1.10 running on a Google Cloud MySQL 2nd Gen 5.7 instance. Turning off binary logging does work for us but is hardly a viable long term solution. |
@benmarks This is the issue I was talking about, disabling GTID is hardly the right solution as GTID helps keeping track of replication. The reason this happens is certain Magento operations triggers up the reindex of the store where you use the DDL When
|
Hey there, in Magento we usually use But we don't recommend to replicate the process of calculation to Slaves, what we recommend to do is just replicate given results.
|
Btw we have this recommendation documented in the Magento Dev Docs since 2.0 version of Magento http://devdocs.magento.com/guides/v2.2/config-guide/multi-master/multi-master_slavedb.html
To do this, add the following line to your my.cnf file on your slave instances:
|
How is the recommended policy for organizations on cloud providers then? Since if you are using a managed service in the cloud and not a VM for your database, you can't edit The MySQL doc suggests a way to alter it through Which also doesn't work with two cloud providers I tried using root: CHANGE REPLICATION FILTER
REPLICATE_WILD_IGNORE_TABLE = ('%.tmp_%'); Response:
Bottom of line, the way the Magento core is dealing right now with reindex does not match the best practices. I am more than happy to help you all to find a more definitive and satisfying solution for everyone. The way this is right now it may be marginalizing some organizations. Looking forward to working with you! |
@gabidavila MySQL Replication with GTIDs does not support usage temporary tables inside transactions
https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-restrictions.html Currently, Magento Indexation mechanism and its base ResourceModel looks like public function syncData()
{
$this->beginTransaction();
try {
/**
* Can't use truncate because of transaction
*/
$this->getConnection()->delete($this->getMainTable());
$this->insertFromTable($this->getIdxTable(), $this->getMainTable(), false);
$this->commit();
} catch (\Exception $e) {
$this->rollBack();
throw $e;
}
return $this;
} Index table resolved by dedicated StrategyInterface /**
* Get index table name with additional suffix
*
* @param string $table
* @return string
*/
public function getIdxTable($table = null)
{
if ($table) {
return $this->tableStrategy->prepareTableName($table);
}
return $this->tableStrategy->prepareTableName($this->getMainTable());
} You can find Strategy Interface here - There are two implementations of this interface:
Currently, TemporaryTableStrategy used for <type name="Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable">
<arguments>
<argument name="tableStrategy" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\TemporaryTableStrategy</argument>
<argument name="connectionName" xsi:type="string">indexer</argument>
</arguments>
</type>
<type name="Magento\Downloadable\Model\ResourceModel\Indexer\Price">
<arguments>
<argument name="tableStrategy" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\TemporaryTableStrategy</argument>
<argument name="connectionName" xsi:type="string">indexer</argument>
</arguments>
</type>
<type name="Magento\Bundle\Model\ResourceModel\Indexer\Price">
<arguments>
<argument name="tableStrategy" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\TemporaryTableStrategy</argument>
<argument name="connectionName" xsi:type="string">indexer</argument>
</arguments>
</type>
<type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice">
<arguments>
<argument name="tableStrategy" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\TemporaryTableStrategy</argument>
<argument name="connectionName" xsi:type="string">indexer</argument>
</arguments>
</type>
<type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Source">
<arguments>
<argument name="tableStrategy" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\TemporaryTableStrategy</argument>
<argument name="connectionName" xsi:type="string">indexer</argument>
</arguments>
</type> It's possible to re-configure with DI.xml and provide default strategy \Magento\Framework\Indexer\Table\Strategy instead of TemporaryTable one. But not sure that it's the only place in Magento where we have Temporary Table Usage inside Transactions |
Preconditions
Steps to reproduce
Expected result
Actual result
Exception Log:
Next Zend_Db_Statement_Exception: SQLSTATE[HY000]: General error: 1787 Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions., query was: CREATE TEMPORARY TABLE
tmp_select_679617e6f7a49c490f1a60d1a78f7175
(PRIMARY KEY(url_rewrite_id
),INDEXHASHKEY_ENTITY_STORE
USING HASH(hash_key
),INDEXENTITY_STORE
USING HASH(entity_id
,store_id
)) ENGINE=INNODB
IGNORE (SELECTe
.*, CONCAT(e.store_id,'_', e.entity_id) AShash_key
FROMurl_rewrite
ASe
WHERE (entity_type = 'category') AND (entity_id IN('134'))) in /var/www/html/training_magento/public/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php:235Stack trace:
#0 /var/www/html/training_magento/public/vendor/magento/framework/DB/Statement/Pdo/Mysql.php(95): Zend_Db_Statement_Pdo->_execute(Array)
#1 /var/www/html/training_magento/public/vendor/magento/zendframework1/library/Zend/Db/Statement.php(303): Magento\Framework\DB\Statement\Pdo\Mysql->_execute(Array)
#2 /var/www/html/training_magento/public/vendor/magento/zendframework1/library/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
#3 /var/www/html/training_magento/public/vendor/magento/zendframework1/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('CREATE TEMPORAR...', Array)
#4 /var/www/html/training_magento/public/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(465): Zend_Db_Adapter_Pdo_Abstract->query('CREATE TEMPORAR...', Array)
#5 /var/www/html/training_magento/public/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(520): Magento\Framework\DB\Adapter\Pdo\Mysql->_query('CREATE TEMPORAR...', Array)
#6 /var/www/html/training_magento/public/vendor/magento/framework/DB/TemporaryTableService.php(145): Magento\Framework\DB\Adapter\Pdo\Mysql->query('CREATE TEMPORAR...', Array)
#7 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/Map/DataCategoryUrlRewriteDatabaseMap.php(116): Magento\Framework\DB\TemporaryTableService->createFromSelect(Object(Magento\Framework\DB\Select), Object(Magento\Framework\DB\Adapter\Pdo\Mysql), Array)
#8 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/Map/DataCategoryUrlRewriteDatabaseMap.php(76): Magento\CatalogUrlRewrite\Model\Map\DataCategoryUrlRewriteDatabaseMap->generateData('134')
#9 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/Map/DataCategoryUrlRewriteDatabaseMap.php(147): Magento\CatalogUrlRewrite\Model\Map\DataCategoryUrlRewriteDatabaseMap->generateTableAdapter('134')
#10 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/Map/UrlRewriteFinder.php(96): Magento\CatalogUrlRewrite\Model\Map\DataCategoryUrlRewriteDatabaseMap->getData('134', '3_134')
#11 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/Category/CurrentUrlRewritesRegenerator.php(93): Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder->findAllByData('134', '3', 'category', '134')
#12 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/CategoryUrlRewriteGenerator.php(190): Magento\CatalogUrlRewrite\Model\Category\CurrentUrlRewritesRegenerator->generate('3', Object(Magento\Catalog\Model\Category\Interceptor), '134')
#13 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/CategoryUrlRewriteGenerator.php(120): Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator->generateForSpecificStoreView('3', Object(Magento\Catalog\Model\Category\Interceptor), '134')
#14 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Model/CategoryUrlRewriteGenerator.php(94): Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator->generateForGlobalScope(Object(Magento\Catalog\Model\Category\Interceptor), false, '134')
#15 /var/www/html/training_magento/public/vendor/magento/module-catalog-url-rewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php(96): Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator->generate(Object(Magento\Catalog\Model\Category\Interceptor))
#16 /var/www/html/training_magento/public/vendor/magento/framework/Event/Invoker/InvokerDefault.php(73): Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver->execute(Object(Magento\Framework\Event\Observer))
#17 /var/www/html/training_magento/public/vendor/magento/framework/Event/Invoker/InvokerDefault.php(61): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver), Object(Magento\Framework\Event\Observer))
#18 /var/www/html/training_magento/public/vendor/magento/framework/Event/Manager.php(66): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
#19 /var/www/html/training_magento/public/var/generation/Magento/Framework/Event/Manager/Proxy.php(95): Magento\Framework\Event\Manager->dispatch('catalog_categor...', Array)
#20 /var/www/html/training_magento/public/vendor/magento/framework/Model/AbstractModel.php(802): Magento\Framework\Event\Manager\Proxy->dispatch('catalog_categor...', Array)
#21 /var/www/html/training_magento/public/vendor/magento/module-catalog/Model/Category.php(1080): Magento\Framework\Model\AbstractModel->afterSave()
#22 /var/www/html/training_magento/public/vendor/magento/framework/EntityManager/Observer/AfterEntitySave.php(34): Magento\Catalog\Model\Category->afterSave()
#23 /var/www/html/training_magento/public/vendor/magento/framework/Event/Invoker/InvokerDefault.php(73): Magento\Framework\EntityManager\Observer\AfterEntitySave->execute(Object(Magento\Framework\Event\Observer))
#24 /var/www/html/training_magento/public/vendor/magento/framework/Event/Invoker/InvokerDefault.php(61): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\Framework\EntityManager\Observer\AfterEntitySave), Object(Magento\Framework\Event\Observer))
#25 /var/www/html/training_magento/public/vendor/magento/framework/Event/Manager.php(66): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
#26 /var/www/html/training_magento/public/var/generation/Magento/Framework/Event/Manager/Proxy.php(95): Magento\Framework\Event\Manager->dispatch('magento_catalog...', Array)
#27 /var/www/html/training_magento/public/vendor/magento/framework/EntityManager/EventManager.php(51): Magento\Framework\Event\Manager\Proxy->dispatch('magento_catalog...', Array)
#28 /var/www/html/training_magento/public/vendor/magento/framework/EntityManager/Operation/Create.php(108): Magento\Framework\EntityManager\EventManager->dispatchEntityEvent('Magento\Catalog...', 'save_after', Array)
#29 /var/www/html/training_magento/public/vendor/magento/framework/EntityManager/EntityManager.php(87): Magento\Framework\EntityManager\Operation\Create->execute(Object(Magento\Catalog\Model\Category\Interceptor), Array)
#30 /var/www/html/training_magento/public/vendor/magento/module-catalog/Model/ResourceModel/Category.php(1041): Magento\Framework\EntityManager\EntityManager->save(Object(Magento\Catalog\Model\Category\Interceptor))
#31 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Catalog\Model\ResourceModel\Category->save(Object(Magento\Catalog\Model\Category\Interceptor))
#32 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Catalog\Model\ResourceModel\Category\Interceptor->___callParent('save', Array)
#33 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Catalog...', 'save', Object(Magento\Catalog\Model\ResourceModel\Category\Interceptor), Array, 'catalogsearchFu...')
#34 /var/www/html/training_magento/public/vendor/magento/module-catalog-search/Model/Indexer/Fulltext/Plugin/Category.php(43): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Catalog\Model\Category\Interceptor))
#35 /var/www/html/training_magento/public/vendor/magento/module-catalog-search/Model/Indexer/Fulltext/Plugin/Category.php(29): Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Category->addCommitCallback(Object(Magento\Catalog\Model\ResourceModel\Category\Interceptor), Object(Closure), Object(Magento\Catalog\Model\Category\Interceptor))
#36 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Category->aroundSave(Object(Magento\Catalog\Model\ResourceModel\Category\Interceptor), Object(Closure), Object(Magento\Catalog\Model\Category\Interceptor))
#37 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Catalog...', 'save', Object(Magento\Catalog\Model\ResourceModel\Category\Interceptor), Array, 'clean_cache')
#38 /var/www/html/training_magento/public/vendor/magento/framework/App/Cache/FlushCacheByTags.php(71): Magento\Catalog\Model\ResourceModel\Category\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Catalog\Model\Category\Interceptor))
#39 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\App\Cache\FlushCacheByTags->aroundSave(Object(Magento\Catalog\Model\ResourceModel\Category\Interceptor), Object(Closure), Object(Magento\Catalog\Model\Category\Interceptor))
#40 /var/www/html/training_magento/public/var/generation/Magento/Catalog/Model/ResourceModel/Category/Interceptor.php(52): Magento\Catalog\Model\ResourceModel\Category\Interceptor->___callPlugins('save', Array, Array)
#41 /var/www/html/training_magento/public/vendor/magento/framework/Model/AbstractModel.php(631): Magento\Catalog\Model\ResourceModel\Category\Interceptor->save(Object(Magento\Catalog\Model\Category\Interceptor))
#42 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(146): Magento\Framework\Model\AbstractModel->save()
#43 /var/www/html/training_magento/public/var/generation/Magento/Catalog/Model/Category/Interceptor.php(26): Magento\Catalog\Model\Category\Interceptor->___callPlugins('save', Array, Array)
#44 /var/www/html/training_magento/public/vendor/magento/module-catalog/Controller/Adminhtml/Category/Save.php(212): Magento\Catalog\Model\Category\Interceptor->save()
#45 /var/www/html/training_magento/public/vendor/magento/framework/App/Action/Action.php(102): Magento\Catalog\Controller\Adminhtml\Category\Save->execute()
#46 /var/www/html/training_magento/public/vendor/magento/module-backend/App/AbstractAction.php(226): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#47 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#48 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor->___callParent('dispatch', Array)
#49 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor), Array, 'adminAuthentica...')
#50 /var/www/html/training_magento/public/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(143): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#51 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#52 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor), Array, 'adminMassaction...')
#53 /var/www/html/training_magento/public/vendor/magento/module-backend/App/Action/Plugin/MassactionKey.php(33): Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#54 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Backend\App\Action\Plugin\MassactionKey->aroundDispatch(Object(Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#55 /var/www/html/training_magento/public/var/generation/Magento/Catalog/Controller/Adminhtml/Category/Save/Interceptor.php(26): Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor->___callPlugins('dispatch', Array, Array)
#56 /var/www/html/training_magento/public/vendor/magento/framework/App/FrontController.php(55): Magento\Catalog\Controller\Adminhtml\Category\Save\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#57 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#58 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#59 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#60 /var/www/html/training_magento/public/vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#61 /var/www/html/training_magento/public/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#62 /var/www/html/training_magento/public/var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#63 /var/www/html/training_magento/public/vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#64 /var/www/html/training_magento/public/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#65 /var/www/html/training_magento/public/pub/index.php(37): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#66 {main} [] []
The text was updated successfully, but these errors were encountered: