Skip to content

Commit ea652b2

Browse files
author
Melnikov, Igor(imelnikov)
committed
Merge pull request #449 from magento-firedrakes/MAGETWO-49944
[Firedrakes] Performance improvement+Sprint59
2 parents 28f2d03 + e8e2ae1 commit ea652b2

File tree

52 files changed

+2360
-145
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2360
-145
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Bundle\Setup;
7+
8+
use Magento\Framework\Setup\ExternalFKSetup;
9+
use Magento\Framework\Setup\InstallSchemaInterface;
10+
use Magento\Framework\Setup\ModuleContextInterface;
11+
use Magento\Framework\Setup\SchemaSetupInterface;
12+
use Magento\Framework\Model\Entity\MetadataPool;
13+
use Magento\Catalog\Api\Data\ProductInterface;
14+
15+
/**
16+
* @codeCoverageIgnore
17+
*/
18+
class Recurring implements InstallSchemaInterface
19+
{
20+
/**
21+
* @var MetadataPool
22+
*/
23+
protected $metadataPool;
24+
25+
/**
26+
* @var ExternalFKSetup
27+
*/
28+
protected $externalFKSetup;
29+
30+
/**
31+
* @param MetadataPool $metadataPool
32+
* @param ExternalFKSetup $externalFKSetup
33+
*/
34+
public function __construct(
35+
MetadataPool $metadataPool,
36+
ExternalFKSetup $externalFKSetup
37+
) {
38+
$this->metadataPool = $metadataPool;
39+
$this->externalFKSetup = $externalFKSetup;
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*/
45+
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
46+
{
47+
$installer = $setup;
48+
$installer->startSetup();
49+
50+
$listTables = [
51+
'catalog_product_bundle_price_index' => 'entity_id',
52+
'catalog_product_bundle_selection' => 'product_id',
53+
];
54+
foreach ($listTables as $tableName => $columnName) {
55+
$this->addExternalForeignKeys($installer, $tableName, $columnName);
56+
}
57+
58+
$installer->endSetup();
59+
}
60+
61+
/**
62+
* Add external foreign keys
63+
*
64+
* @param SchemaSetupInterface $installer
65+
* @param string $tableName
66+
* @param string $columnName
67+
* @return void
68+
* @throws \Exception
69+
*/
70+
protected function addExternalForeignKeys(SchemaSetupInterface $installer, $tableName, $columnName)
71+
{
72+
$metadata = $this->metadataPool->getMetadata(ProductInterface::class);
73+
$this->externalFKSetup->install(
74+
$installer,
75+
$metadata->getEntityTable(),
76+
$metadata->getIdentifierField(),
77+
$tableName,
78+
$columnName
79+
);
80+
}
81+
}

app/code/Magento/Catalog/etc/di.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,14 @@
562562
</argument>
563563
</arguments>
564564
</type>
565+
<type name="Magento\Framework\Model\Entity\RepositoryFactory">
566+
<arguments>
567+
<argument name="entities" xsi:type="array">
568+
<item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="string">Magento\Catalog\Api\ProductRepositoryInterface</item>
569+
<item name="Magento\Catalog\Api\Data\CategoryInterface" xsi:type="string">Magento\Catalog\Api\CategoryRepositoryInterface</item>
570+
</argument>
571+
</arguments>
572+
</type>
565573
<type name="Magento\Framework\Model\Entity\MetadataPool">
566574
<arguments>
567575
<argument name="metadata" xsi:type="array">
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\CatalogInventory\Setup;
7+
8+
use Magento\Framework\Setup\ExternalFKSetup;
9+
use Magento\Framework\Setup\InstallSchemaInterface;
10+
use Magento\Framework\Setup\ModuleContextInterface;
11+
use Magento\Framework\Setup\SchemaSetupInterface;
12+
use Magento\Framework\Model\Entity\MetadataPool;
13+
use Magento\Catalog\Api\Data\ProductInterface;
14+
15+
/**
16+
* @codeCoverageIgnore
17+
*/
18+
class Recurring implements InstallSchemaInterface
19+
{
20+
/**
21+
* @var MetadataPool
22+
*/
23+
protected $metadataPool;
24+
25+
/**
26+
* @var ExternalFKSetup
27+
*/
28+
protected $externalFKSetup;
29+
30+
/**
31+
* @param MetadataPool $metadataPool
32+
* @param ExternalFKSetup $externalFKSetup
33+
*/
34+
public function __construct(
35+
MetadataPool $metadataPool,
36+
ExternalFKSetup $externalFKSetup
37+
) {
38+
$this->metadataPool = $metadataPool;
39+
$this->externalFKSetup = $externalFKSetup;
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*/
45+
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
46+
{
47+
$installer = $setup;
48+
$installer->startSetup();
49+
50+
$this->addExternalForeignKeys($installer);
51+
52+
$installer->endSetup();
53+
}
54+
55+
/**
56+
* Add external foreign keys
57+
*
58+
* @param SchemaSetupInterface $installer
59+
* @return void
60+
* @throws \Exception
61+
*/
62+
protected function addExternalForeignKeys(SchemaSetupInterface $installer)
63+
{
64+
$metadata = $this->metadataPool->getMetadata(ProductInterface::class);
65+
$this->externalFKSetup->install(
66+
$installer,
67+
$metadata->getEntityTable(),
68+
$metadata->getIdentifierField(),
69+
'cataloginventory_stock_item',
70+
'product_id'
71+
);
72+
}
73+
}

app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Index.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ class Index extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
1414
public function execute()
1515
{
1616
$dirtyRules = $this->_objectManager->create('Magento\CatalogRule\Model\Flag')->loadSelf();
17-
if ($dirtyRules->getState()) {
18-
$this->messageManager->addNotice($this->getDirtyRulesNoticeMessage());
19-
}
20-
17+
$this->_eventManager->dispatch(
18+
'catalogrule_dirty_notice',
19+
['dirty_rules' => $dirtyRules, 'message' => $this->getDirtyRulesNoticeMessage()]
20+
);
2121
$this->_initAction()->_addBreadcrumb(__('Catalog'), __('Catalog'));
2222
$this->_view->getPage()->getConfig()->getTitle()->prepend(__('Catalog Price Rule'));
2323
$this->_view->renderLayout();

app/code/Magento/CatalogRule/Model/Indexer/AbstractIndexer.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ abstract class AbstractIndexer implements IndexerActionInterface, MviewActionInt
2323
*/
2424
protected $_eventManager;
2525

26+
/**
27+
* @var \Magento\Framework\App\CacheInterface
28+
*/
29+
private $cacheManager;
30+
2631
/**
2732
* @param IndexBuilder $indexBuilder
2833
* @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -55,6 +60,8 @@ public function executeFull()
5560
{
5661
$this->indexBuilder->reindexFull();
5762
$this->_eventManager->dispatch('clean_cache_by_tags', ['object' => $this]);
63+
//TODO: remove after fix fpc. MAGETWO-49121
64+
$this->getCacheManager()->clean($this->getIdentities());
5865
}
5966

6067
/**
@@ -67,7 +74,8 @@ public function getIdentities()
6774
{
6875
return [
6976
\Magento\Catalog\Model\Category::CACHE_TAG,
70-
\Magento\Catalog\Model\Product::CACHE_TAG
77+
\Magento\Catalog\Model\Product::CACHE_TAG,
78+
\Magento\Framework\App\Cache\Type\Block::CACHE_TAG
7179
];
7280
}
7381

@@ -121,4 +129,19 @@ public function executeRow($id)
121129
* @return void
122130
*/
123131
abstract protected function doExecuteRow($id);
132+
133+
/**
134+
* @return \Magento\Framework\App\CacheInterface|mixed
135+
*
136+
* @deprecated
137+
*/
138+
private function getCacheManager()
139+
{
140+
if ($this->cacheManager === null) {
141+
$this->cacheManager = \Magento\Framework\App\ObjectManager::getInstance()->get(
142+
'Magento\Framework\App\CacheInterface'
143+
);
144+
}
145+
return $this->cacheManager;
146+
}
124147
}

app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,8 @@ protected function applyAllRules(Product $product = null)
441441
}
442442
}
443443

