Merge branch 'nurikabe-master'
Conflicts: Resources/doc/types.md
This commit is contained in:
commit
a97ed80aee
|
@ -289,6 +289,11 @@ class Configuration implements ConfigurationInterface
|
|||
->scalarNode('update')->defaultTrue()->end()
|
||||
->scalarNode('delete')->defaultTrue()->end()
|
||||
->booleanNode('immediate')->defaultFalse()->end()
|
||||
->scalarNode('logger')
|
||||
->defaultFalse()
|
||||
->treatNullLike('fos_elastica.logger')
|
||||
->treatTrueLike('fos_elastica.logger')
|
||||
->end()
|
||||
->scalarNode('service')->end()
|
||||
->variableNode('is_indexable_callback')->defaultNull()->end()
|
||||
->end()
|
||||
|
|
|
@ -432,8 +432,12 @@ class FOSElasticaExtension extends Extension
|
|||
$listenerDef = new DefinitionDecorator($abstractListenerId);
|
||||
$listenerDef->replaceArgument(0, new Reference($objectPersisterId));
|
||||
$listenerDef->replaceArgument(1, $typeConfig['model']);
|
||||
$listenerDef->replaceArgument(3, $typeConfig['identifier']);
|
||||
$listenerDef->replaceArgument(2, $this->getDoctrineEvents($typeConfig));
|
||||
$listenerDef->replaceArgument(3, $typeConfig['identifier']);
|
||||
if (isset($typeConfig['listener']['logger'])) {
|
||||
$listenerDef->replaceArgument(4, new Reference($typeConfig['listener']['logger']));
|
||||
}
|
||||
|
||||
switch ($typeConfig['driver']) {
|
||||
case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break;
|
||||
case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace FOS\ElasticaBundle\Doctrine;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Doctrine\Common\EventArgs;
|
||||
use Doctrine\Common\EventSubscriber;
|
||||
use FOS\ElasticaBundle\Persister\ObjectPersisterInterface;
|
||||
|
@ -85,13 +86,17 @@ class Listener implements EventSubscriber
|
|||
* @param array $events
|
||||
* @param string $esIdentifierField
|
||||
*/
|
||||
public function __construct(ObjectPersisterInterface $objectPersister, $objectClass, array $events, $esIdentifierField = 'id')
|
||||
public function __construct(ObjectPersisterInterface $objectPersister, $objectClass, array $events, $esIdentifierField = 'id', $logger = null)
|
||||
{
|
||||
$this->objectPersister = $objectPersister;
|
||||
$this->objectClass = $objectClass;
|
||||
$this->events = $events;
|
||||
$this->esIdentifierField = $esIdentifierField;
|
||||
|
||||
if ($logger) {
|
||||
$this->objectPersister->setLogger($logger);
|
||||
}
|
||||
|
||||
$this->propertyAccessor = PropertyAccess::createPropertyAccessor();
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace FOS\ElasticaBundle\Persister;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Elastica\Exception\BulkException;
|
||||
use Elastica\Exception\NotFoundException;
|
||||
use FOS\ElasticaBundle\Transformer\ModelToElasticaTransformerInterface;
|
||||
use Elastica\Type;
|
||||
|
@ -19,6 +21,7 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
protected $transformer;
|
||||
protected $objectClass;
|
||||
protected $fields;
|
||||
protected $logger;
|
||||
|
||||
public function __construct(Type $type, ModelToElasticaTransformerInterface $transformer, $objectClass, array $fields)
|
||||
{
|
||||
|
@ -28,6 +31,27 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
$this->fields = $fields;
|
||||
}
|
||||
|
||||
public function setLogger(LoggerInterface $logger)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Log exception if logger defined for persister belonging to the current listener, otherwise re-throw
|
||||
*
|
||||
* @param BulkException $e
|
||||
* @throws BulkException
|
||||
* @return null
|
||||
*/
|
||||
private function log(BulkException $e)
|
||||
{
|
||||
if (! $this->logger) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$this->logger->error($e);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert one object into the type
|
||||
* The object will be transformed to an elastica document
|
||||
|
@ -95,11 +119,15 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
foreach ($objects as $object) {
|
||||
$documents[] = $this->transformToElasticaDocument($object);
|
||||
}
|
||||
$this->type->addDocuments($documents);
|
||||
try {
|
||||
$this->type->addDocuments($documents);
|
||||
} catch (BulkException $e) {
|
||||
$this->log($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bulk updates an array of objects in the type
|
||||
* Bulk update an array of objects in the type. Create document if it does not already exist.
|
||||
*
|
||||
* @param array $objects array of domain model objects
|
||||
*/
|
||||
|
@ -108,16 +136,15 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
$documents = array();
|
||||
foreach ($objects as $object) {
|
||||
$document = $this->transformToElasticaDocument($object);
|
||||
|
||||
try {
|
||||
$this->type->getDocument($document->getId());
|
||||
} catch (NotFoundException $e) {
|
||||
$this->type->addDocument($document);
|
||||
}
|
||||
|
||||
$document->setDocAsUpsert(true);
|
||||
$documents[] = $document;
|
||||
}
|
||||
$this->type->updateDocuments($documents);
|
||||
|
||||
try {
|
||||
$this->type->updateDocuments($documents);
|
||||
} catch (BulkException $e) {
|
||||
$this->log($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -131,7 +158,11 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
foreach ($objects as $object) {
|
||||
$documents[] = $this->transformToElasticaDocument($object);
|
||||
}
|
||||
$this->type->deleteDocuments($documents);
|
||||
try {
|
||||
$this->type->deleteDocuments($documents);
|
||||
} catch (BulkException $e) {
|
||||
$this->log($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -141,7 +172,11 @@ class ObjectPersister implements ObjectPersisterInterface
|
|||
*/
|
||||
public function deleteManyByIdentifiers(array $identifiers)
|
||||
{
|
||||
$this->type->getIndex()->getClient()->deleteIds($identifiers, $this->type->getIndex(), $this->type);
|
||||
try {
|
||||
$this->type->getIndex()->getClient()->deleteIds($identifiers, $this->type->getIndex(), $this->type);
|
||||
} catch (BulkException $e) {
|
||||
$this->log($e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -276,3 +276,18 @@ option on a type persistence configuration to `true`.
|
|||
persistence:
|
||||
immediate: true
|
||||
```
|
||||
|
||||
Logging Errors
|
||||
--------------
|
||||
|
||||
By default FOSElasticaBundle will not catch errors thrown by Elastica/ElasticSearch.
|
||||
Configure a logger per listener if you would rather catch and log these.
|
||||
|
||||
```yaml
|
||||
persistence:
|
||||
listener:
|
||||
logger: true
|
||||
```
|
||||
|
||||
Specifying `true` will use the default Elastica logger. Alternatively define your own
|
||||
logger service id.
|
||||
|
|
Loading…
Reference in a new issue