Aggregate is the base actor class for aggregate commands.
Aggregate for the BITOP command.
Base Aggregate for all commands that need to communicate with *all* KeyNode actors, namely PUBSUB with the CHANNELS subcommand, and each of the commands that deal with the keyspace itself, namely KEYS/SCAN/DBSIZE/RANDOMKEY/DEL/EXISTS/FLUSHDB/FLUSHALL.
AggregateCommands is exclusively part of ClientNode, but defined separately here for clarity.
Aggregate for the DEL command.
Aggregate for the FLUSHALL command.
Aggregate for the FLUSHDB command.
Aggregate for the PFCOUNT command.
Aggregate for the PFMERGE command.
Aggregate for the KEYS command.
Aggregate for the MGET command.
Aggregate for the MSETNX command.
Aggregate for the PUBSUB CHANNELS command/subcommand.
Aggregate for the PUBSUB NUMSUB command/subcommand.
Aggregate for the RANDOMKEY command.
Aggregate for the SCAN command.
Aggregate for the SCRIPT EXISTS command.
Aggregate for all of the non-storing set commands, namely SDIFF/SINTER/SUNION.
Base Aggregate for all of the set operation commands, namely SDIFF/SINTER/SUNION/SDIFFSTORE/SINTERSTORE/SUNIONSTORE.
Aggregate for all of the storing set commands, namely SDIFFSTORE/SINTERSTORE/SUNIONSTORE.
Base Aggregate for commands that don't need data for a reply, namely FLUSHDB/FLUSHALL.
Aggregate for all of the sorted set commands, namely ZINTERSTORE/ZUNIONSTORE.
Base Aggregate for commands that deal with boolean responses from each KeyNode actor, namely DEL/MSETNX.
Base Aggregate for all commands that need to read lists of keys from each KeyNode actor, namely KEYS/SCAN/DBSIZE.
Base Aggregate for all of the non-storing set commands, namely SDIFF/SINTER/SUNION.
Args given to pcall/call functions inside a Lua script, that will be used to construct a Command payload from a LuaClientNode actor.
Lua API for pcall/call.
A ClientNode is a special type of Node in the system.
Main payload for a command - stores its name, key, and args, and contains utility methods for looking up attributes configured via commands.conf.
Actor trait containing behavior for dealing with a Command - it contains a command variable that the class should initially set upon receiving it via the actor's receive method.
An error response, as per Redis protocol.
ClientNode that manages a single HTTP request - it extracts the JSON args list from it and constructs a Command payload from them, and then waits to receive back a Response payload, which it converts back to JSON before returning it as a HTTP response.
Actor for the HTTP server that registers creation of a HttpClientNode for each connection made.
Base ClientNode for HTTP and WebSocket ClientNode actors - provides methods for converting to/from JSON, and cleanup on disconnect.
A KeyNode is a special type of Node in the system.
ListNode supports blocking commands (BLPOP, BRPOP, etc) where if the list is empty, no immediate response is sent to the client, and when the next command is run that adds to the list, we essentially retry the original blocking command, and if we can perform it (eg pop), we then send the requested value back to the client.
Lua API for the log function.
To implement call/pcall as synchronous functions, we need to use Akka's ask pattern.
Node is the base actor class that all concrete node types subclass Specifically, there is a concrete Node class for each data type namely: StringNode for strings, HashNode for hashes, etc.
A KeyNode manages a subset of keys, and stores these by mapping DB names to keys to nodes, where nodes are represented by a NodeEntry.
PubSubClient is exclusively part of ClientNode, but defined separately here for clarity.
Message sent from PubSubServer/KeyNode to a PubSubClient/ClientNode so that it can manage its own channel/pattern subscriptions.
PubSubServer is exclusively part of KeyNode, but defined separately here for clarity.
Lua API for the status_reply/error_reply functions.
Response a Node will return to a ClientNode after a command is run.
Command wrapper for routing it to its correct KeyNode.
Scripts stored via the SCRIPT LOAD command are stored in KeyNode actors, and as such, scripts can be run from both KeyNode and ClientNode actors (mixed in with the ScriptingServer and ScriptingClient traits), via the EVALSHA and EVAL commands respectively.
Base trait for both KeyNode and ClientNode actors that provides the methods for compiling and running Lua scripts.
ClientNode mixin that can run scripts directly, or forward the various LOAD subcommands onto the relevant KeyNode actor.
KeyNode mixin that stores compiled Lua scripts via the LOAD SCRIPT command, and runs them via the EVALSHA command.
A simple response, as per Redis protocol.
A SortedSetEntry is stored for each value in a SortedSetNode.
Sorted sets are implemented slightly differently than in Redis.
Lua API for the status_reply/error_reply functions.
ClientNode that manages a single TCP connection - it buffers data received in the Redis protocol, until it contains a complete packet it can construct a Command payload with.
Actor for the TCP server that registers creation of a TcpClientNode for each connection made.
Message that a Node or KeyNode actor sends back to a ClientNode actor to acknowledge the number of keys it has dealt with after receiving _MULTI or _EXEC commands.
Actor for the WebSocket server that registers creation of a WebSocketClientNode for each connection made.
Loads all of the command attributes from commands.conf into a structure (command names mapped to maps of attribute names/values) that Command instances can use to look up their configured attributes.
Utilities for converting between Lua and JVM values.
Entry point for the system.
Message that shuts a Node actor down and delete its value from disk.
Message that a Node actor sends to itself when it's ready to save its value to disk.
Message that tells an actor to shut down, but not delete its value from disk - the KeyNode holding its key still contains a reference to it, and a new actor will be started for it the next time a command is received for its key.