444+
$ruleData['from_time'] = $this->roundTime($ruleData['from_time']);
445+
$ruleData['to_time'] = $this->roundTime($ruleData['to_time']);
444446
/**
445447
* Build prices for each day
446448
*/
@@ -717,4 +719,17 @@ protected function critical($e)
717719
{
718720
$this->logger->critical($e);
719721
}
722+
723+
/**
724+
* @param int $timeStamp
725+
* @return int
726+
*/
727+
private function roundTime($timeStamp)
728+
{
729+
if (is_numeric($timeStamp) && $timeStamp != 0) {
730+
$timeStamp = $this->dateTime->timestamp($this->dateTime->date('Y-m-d 00:00:00'));
731+
}
732+
733+
return $timeStamp;
734+
}
720735
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\CatalogRule\Observer;
7+
8+
use Magento\Framework\Event\Observer;
9+
use Magento\Framework\Event\ObserverInterface;
10+
11+
/**
12+
* Class AddDirtyRulesNotice
13+
*/
14+
class AddDirtyRulesNotice implements ObserverInterface
15+
{
16+
/**
17+
* @var \Magento\Framework\Message\ManagerInterface
18+
*/
19+
private $messageManager;
20+
21+
/**
22+
* AddDirtyRulesNotice constructor.
23+
*
24+
* @param \Magento\Framework\Message\ManagerInterface $messageManager
25+
*/
26+
public function __construct(\Magento\Framework\Message\ManagerInterface $messageManager)
27+
{
28+
$this->messageManager = $messageManager;
29+
}
30+
31+
/**
32+
* @param Observer $observer
33+
* @return void
34+
*/
35+
public function execute(\Magento\Framework\Event\Observer $observer)
36+
{
37+
$dirtyRules = $observer->getData('dirty_rules');
38+
if (!empty($dirtyRules)) {
39+
if ($dirtyRules->getState()) {
40+
$this->messageManager->addNotice($observer->getData('message'));
41+
}
42+
}
43+
}
44+
}

