RobustIRC

Releases

Whenever a new version of RobustIRC is released, you can find it here. Each version corresponds to a git tag and is available as a docker container with the corresponding tag.

RobustIRC v0.6 (2017-06-26)

RobustIRC v0.6 contains the following changes:

  • cleanup: ircserver commands and tests are now split into cmd_* and scmd_* files
  • cleanup: packages moved to internal/ to clarify they shouldn’t be used outside of RobustIRC
  • cleanup: definitions moved from the types package to the more idiomatic robust package
  • time-based IDs have been replaced with raft message index. increased peak throughput by 500 messages/s
  • remote hosts are now throttled when specifying the wrong -network_password
  • Mutex locks have been added around ircserver config and sessions
  • Channel bans have been implemented
  • The GLINE IRC command has been implemented.
  • The RemoteAddr is now exposed in /status/sessions
  • A userguide was added
  • Cross-origin resource sharing (CORS) headers are now set for every request
  • protobuf encoding for Raft messages, store values and snapshots (--pre1.0_protobuf flag)
  • config.SessionExpiration worth of messages are now kept, not 1 week

Startup times are now down to a fraction of a second (from minutes), making network upgrades faster and restarts less risky to freeze your network.

Loadtesting the v0.6 RobustIRC release (with Go 1.9beta1) showed that v0.6 can handle more than 2500 messages/s.

RobustIRC v0.5 (2017-03-30)

RobustIRC v0.5 contains the following changes:

  • We switched to version 2 of sorcix/irc, which allows us to correctly interpret trailing and non-trailing IRC message parameters. This fixes issues with one-word messages in IRC clients such as Quassel, but might expose bugs in other programs/libraries. See this bugfix in an IRC bot.
  • The ISON IRC command has been implemented.
  • The PING IRC command is now ignored for idle time in WHOIS.
  • The INVITE IRC command is now invalidated on JOIN.
  • The WHOIS IRC command now results in RPL_WHOISREGNICK for identified users.
  • The TOPIC IRC command now properly checks for operator status in +t channels.
  • The user mode +i (invisible) has been implemented, dropping PRIVMSG and NOTICE IRC commands targetting you unless the sender shares a common channel with you.
  • The irclog debug handler is now significantly faster (2m17s to 9s) due to using a bulk iterator.
  • The configuration revision is now actually applied, protecting against conflicting edits.
  • All mutex locks have been audited for correctness and a test has been added.
  • TLS certificates/keys are now reloaded upon receiving a SIGHUP signal.
  • When creating a channel, its modes now default to +nt.
  • RobustIRC bridges can now be marked as trusted, resulting in the forwarded IP address being exposed. See issue #122 for details.
  • The IRC channel mode +x has been implemented, requiring the user to solve a captcha before joining the channel.
  • The CaptchaRequiredForLogin configuration option has been implemented, requiring users to solve a captcha before logging into the IRC network.
  • The MaxSessions and MaxChannels configuration options have been implemented for limiting the maximum amount of memory.
  • The GetMessage and session tables on the status pages are now sortable.
  • The status pages now feature a quick way to kill sessions. Multiple sessions can be selected by holding the shift key.
  • The status pages have been split into multiple subpages.
  • At most one GetMessages request is now allowed per session per node.

Loadtesting the v0.5 RobustIRC release (with Go 1.8) showed that v0.5 can handle more than 2000 messages/s.

RobustIRC v0.4 (2016-08-16)

RobustIRC v0.4 contains the following changes:

  • Compaction is now replaced by snapshotting. See commit 2d3a623d02d40059a100dee58a190d7ed60c4815 for details. This removes the dependency on SQLite and a bunch of code/SQL statements, finally addressing the issue that RobustIRC instances would grow indefinitely over time.
  • contrib: the prometheus monitoring configuration has been updated to be compatible with more recent versions of prometheus.
  • compaction_test now works on OS X (previously ran into the NOFILES limit).
  • Snapshot restore performance was improved by avoiding to print a message to stderr for each message that is applied. On single-core machines this greatly improves performance by avoiding context switches to Docker which intercepts all messages that go to stderr.
  • robustirc-localnet now generates a new certificate when the existing certificate will expire soon.
  • travis: fix travis configuration (use go1.6, fix go vet invocation)

The known weakness of v0.1 to v0.3 with regards to compaction not covering all message types yet is finally addressed — compaction now works by snapshotting state instead of identifying and deleting obsolete messages.

Loadtesting the v0.4 RobustIRC release (with Go 1.6) showed that v0.4 can handle more than 2000 messages/s.

Loadtesting the v0.4 RobustIRC release (with Go 1.7) showed that v0.4 can handle more than 3500 messages/s.

Loadtesting the v0.4 RobustIRC release (with Go 1.8beta1) showed that v0.4 can handle more than 3500 messages/s.

RobustIRC v0.3 (2016-02-20)

RobustIRC v0.3 contains the following changes:

  • Two messages of death have been fixed: commit 531dbc1 and commit 979b014
  • Nodes are prevented from joining the network when their clock drift is too high
  • robustirc-removepeer (new) safely removes nodes from a network
  • Compaction now is much more efficient: completes within 10 seconds, uses >1GB less RAM
  • Faster start by recreating the irclog database instead of deleting all entries (5 minutes → 40 seconds)
  • Less RAM usage by moving outputstream from RAM to a temporary LevelDB (> 100MB less RAM)
  • jepsen now includes a RobustIRC test, successfully verifies network partition handling
  • To prevent mistakes, -singlenode and -join are now disabled when the node already has data
  • Log files are now kept below 250MB correctly even when running in Docker
  • Channel mode +n (no external messages) is now implemented
  • Malformed NICK messages (trailer instead of first parameter) are now accepted (for Quassel)
  • Capitalization-only nick changes are now supported
  • robustirc-dump (new) dumps the contents of irclog, raftlog and snapshots
  • robustirc-canary (new) compares how two versions of RobustIRC process the same input
  • robustirc-localnet now generates certificates that also work with Chrome ≥ 49.0.2618.8

The known weakness of v0.1 and v0.2 with regards to compaction not covering all message types yet is still not entirely addressed.

RobustIRC v0.2 (2015-05-22)

RobustIRC v0.2 contains the following changes:

  • (a number of small bugfixes, see git changelog)
  • Important bugfixes for issue #100 (deadlock)
  • Important bugfixes for issue #115 (timeout handling)
  • GetMessages will be aborted when nodes are partitioned, minimizing network unavailability
  • GetMessages resuming was fixed for messages with more than one reply
  • PostMessage limit was increased to cope with pathological cases with regards to JSON encoding
  • Compaction was made significantly faster (O(hours) → O(minutes))
  • IRC message routing was refactored, the previous approach did not work for all messages
  • SVSJOIN, SVSPART and SVSHOLD were implemented for NickServ’s AJOIN and RECOVER commands
  • KNOCK and NAMES were implemented

The known weakness of v0.1 with regards to compaction not covering all message types yet is still not entirely addressed (but slightly better already).

RobustIRC v0.1 (2015-03-12)

This is the first public release of RobustIRC. It has been used for a number of weeks with (by now) more than 30 users. That said, since it is the first release, there are probably a couple of rough edges.

A known weakness of this version is compaction not being completely implemented for all IRC commands: if you let this version of RobustIRC run for too long, it will eventually run out of memory/disk. We are talking about many weeks here, but it’s important to be aware of it. When using this version, we strongly recommend you upgrade to newer versions soon.