Commit graph

3 commits

Author SHA1 Message Date
Timo Tijhof
45dff9dfff UserEditTracker: Minor code clean up and follow-ups
* Remove ILoadBalancer from UserEditCountInitJob constructor,
  since it is not a parameter and not a Job property.
  It is not needed during Job construction.

* Use ConvertibleTimestamp instead of MWTimestamp since no
  MW-specific methods or behaviours are needed here.

* I don't know if UserEditCountInitJob is always safe to de-duplicate,
  but this should be decided in the Job class, and is not the
  responsibility of calling code that creates/queues a job.
  I don't know for sure why this is publicly part of JobSpecification,
  but I guess it is there for internal use when serialising jobs,
  not for external use in the way it was used here.

  I'm assuming for now that its use means it is safe and I moved it to the
  UserEditCountInitJob class. If this is not the case and de-dupability is
  actually dependent on the parameters, then that logic should reside
  in the UserEditCountInitJob constructor.

* Document for which internal use clearUserEditCache() is public.
  This way during refactoring the method can be easily found and
  made private if that caller is no longer needed.

* Remove needless Job::factory() indirection in the
  UserEditCountInitJob test suite. This added overhead that is not
  part of the test's purpose, and also risks making the test break
  because Job::factory() allows types to be mapped to different
  implementations. But, this test suite is meant to cover the
  UserEditCountInitJob class implementation specifically.

Change-Id: I6fef4d297b1c0169f95906822e30b4addab7eaf4
2020-09-18 02:21:11 +00:00
Máté Szabó
90c2840cca UserEditTracker: Do not try to initialize edit count in read-only mode
The method UserEditTracker::getUserEditCount (as well as the old User class
logic it replaced) calculates the user's edit count and writes it to the
database if it was not computed yet. However, it attempts this write even if
MediaWiki is in read-only mode, causing errors as this method is frequently
called on read requests as well.

As a fix, move the edit count initialization to the job queue, which will avoid
trying to open a source DB connection (and thus cause a read-only error) on
installs that do not use the DB-based job queue. This change requires a
workaround in UserGroupManagerTest.

Bug: T259719
Change-Id: I6d1c8e9038ae1f98f47bdb2495aecc21654b24c0
2020-08-06 00:50:41 +02:00
DannyS712
1ccf066380 Add a new UserEditTracker service for user edit counts and timing
Moved to the new service are the following User:: methods:
* ::getEditCount
* ::getFirstEditTimestamp
* ::getLatestEditTimestamp
* ::getEditTimestamp
* ::initEditCountInternal

A subsequent patch will replace existing uses in core and deprecate the
User methods.

The new service has 100% test coverage with pure Unit tests.

Bug: T253431
Change-Id: If96f9d41026aa358c0fe269a3e078af5f6f058f2
2020-06-02 03:00:05 +00:00