Skip to content

Commit fdcee4f

Browse files
committed
Merge remote-tracking branch 'l3/MC-40409' into L3-PR-20210324
2 parents 8edfbd4 + 9b9fa5d commit fdcee4f

File tree

2 files changed

+63
-19
lines changed

2 files changed

+63
-19
lines changed

app/code/Magento/Elasticsearch/SearchAdapter/Dynamic/DataProvider.php

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
use Magento\Elasticsearch\SearchAdapter\QueryAwareInterface;
99
use Magento\Elasticsearch\SearchAdapter\QueryContainer;
10+
use Magento\Framework\App\ObjectManager;
11+
use Psr\Log\LoggerInterface;
1012

1113
/**
1214
* Elastic search data provider
@@ -83,6 +85,11 @@ class DataProvider implements \Magento\Framework\Search\Dynamic\DataProviderInte
8385
*/
8486
private $queryContainer;
8587

88+
/**
89+
* @var LoggerInterface
90+
*/
91+
private $logger;
92+
8693
/**
8794
* @param \Magento\Elasticsearch\SearchAdapter\ConnectionManager $connectionManager
8895
* @param \Magento\Elasticsearch\Model\Adapter\FieldMapperInterface $fieldMapper
@@ -94,7 +101,7 @@ class DataProvider implements \Magento\Framework\Search\Dynamic\DataProviderInte
94101
* @param string $indexerId
95102
* @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
96103
* @param QueryContainer|null $queryContainer
97-
*
104+
* @param LoggerInterface|null $logger
98105
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
99106
*/
100107
public function __construct(
@@ -107,7 +114,8 @@ public function __construct(
107114
\Magento\Elasticsearch\SearchAdapter\SearchIndexNameResolver $searchIndexNameResolver,
108115
$indexerId,
109116
\Magento\Framework\App\ScopeResolverInterface $scopeResolver,
110-
QueryContainer $queryContainer = null
117+
QueryContainer $queryContainer = null,
118+
LoggerInterface $logger = null
111119
) {
112120
$this->connectionManager = $connectionManager;
113121
$this->fieldMapper = $fieldMapper;
@@ -119,6 +127,7 @@ public function __construct(
119127
$this->indexerId = $indexerId;
120128
$this->scopeResolver = $scopeResolver;
121129
$this->queryContainer = $queryContainer;
130+
$this->logger = $logger ?? ObjectManager::getInstance()->get(LoggerInterface::class);
122131
}
123132

124133
/**
@@ -154,16 +163,19 @@ public function getAggregations(\Magento\Framework\Search\Dynamic\EntityStorage
154163
],
155164
];
156165

157-
$queryResult = $this->connectionManager->getConnection()
158-
->query($query);
159-
160-
if (isset($queryResult['aggregations']['prices'])) {
161-
$aggregations = [
162-
'count' => $queryResult['aggregations']['prices']['count'],
163-
'max' => $queryResult['aggregations']['prices']['max'],
164-
'min' => $queryResult['aggregations']['prices']['min'],
165-
'std' => $queryResult['aggregations']['prices']['std_deviation'],
166-
];
166+
try {
167+
$queryResult = $this->connectionManager->getConnection()
168+
->query($query);
169+
if (isset($queryResult['aggregations']['prices'])) {
170+
$aggregations = [
171+
'count' => $queryResult['aggregations']['prices']['count'],
172+
'max' => $queryResult['aggregations']['prices']['max'],
173+
'min' => $queryResult['aggregations']['prices']['min'],
174+
'std' => $queryResult['aggregations']['prices']['std_deviation'],
175+
];
176+
}
177+
} catch (\Exception $e) {
178+
$this->logger->critical($e);
167179
}
168180

169181
return $aggregations;
@@ -202,8 +214,6 @@ public function getAggregation(
202214
$range,
203215
\Magento\Framework\Search\Dynamic\EntityStorage $entityStorage
204216
) {
205-
$result = [];
206-
207217
$query = $this->getBasicSearchQuery($entityStorage);
208218

209219
$fieldName = $this->fieldMapper->getFieldName($bucket->getField());
@@ -217,11 +227,16 @@ public function getAggregation(
217227
],
218228
];
219229

220-
$queryResult = $this->connectionManager->getConnection()
221-
->query($query);
222-
foreach ($queryResult['aggregations']['prices']['buckets'] as $bucket) {
223-
$key = (int)($bucket['key'] / $range + 1);
224-
$result[$key] = $bucket['doc_count'];
230+
$result = [];
231+
try {
232+
$queryResult = $this->connectionManager->getConnection()
233+
->query($query);
234+
foreach ($queryResult['aggregations']['prices']['buckets'] as $bucket) {
235+
$key = (int)($bucket['key'] / $range + 1);
236+
$result[$key] = $bucket['doc_count'];
237+
}
238+
} catch (\Exception $e) {
239+
$this->logger->critical($e);
225240
}
226241

227242
return $result;

app/code/Magento/Elasticsearch/Test/Unit/SearchAdapter/Dynamic/DataProviderTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,19 @@ public function testGetAggregations()
281281
);
282282
}
283283

284+
public function testGetAggregationsWithException()
285+
{
286+
$this->queryContainer->expects($this->once())
287+
->method('getQuery')
288+
->willReturn([]);
289+
$this->clientMock->expects($this->once())
290+
->method('query')
291+
->willThrowException(new \Exception());
292+
293+
$result = $this->model->getAggregations($this->entityStorage);
294+
$this->assertIsArray($result);
295+
}
296+
284297
/**
285298
* Test getInterval() method
286299
*/
@@ -383,6 +396,22 @@ public function testGetAggregation()
383396
);
384397
}
385398

399+
public function testGetAggregationWithException()
400+
{
401+
$bucket = $this->createMock(BucketInterface::class);
402+
$dimension = $this->createMock(Dimension::class);
403+
404+
$this->queryContainer->expects($this->once())
405+
->method('getQuery')
406+
->willReturn([]);
407+
$this->clientMock->expects($this->once())
408+
->method('query')
409+
->willThrowException(new \Exception());
410+
411+
$result = $this->model->getAggregation($bucket, [$dimension], 10, $this->entityStorage);
412+
$this->assertIsArray($result);
413+
}
414+
386415
/**
387416
* Test prepareData() method
388417
*/

0 commit comments

Comments
 (0)