WMDE-leszek has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/336387 )
Change subject: Provide EntityPrefetcher in EntityDataRetrievalServiceFactory
......................................................................
Provide EntityPrefetcher in EntityDataRetrievalServiceFactory
DispatchingServiceFactory returns an instance of
DispatchingEntityPrefetcher.
Client, and optionally repo, now only use the entity prefetcher
provided by DispatchingServiceFactory.
Wiring file defining services for per-repo RepositoryServiceContainers
ensures single instance of EntityPrefetcher is instantiated by
the container. This makes Wikibase only use a single instance
of the prefetcher.
Bug: T157380
Change-Id: Ia064c2bb19ee41fb35fc19b9363c761bbb019abf
---
M client/includes/DispatchingServiceFactory.php
M client/includes/DispatchingServiceWiring.php
M client/includes/EntityDataRetrievalServiceFactory.php
M client/includes/Store/RepositoryServiceWiring.php
M client/includes/Store/Sql/DirectSqlStore.php
M client/tests/phpunit/includes/DispatchingServiceWiringTest.php
M client/tests/phpunit/includes/Store/RepositoryServiceWiringTest.php
M client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
M repo/includes/Store/Sql/SqlStore.php
9 files changed, 60 insertions(+), 15 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/87/336387/1
diff --git a/client/includes/DispatchingServiceFactory.php
b/client/includes/DispatchingServiceFactory.php
index 546b00d..cb691e7 100644
--- a/client/includes/DispatchingServiceFactory.php
+++ b/client/includes/DispatchingServiceFactory.php
@@ -5,6 +5,7 @@
use MediaWiki\Services\ServiceContainer;
use Wikibase\Client\Store\RepositoryServiceContainer;
use Wikibase\Client\Store\RepositoryServiceContainerFactory;
+use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\Lookup\UnknownForeignRepositoryException;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\EntityRedirect;
@@ -132,6 +133,13 @@
}
/**
+ * @return EntityPrefetcher
+ */
+ public function getEntityPrefetcher() {
+ return $this->getService( 'EntityPrefetcher' );
+ }
+
+ /**
* @return EntityRevisionLookup
*/
public function getEntityRevisionLookup() {
diff --git a/client/includes/DispatchingServiceWiring.php
b/client/includes/DispatchingServiceWiring.php
index 70aaf93..a5e1a6b 100644
--- a/client/includes/DispatchingServiceWiring.php
+++ b/client/includes/DispatchingServiceWiring.php
@@ -1,6 +1,7 @@
<?php
use Wikibase\Client\DispatchingServiceFactory;
+use Wikibase\Lib\Store\DispatchingEntityPrefetcher;
use Wikibase\Lib\Store\DispatchingEntityRevisionLookup;
use Wikibase\Lib\Store\DispatchingPropertyInfoLookup;
use Wikibase\Lib\Store\DispatchingTermBuffer;
@@ -13,6 +14,12 @@
return [
+ 'EntityPrefetcher' => function( DispatchingServiceFactory
$dispatchingServiceFactory ) {
+ return new DispatchingEntityPrefetcher(
+ $dispatchingServiceFactory->getServiceMap(
'EntityPrefetcher' )
+ );
+ },
+
'EntityRevisionLookup' => function( DispatchingServiceFactory
$dispatchingServiceFactory ) {
return new DispatchingEntityRevisionLookup(
$dispatchingServiceFactory->getServiceMap(
'EntityRevisionLookup' )
diff --git a/client/includes/EntityDataRetrievalServiceFactory.php
b/client/includes/EntityDataRetrievalServiceFactory.php
index d78efd1..9f45cc0 100644
--- a/client/includes/EntityDataRetrievalServiceFactory.php
+++ b/client/includes/EntityDataRetrievalServiceFactory.php
@@ -2,6 +2,7 @@
namespace Wikibase\Client;
+use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\Term\TermBuffer;
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\PropertyInfoLookup;
@@ -14,6 +15,11 @@
interface EntityDataRetrievalServiceFactory {
/**
+ * @return EntityPrefetcher
+ */
+ public function getEntityPrefetcher();
+
+ /**
* Note: Instance returned is not guaranteed to be a caching decorator.
* Callers should take care of caching themselves.
*
diff --git a/client/includes/Store/RepositoryServiceWiring.php
b/client/includes/Store/RepositoryServiceWiring.php
index 9fa25b1..8d6c41c 100644
--- a/client/includes/Store/RepositoryServiceWiring.php
+++ b/client/includes/Store/RepositoryServiceWiring.php
@@ -17,6 +17,13 @@
return [
+ 'EntityPrefetcher' => function(
+ RepositoryServiceContainer $services,
+ WikibaseClient $client
+ ) {
+ return $services->getService( 'WikiPageEntityMetaDataAccessor'
);
+ },
+
'EntityRevisionLookup' => function(
RepositoryServiceContainer $services,
WikibaseClient $client
diff --git a/client/includes/Store/Sql/DirectSqlStore.php
b/client/includes/Store/Sql/DirectSqlStore.php
index c5e8124..db00813 100644
--- a/client/includes/Store/Sql/DirectSqlStore.php
+++ b/client/includes/Store/Sql/DirectSqlStore.php
@@ -454,16 +454,7 @@
* @return PrefetchingWikiPageEntityMetaDataAccessor
*/
public function getEntityPrefetcher() {
- if ( $this->entityPrefetcher === null ) {
- $this->entityPrefetcher = new
PrefetchingWikiPageEntityMetaDataAccessor(
- new WikiPageEntityMetaDataLookup(
- $this->entityNamespaceLookup,
- $this->repoWiki
- )
- );
- }
-
- return $this->entityPrefetcher;
+ return
$this->entityDataRetrievalServices->getEntityPrefetcher();
}
/**
diff --git a/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
b/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
index 8433c4e..7748878 100644
--- a/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
+++ b/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
@@ -6,6 +6,7 @@
use Wikibase\Client\Store\RepositoryServiceContainerFactory;
use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\Entity\BasicEntityIdParser;
+use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
use Wikibase\DataModel\Services\Term\TermBuffer;
use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
@@ -48,6 +49,7 @@
public function provideServices() {
return [
+ [ 'EntityPrefetcher', EntityPrefetcher::class ],
[ 'EntityRevisionLookup', EntityRevisionLookup::class ],
[ 'PropertyInfoLookup', PropertyInfoLookup::class ],
[ 'TermBuffer', TermBuffer::class ],
@@ -69,7 +71,7 @@
$factory = $this->getDispatchingServiceFactory();
$this->assertEquals(
- [ 'EntityRevisionLookup', 'PropertyInfoLookup',
'TermBuffer' ],
+ [ 'EntityPrefetcher', 'EntityRevisionLookup',
'PropertyInfoLookup', 'TermBuffer' ],
$factory->getServiceNames()
);
}
diff --git
a/client/tests/phpunit/includes/Store/RepositoryServiceWiringTest.php
b/client/tests/phpunit/includes/Store/RepositoryServiceWiringTest.php
index 3ba38db..f67321c 100644
--- a/client/tests/phpunit/includes/Store/RepositoryServiceWiringTest.php
+++ b/client/tests/phpunit/includes/Store/RepositoryServiceWiringTest.php
@@ -6,6 +6,7 @@
use Wikibase\Client\Store\RepositoryServiceContainer;
use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParser;
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\PropertyInfoLookup;
@@ -39,6 +40,7 @@
public function provideServices() {
return [
+ [ 'EntityPrefetcher', EntityPrefetcher::class ],
[ 'EntityRevisionLookup', EntityRevisionLookup::class ],
[ 'PropertyInfoLookup', PropertyInfoLookup::class ],
[ 'TermIndex', TermIndex::class ],
@@ -61,7 +63,13 @@
$container = $this->getRepositoryServiceContainer();
$this->assertEquals(
- [ 'EntityRevisionLookup', 'PropertyInfoLookup',
'TermIndex', 'WikiPageEntityMetaDataAccessor' ],
+ [
+ 'EntityPrefetcher',
+ 'EntityRevisionLookup',
+ 'PropertyInfoLookup',
+ 'TermIndex',
+ 'WikiPageEntityMetaDataAccessor'
+ ],
$container->getServiceNames()
);
}
diff --git a/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
b/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
index ec0b5a5..ce7c599 100644
--- a/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
+++ b/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
@@ -11,6 +11,7 @@
use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\Entity\ItemIdParser;
use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
+use Wikibase\DataModel\Services\Entity\NullEntityPrefetcher;
use Wikibase\DataModel\Services\Lookup\EntityLookup;
use Wikibase\DataModel\Services\Term\PropertyLabelResolver;
use Wikibase\DirectSqlStore;
@@ -51,6 +52,9 @@
$dispatchingServiceFactory = new DispatchingServiceFactory(
$containerFactory, [] );
+ $dispatchingServiceFactory->defineService( 'EntityPrefetcher',
function() {
+ return new NullEntityPrefetcher();
+ } );
$dispatchingServiceFactory->defineService(
'EntityRevisionLookup', function() {
return $this->getMock( EntityRevisionLookup::class );
} );
diff --git a/repo/includes/Store/Sql/SqlStore.php
b/repo/includes/Store/Sql/SqlStore.php
index 17857b4..0bbca64 100644
--- a/repo/includes/Store/Sql/SqlStore.php
+++ b/repo/includes/Store/Sql/SqlStore.php
@@ -10,6 +10,7 @@
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\Property;
+use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\Lookup\EntityLookup;
use Wikibase\DataModel\Services\Lookup\EntityRedirectLookup;
use Wikibase\DataModel\Services\Lookup\RedirectResolvingEntityLookup;
@@ -608,15 +609,26 @@
*/
public function getEntityPrefetcher() {
if ( $this->entityPrefetcher === null ) {
- $this->entityPrefetcher = new
PrefetchingWikiPageEntityMetaDataAccessor(
- new WikiPageEntityMetaDataLookup(
$this->entityNamespaceLookup )
- );
+ $this->entityPrefetcher = $this->newEntityPrefetcher();
}
return $this->entityPrefetcher;
}
/**
+ * @return EntityPrefetcher
+ */
+ private function newEntityPrefetcher() {
+ if ( $this->entityDataRetrievalServices !== null ) {
+ return
$this->entityDataRetrievalServices->getEntityPrefetcher();
+ } else {
+ return new PrefetchingWikiPageEntityMetaDataAccessor(
+ new WikiPageEntityMetaDataLookup(
$this->entityNamespaceLookup )
+ );
+ }
+ }
+
+ /**
* @return EntityChangeLookup
*/
public function getEntityChangeLookup() {
--
To view, visit https://gerrit.wikimedia.org/r/336387
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia064c2bb19ee41fb35fc19b9363c761bbb019abf
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits