Files
kumomta/docs/reference/kumo/define_spool.md
T
2023-02-25 16:14:12 -07:00

80 lines
2.2 KiB
Markdown

# `kumo.define_spool {PARAMS}`
Defines a named spool storage backend.
KumoMTA uses separate storage areas for metadata and message contents, named
`"meta"` and `"data"` respectively.
This function should be called only from inside your [init](../events/init.md)
event handler.
```lua
kumo.on('init', function()
kumo.define_spool {
name = 'data',
path = '/var/spool/kumo/data',
}
kumo.define_spool {
name = 'meta',
path = '/var/spool/kumo/meta',
}
end)
```
PARAMS is a lua table that can accept the keys listed below:
## flush
Whether to flush data to storage after each write. The default is `false`.
When set to `true`, a backend specific means of flushing OS buffers to storage
will be used after each write to encourage maximum durability of writes.
Setting `flush=true` can be incredibly harmful to throughput, and, depending
on your local storage device and filesystem selection, may not meaningfully
increase durability.
```lua
kumo.on('init', function()
kumo.define_spool {
-- ..
flush = false,
}
end)
```
## kind
Specifies the spool storage backend type. There are two possible options:
* `"LocalDisk"` - the default. Stores data in individual files on the filesystem.
* `"RocksDB"` - uses [RocksDB](https://rocksdb.org/) to achieve higher throughput.
`"LocalDisk"`'s performance characteristics are strongly coupled with your
local storage device and filesystem performance.
`"RocksDB"` makes heavy use of memory buffers and intelligent layout of storage
to reduce the I/O cost. To a certain degree, the buffering has similar
characteristics to deferred spooling, but the risk of corruption is attenuated
because RocksDB uses a write-ahead-log and a background sync thread.
## name
Specify the name of this spool. You are free to define as many spools as
you wish, but at the time of writing KumoMTA only uses spools with the following names:
* `"data"` - holds the message bodies
* `"meta"` - holds message metadata, such as the envelope and per message metadata
## path
Specifies the path to the directory into which the spool will be stored.
```lua
kumo.on('init', function()
kumo.define_spool {
name = 'data',
path = '/var/spool/kumo-spool/data',
}
end)
```