Skip to content

Commit ea929e5

Browse files
authored
MDEE-970: Do not mark items as deleted on single item failure (#468)
* MDEE-970: Do not mark items as deleted on single item failure
1 parent 12c52cd commit ea929e5

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

DataExporter/Export/Processor.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
namespace Magento\DataExporter\Export;
1818

19+
use Magento\DataExporter\Exception\UnableRetrieveData;
1920
use Magento\DataExporter\Export\Request\InfoAssembler;
2021
use Magento\DataExporter\Model\Indexer\FeedIndexMetadata;
2122
use Magento\DataExporter\Model\Logging\CommerceDataExportLoggerInterface as LoggerInterface;
@@ -101,12 +102,14 @@ public function processWithCallback(
101102
// if error happened during data collecting we skip entire process
102103
$this->logger->error(
103104
\sprintf(
104-
'Unable to collect data for provider %s, error: %s',
105+
'Unable to collect data for provider %s, error: %s, skipped IDs: [%s]',
105106
$provider,
106-
$exception->getMessage()
107+
$exception->getMessage(),
108+
\implode(', ', array_column($arguments, $metadata->getFeedIdentity()))
107109
),
108110
['exception' => $exception]
109111
);
112+
throw new UnableRetrieveData();
110113
}
111114
}
112115

DataExporter/Model/Indexer/FeedIndexProcessorCreateUpdate.php

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,15 +138,22 @@ public function partialReindex(
138138
$feedItems = $this->addHashesAndModifiedAt($feedItems, $metadata);
139139
$this->processFeedItems($feedItems, $metadata, $indexState, $serializer);
140140
};
141-
$this->exportProcessor->processWithCallback($metadata, $chunk, $dataProcessorCallback);
142-
143-
$this->handleDeletedItems(
144-
array_column($chunk, $feedIdentity),
145-
$indexState,
146-
$metadata,
147-
$serializer,
148-
$chunkTimeStamp
149-
);
141+
try {
142+
// "delete" handler must not be called if error happened during exporting phase
143+
$this->exportProcessor->processWithCallback($metadata, $chunk, $dataProcessorCallback);
144+
$this->handleDeletedItems(
145+
array_column($chunk, $feedIdentity),
146+
$indexState,
147+
$metadata,
148+
$serializer,
149+
$chunkTimeStamp
150+
);
151+
} catch (\Throwable $e) {
152+
// for partial reindex thrown exception to return un-processed IDs back to changelog
153+
if ($isPartialReindex) {
154+
throw $e;
155+
}
156+
}
150157
} else {
151158
$this->feedUpdater->execute(
152159
$this->exportProcessor->process($metadata->getFeedName(), $chunk),

0 commit comments

Comments
 (0)