Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F6051093
UpdateUserCentralIndexJob.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
UpdateUserCentralIndexJob.php
View Options
<?php
namespace
MediaWiki\CheckUser\Jobs
;
use
Job
;
use
MediaWiki\CheckUser\CheckUserQueryInterface
;
use
MediaWiki\Title\Title
;
use
Wikimedia\Rdbms\IConnectionProvider
;
use
Wikimedia\Timestamp\ConvertibleTimestamp
;
/**
* Updates or inserts a row to the cuci_user table to record that an action occured.
*
* Performed in a job to prevent potentially expensive writes being performed on the
* main request / post-send.
*/
class
UpdateUserCentralIndexJob
extends
Job
implements
CheckUserQueryInterface
{
/**
* The type of this job, as registered in wgJobTypeConf.
*/
public
const
TYPE
=
'checkuserUpdateUserCentralIndexJob'
;
private
IConnectionProvider
$dbProvider
;
/** @inheritDoc */
public
function
__construct
(
?
Title
$title
,
array
$params
,
IConnectionProvider
$dbProvider
)
{
parent
::
__construct
(
self
::
TYPE
,
$params
);
$this
->
dbProvider
=
$dbProvider
;
}
/** @return bool */
public
function
run
():
bool
{
$dbw
=
$this
->
dbProvider
->
getPrimaryDatabase
(
self
::
VIRTUAL_GLOBAL_DB_DOMAIN
);
// Get an exclusive lock to update the cuci_user central index for this central ID and wiki map
// ID to avoid deadlocks. We cannot use ::forUpdate due to T374244
$key
=
"cuci-insert:"
.
$this
->
params
[
'wikiMapID'
]
.
":"
.
$this
->
params
[
'centralID'
];
$scopedLock
=
$dbw
->
getScopedLockAndFlush
(
$key
,
__METHOD__
,
5
);
if
(
!
$scopedLock
)
{
return
true
;
}
// Return if the timestamp in the DB is after or equal to the timestamp specified in the job. This can
// occur if another update job ran before this one did.
$lastTimestamp
=
$dbw
->
newSelectQueryBuilder
()
->
select
(
'ciu_timestamp'
)
->
from
(
'cuci_user'
)
->
where
(
[
'ciu_ciwm_id'
=>
$this
->
params
[
'wikiMapID'
],
'ciu_central_id'
=>
$this
->
params
[
'centralID'
]
]
)
->
caller
(
__METHOD__
)
->
fetchField
();
if
(
$lastTimestamp
&&
$this
->
params
[
'timestamp'
]
<=
ConvertibleTimestamp
::
convert
(
TS_MW
,
$lastTimestamp
)
)
{
return
true
;
}
// Either insert the cuci_user row or update it if one already exists, setting the timestamp provided.
$dbw
->
newInsertQueryBuilder
()
->
insertInto
(
'cuci_user'
)
->
row
(
[
'ciu_timestamp'
=>
$dbw
->
timestamp
(
$this
->
params
[
'timestamp'
]
),
'ciu_ciwm_id'
=>
$this
->
params
[
'wikiMapID'
],
'ciu_central_id'
=>
$this
->
params
[
'centralID'
],
]
)
->
onDuplicateKeyUpdate
()
->
uniqueIndexFields
(
[
'ciu_ciwm_id'
,
'ciu_central_id'
]
)
->
set
(
[
'ciu_timestamp'
=>
$dbw
->
timestamp
(
$this
->
params
[
'timestamp'
]
)
]
)
->
caller
(
__METHOD__
)
->
execute
();
return
true
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Oct 4 2026, 23:23 (5 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f0/bb/3f0fe37690c443ac3404e653fd46
Default Alt Text
UpdateUserCentralIndexJob.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment