This reduces the size of the traceback data stored in the lock caches by
an order of magnitude. It is intended to help with the drastic imbalance
in lock cache network usage.
This fixes the import of stub templates in open-source installs.
Before pluginization, the admin-stub templates were imported from the
admin sub-module of the templates directory if r2admin were not
available. Since we're not doing that logic anymore, these stub
templates need to move into the root template directory so they can be
found by the system.
I did an experiment to see if DenormalizedRelation would need the
LastModified stuff, since it takes heavy advantage of row-level bloom
filters. It turns out that there are a huge number of completely
not-found rows being fetched per second that LastModified would save us
from doing a round trip for.
Since LastModified is shared between several relations in a single
request, and CommentVote, Save, and Hide will be denormalized soon, this
should give us a good amount of savings in the long run.
Thrift will materialize the entire result set into memory before
returning it to the client, so requesting very large numbers of columns
is quite detrimental to the server's health. Instead of increasing the
max_column_count ad infinitum, we'll fetch the columns in batches when
the model tells us that's desired.
The previous 300x100 traffic links weren't actually helpful as 300x100s
generally have a campaign added onto the codename. This finds campaigns
that have been seen in a subreddit recently and links them on the
subreddit traffic page.
During some errors, additional tracebacks
were being generated due to the attempted
reference to c.user before it had been properly
set. This should protect against that and let
the proper errors go through.
This is in preparation for some enhancements
to l2cs that require it to have a decent interface
(i.e., it's going to require unicode rather than
accepting either byte strings or unicode)
If a specific link has ridiculous traffic, we can inform the
apps (via ZK live config) that votes on it should be sent to a
separate, dedicated, queue to avoid overwhelming the rest of the
system.