Implement custom rate limits
authorShane Synan <digitalcircuit36939@gmail.com>
Mon, 5 Sep 2016 21:26:44 +0000 (16:26 -0500)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 Sep 2016 22:07:58 +0000 (00:07 +0200)
Add custom rate limits flag and settings.
> In database, add 'usecustommessagerate', 'messagerateburstsize',
'messageratedelay', and 'unlimitedmessagerate' to 'network' table,
defaulting to the values already used.  This modifies schema,
requiring a version bump, changes to migration scripts, etc.
Use 4 upgrade scripts as SQLite does not support adding multiple
columns at once.
> In protocol, add 'useCustomMessageRate', 'msgRateBurstSize',
'msgRateMessageDelay', and 'unlimitedMessageRate' to Network,
configuring custom rate limits.

Add 'CustomRateLimits' feature flag so the client can tell users
about needing to upgrade their core to get this feature.

If rate limits set to unlimited, disable the token bucket timer and
send messages immediately.  Otherwise, modify the existing token
bucket variables according to the new limits.  The defaults are
unchanged.

Add "Use Custom Rate Limits" checkbox to network "Connection" tab
with an explanatory tooltip warning against setting too low of rate
limits.  Tooltip is modified and checkbox disabled if the core does
not support the feature.

Testing:
> Database schema handling
SQLite new install - works
SQLite upgrade - works
SQLite migrate to Postgres - works
Postgres new install - works
Postgres upgrade - works

> Client/core connections
New client, new core - works
New client, old core - works, custom rates grayed out
Old client, new core - works, custom rates reset + disabled on edit
(Unfortunately there's no way to use a boolean and tell if the client
 is old, or actually disabling custom rate limits.  Would need the
 work-in-progress ClientFeature system 'esainane' designed)


No differences found