Skip to content

Glossary

Terminology, wire error codes, and abbreviations used throughout FrogDB documentation. Each term links to the page that explains it in depth; the error codes are quoted from source.


A thread-local partition within a single FrogDB node. Each internal shard owns its own key-value store, memory budget, expiry index, and WAL writer, and is driven by one worker task.

Keys map to internal shards through the cluster slot, not a separate hash: internal_shard = CRC16(key) % 16384 % num_shards. The CRC16 slot is computed once and reused, so a key’s slot and its internal shard are derived from the same value.

See Concurrency Model, Storage Engine.

A logical partition (0–16383) used to distribute keys across nodes in cluster mode, compatible with Redis Cluster. slot = CRC16(key) % 16384.

Relationship: key → slot(key) → node → internal_shard(key).

See Clustering.

TermScopeDerivationRangeAnswers
Hash SlotCluster (multi-node)CRC16(key) % 163840–16383Which node owns a key
Internal ShardNode (multi-thread)slot % num_shards0 to num_shards−1Which worker processes a key

The -CROSSSLOT error uses “slot” terminology for Redis compatibility even when the underlying constraint is at the internal-shard level.

A {tag} substring in a key name that controls slot assignment: only the content between the first { and the next } is hashed. {user:123}:profile and {user:123}:sessions therefore share a slot, enabling multi-key operations on related keys.

See Storage Engine.

FrogDB’s mechanism for coordinating atomic operations across internal shards without a global lock, using declared key intents, a total transaction-id order, and Selective Contention Analysis.

See VLL.

The consensus protocol (via the openraft library) that FrogDB uses for the cluster control plane — slot ownership, membership, and epoch changes are agreed through Raft, not a gossip protocol. Data replication itself uses PSYNC, not Raft.

See Clustering.


A sequential log of write operations backed by RocksDB, providing durability and crash recovery. Durability is set by DurabilityMode:

  • async — the OS flushes on its own schedule
  • periodic — fsync on a fixed interval (default 1000 ms)
  • sync — fsync before acknowledging each write

See Persistence & Durability.

A point-in-time capture of all key-value data. FrogDB produces snapshots without forking the process (forkless), coordinated by epoch rather than by an OS copy-on-write fork.

See Persistence & Durability.

A logical marker used to coordinate a snapshot: the epoch is recorded when a snapshot begins, shards write values as of that epoch, and concurrent writes are captured by the WAL.

See Persistence & Durability.

Copying data only when it is modified. FrogDB uses explicit copy-on-write buffers for forkless snapshots instead of relying on a fork() copy-on-write address space.

See Storage Engine.


The wire protocol FrogDB speaks. RESP2 covers simple strings, errors, integers, bulk strings, and arrays; RESP3 adds maps, sets, booleans, doubles, big numbers, verbatim strings, and out-of-band push messages.

See Protocol.

The error returned when a multi-key operation references keys in different slots. Resolve it by colocating the keys with a hash tag.

Wire error strings are quoted from source; the canonical registry is CommandError in frogdb-server/crates/types/src/error.rs, with ACL codes in frogdb-server/crates/acl/src/error.rs and scripting codes in frogdb-server/crates/core/src/scripting/error.rs.

ErrorEmitted messageContext
-CROSSSLOTCROSSSLOT Keys in request don't hash to the same slotMulti-key op spanning slots
-MOVEDMOVED <slot> <host>:<port>Slot owned by another node (redirect)
-ASKASK <slot> <host>:<port>Key being migrated (one-shot redirect)
-WRONGTYPEWRONGTYPE Operation against a key holding the wrong kind of valueWrong data type for command
-OOMOOM command not allowed when used memory > 'maxmemory'Write rejected under maxmemory
-CLUSTERDOWNCLUSTERDOWN The cluster is downCluster unavailable / slot unserved
-TRYAGAINTRYAGAIN Multiple keys request during rehashing of slotMulti-key op mid-migration
-READONLYREADONLY You can't write against a read only replica.Write sent to a replica
-NOAUTHNOAUTH Authentication required.Command before AUTH
-NOPERMNOPERM this user has no permissions to run the '<command>' commandACL denial (command / key / channel variants)
-NOPROTONOPROTO sorry, this protocol version is not supportedHELLO with an unsupported RESP version
-BUSYKEYBUSYKEY Target key name already existsDestination key exists (e.g. RESTORE)
-BUSYGROUPBUSYGROUP Consumer Group name already existsXGROUP CREATE on existing group
-NOGROUPNOGROUP No such consumer groupStream group missing
-NOSCRIPTNOSCRIPT No matching script. Please use EVAL.EVALSHA on unknown SHA
-BUSYERR BUSY Lua script running. Allow up to <ms>ms for it to finish.A Lua script is still running
-BUSYBUSY timeout during FUNCTION LOAD (library loading took too long)FUNCTION LOAD exceeded its time budget
-BUSYBUSY shard busy with continuation lock; retryA lock request hit a shard held by a Lua/MULTI continuation lock
-EXECABORTEXECABORT Transaction discarded because of previous errors.EXEC after a queued error
-VERSIONMISMATCHVERSIONMISMATCH expected <expected> actual <actual>Optimistic version check failed

Not emitted by FrogDB. MASTERDOWN, NOREPLICAS, and LOADING exist only as passthrough labels used when deciding whether to wrap a Lua error — FrogDB never produces them (there is no RDB-load phase). MISCONF and NOREPL do not exist at all. Timeouts are reported with the generic ERR prefix (for example ERR timeout …); there is no -TIMEOUT code and no VLL lock-timeout wire error.


An eviction policy that removes keys by last-access time. FrogDB approximates LRU by sampling, as Redis does, rather than maintaining an exact ordering.

See Storage Engine.

An eviction policy that removes keys by access frequency, using a logarithmic counter with decay.

See Storage Engine.


A Rust hash-map implementation with incremental resize: the cost of growing the table is spread across subsequent inserts to avoid a single large rehash latency spike.

See Storage Engine.


Redis transaction commands: MULTI begins queuing commands and EXEC runs the queued batch. FrogDB provides execution atomicity (no interleaving) but does not roll back on a mid-batch error; durability follows the configured WAL mode.

See Consistency Model.

Optimistic locking: watched keys are recorded with the version observed at WATCH time, and a subsequent EXEC aborts if any watched key changed.

Sending several commands without waiting for each reply, to amortize round-trip latency. Pipelining is not transactional — pipelined commands may interleave with other clients’ commands.


A node that accepts writes for its slots (also called “master” in Redis terminology).

See Replication.

A node that applies data streamed from a primary, serves reads, and can be promoted on failover.

The partial-synchronization protocol a replica uses to resume from its last offset after a brief disconnect instead of taking a full resync.

A bounded ring buffer of recent RESP-encoded writes, indexed by replication offset, that backs PSYNC partial resync (and split-brain reconciliation). It is distinct from the live broadcast channel that streams writes to currently-connected replicas.

See Replication.

An identifier for a replication history line, used with the offset to decide whether a reconnecting replica can PSYNC or must fully resync.


Operations completed per unit time. Used qualitatively in these docs to describe design trade-offs; FrogDB publishes no throughput figures until reproducible benchmarks exist.


AbbrevMeaning
AOFAppend-Only File (Redis persistence format)
RDBRedis Database (snapshot format)
TTLTime To Live (key expiration)
OOMOut Of Memory
ACLAccess Control List
TLSTransport Layer Security
FIFOFirst In, First Out
CRC16Cyclic Redundancy Check, 16-bit (slot hashing)
USDTUser Statically-Defined Tracing (probes)