app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/AbstractIndexerTest.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
namespace Magento\CatalogRule\Test\Unit\Model\Indexer;
88

9+
use Magento\CatalogRule\Model\Indexer\AbstractIndexer;
10+
911
class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
1012
{
1113
/**
@@ -14,7 +16,7 @@ class AbstractIndexerTest extends \PHPUnit_Framework_TestCase
1416
protected $indexBuilder;
1517

1618
/**
17-
* @var \Magento\CatalogRule\Model\Indexer\AbstractIndexer|\PHPUnit_Framework_MockObject_MockObject
19+
* @var AbstractIndexer|\PHPUnit_Framework_MockObject_MockObject
1820
*/
1921
protected $indexer;
2022

@@ -34,12 +36,17 @@ protected function setUp()
3436
$this->indexBuilder = $this->getMock('Magento\CatalogRule\Model\Indexer\IndexBuilder', [], [], '', false);
3537

3638
$this->indexer = $this->getMockForAbstractClass(
37-
'Magento\CatalogRule\Model\Indexer\AbstractIndexer',
39+
AbstractIndexer::class,
3840
[
3941
$this->indexBuilder,
4042
$this->_eventManagerMock
4143
]
4244
);
45+
$cacheMock = $this->getMock(\Magento\Framework\App\CacheInterface::class);
46+
$reflection = new \ReflectionClass(AbstractIndexer::class);
47+
$reflectionProperty = $reflection->getProperty('cacheManager');
48+
$reflectionProperty->setAccessible(true);
49+
$reflectionProperty->setValue($this->indexer, $cacheMock);
4350
}
4451

4552
/**

0 commit comments

Comments
 (0)