Implements bulk updates for the repo's wb_changes_subscription table, based on the client's local wbc_entity_usage table.
More...
|
| __construct (ILBFactory $lbFactory, SessionConsistentConnectionManager $localConnectionManager, SessionConsistentConnectionManager $repoConnectionManager, $subscriberWikiId, $repoWiki, $batchSize=1000) |
|
| setProgressReporter (MessageReporter $progressReporter) |
|
| setExceptionHandler (ExceptionHandler $exceptionHandler) |
|
| updateSubscriptions (EntityId $startEntity=null) |
| Insert subscriptions based on entries in wbc_entity_usage.
|
|
| purgeSubscriptions (EntityId $startEntity=null) |
| Remove subscriptions for entities not present in in wbc_entity_usage.
|
|
Implements bulk updates for the repo's wb_changes_subscription table, based on the client's local wbc_entity_usage table.
The client wiki will be subscribed to be informed about changes to any entity present in the local wbc_entity_usage table.
- Copyright
- GPL-2.0-or-later
- Author
- Daniel Kinzler
◆ __construct()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::__construct |
( |
ILBFactory |
$lbFactory, |
|
|
SessionConsistentConnectionManager |
$localConnectionManager, |
|
|
SessionConsistentConnectionManager |
$repoConnectionManager, |
|
|
|
$subscriberWikiId, |
|
|
|
$repoWiki, |
|
|
|
$batchSize = 1000 |
|
) |
| |
- Parameters
-
ILBFactory | $lbFactory | Load balancer factory, used to wait for replication. |
SessionConsistentConnectionManager | $localConnectionManager | Connection manager for DB connections to the local wiki. |
SessionConsistentConnectionManager | $repoConnectionManager | Connection manager for DB connections to the repo. |
string | $subscriberWikiId | The local wiki's global ID, to be used as the subscriber ID in the repo's subscription table. |
string | false | $repoWiki | The repo wiki's id, as used by the LoadBalancer. False (default of the repoWiki setting) indicates to use local wiki database. |
int | $batchSize | |
- Exceptions
-
◆ deleteSubscriptionRange()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::deleteSubscriptionRange |
( |
|
$minId, |
|
|
|
$maxId |
|
) |
| |
|
private |
Deletes a range of subscriptions.
- Parameters
-
string | $minId | Entity id string indicating the first element in the deletion range |
string | $maxId | Entity id string indicating the last element in the deletion range |
◆ getDeletionRange()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::getDeletionRange |
( |
array & |
$continuation = null | ) |
|
|
private |
Returns a range of entity IDs to delete, based on this updater's batch size.
- Parameters
-
array | null | &$continuation | |
- Returns
- bool|string[] list( $minId, $maxId, $count ), or false if there is nothing to delete
- Note
- Below, we query and iterate all rows we want to delete in the current batch. That is rather ugly, but appears to be the best solution, because:
- Deletions must be paged to avoid lock retention.
- DELETE does not support LIMIT, so we need to know a range (min/max) of IDs.
- GROUP BY does not support LIMIT, so we cannot use aggregate functions to get the min/max IDs.
Thus, using SELECT ... LIMIT seems to be the only reliable way to get the min/max range needed for batched deletion.
◆ getEntityIdsFromRows()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::getEntityIdsFromRows |
( |
IResultWrapper |
$res, |
|
|
|
$entityIdField, |
|
|
array & |
$continuation = null |
|
) |
| |
|
private |
Extracts entity id strings from the rows in a query result, and updates $continuation to a position "after" the content of the given query result.
- Parameters
-
IResultWrapper | $res | A result set with the field given by $entityIdField field set for each row. The result is expected to be sorted by entity id, in ascending order. |
string | $entityIdField | The name of the field that contains the entity id. |
array | null | &$continuation | Updated to an array containing the last EntityId in the result. |
- Returns
- string[] A list of entity ids strings.
◆ getUpdateBatch()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::getUpdateBatch |
( |
array & |
$continuation = null | ) |
|
|
private |
- Parameters
-
array | null | &$continuation | |
- Returns
- string[] A list of entity id strings.
◆ insertUpdateBatch()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::insertUpdateBatch |
( |
array |
$entities | ) |
|
|
private |
- Parameters
-
string[] | $entities | Entity-IDs to subscribe to |
- Returns
- int The number of rows inserted.
◆ makeSubscriptionRows()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::makeSubscriptionRows |
( |
array |
$entities | ) |
|
|
private |
Returns a list of rows for insertion, using DatabaseBase's multi-row insert mechanism.
Each row is represented as [ $entityId, $subscriber ].
- Parameters
-
string[] | $entities | entity id strings |
- Returns
- array[] rows
◆ processDeletionBatch()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::processDeletionBatch |
( |
array & |
$continuation = null | ) |
|
|
private |
- Parameters
-
array | null | &$continuation | |
- Returns
- int The number of subscriptions deleted.
◆ processUpdateBatch()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::processUpdateBatch |
( |
array & |
$continuation = null | ) |
|
|
private |
- Parameters
-
array | null | &$continuation | |
- Returns
- int The number of subscriptions inserted.
◆ purgeSubscriptions()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::purgeSubscriptions |
( |
EntityId |
$startEntity = null | ) |
|
Remove subscriptions for entities not present in in wbc_entity_usage.
- Parameters
-
EntityId | null | $startEntity | The entity to start with. |
◆ setExceptionHandler()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::setExceptionHandler |
( |
ExceptionHandler |
$exceptionHandler | ) |
|
◆ setProgressReporter()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::setProgressReporter |
( |
MessageReporter |
$progressReporter | ) |
|
◆ updateSubscriptions()
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::updateSubscriptions |
( |
EntityId |
$startEntity = null | ) |
|
Insert subscriptions based on entries in wbc_entity_usage.
- Parameters
-
EntityId | null | $startEntity | The entity to start with. |
◆ $batchSize
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$batchSize |
|
private |
◆ $exceptionHandler
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$exceptionHandler |
|
private |
◆ $lbFactory
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$lbFactory |
|
private |
◆ $localConnectionManager
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$localConnectionManager |
|
private |
◆ $progressReporter
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$progressReporter |
|
private |
◆ $repoConnectionManager
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$repoConnectionManager |
|
private |
◆ $repoWiki
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$repoWiki |
|
private |
◆ $subscriberWikiId
Wikibase\Client\Store\Sql\BulkSubscriptionUpdater::$subscriberWikiId |
|
private |
The documentation for this class was generated from the following file: