This is an automated email from the ASF dual-hosted git repository.

kparisa pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iggy-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 12a757307 docs: add a troubleshooting page for first-run failures 
(#118)
12a757307 is described below

commit 12a7573075d0923089555e000228c86a25708cf7
Author: Justin Mclean <[email protected]>
AuthorDate: Tue Oct 6 17:33:05 2026 +1100

    docs: add a troubleshooting page for first-run failures (#118)
    
    Covers what the most common first-run failures look like, what causes
    them and how to fix them, checked against 0.9.0.
    
    Co-authored-by: Justin Mclean <[email protected]>
    Co-authored-by: Kranti Parisa <[email protected]>
---
 content/docs/meta.json           |   1 +
 content/docs/troubleshooting.mdx | 107 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 108 insertions(+)

diff --git a/content/docs/meta.json b/content/docs/meta.json
index 3c2bc42b8..a8acc27e0 100644
--- a/content/docs/meta.json
+++ b/content/docs/meta.json
@@ -3,6 +3,7 @@
   "pages": [
     "index",
     "introduction",
+    "troubleshooting",
     "server",
     "clustering",
     "binary-protocol",
diff --git a/content/docs/troubleshooting.mdx b/content/docs/troubleshooting.mdx
new file mode 100644
index 000000000..884ed65f8
--- /dev/null
+++ b/content/docs/troubleshooting.mdx
@@ -0,0 +1,107 @@
+---
+title: Troubleshooting
+description: "What the most common first-run failures look like, what causes 
them, and how to fix them."
+---
+
+This page covers the problems people most often hit the first time they run 
Apache Iggy. Each entry shows what you see, what causes it, and how to fix it.
+
+To collect diagnostic data for a bug report instead, see the `snapshot` 
command in [CLI commands](/docs/cli/commands).
+
+## Client hangs with no output
+
+**What you see:** the client starts and then prints nothing. It doesn't fail 
and it doesn't exit.
+
+**Cause:** nothing is listening on the address the client connects to, usually 
`127.0.0.1:8090`. The server isn't running, is bound to a different address, or 
hasn't finished starting. By default the SDKs retry the connection forever, and 
the retries are only logged if your application has logging set up, so all you 
see is silence.
+
+**Fix:** check the server has started before starting the client. It logs a 
`server client listeners started` line that includes the address, for example 
`tcp=127.0.0.1:8090`. You can also check the port directly:
+
+```bash
+nc -zv 127.0.0.1 8090
+```
+
+To make the client fail with an error instead of retrying forever, set 
`reconnection_retries=0` on the connection string, or call 
`.with_reconnection_max_retries(Some(0))` on the Rust client builder. Turning 
on logging in your application also shows each reconnect attempt.
+
+## Docker container can't be reached
+
+**What you see:** the server is running in Docker with `-p 8090:8090`, but 
clients on the host can't connect. On Docker Desktop the connection may be 
accepted and then reset straight away.
+
+**Cause:** the image doesn't override the server's addresses, so it binds 
`127.0.0.1` inside the container, where the published port can't reach it.
+
+**Fix:** set `IGGY_TCP_ADDRESS=0.0.0.0:8090`, and the equivalent for any other 
transport you expose, along with `IGGY_NODE_ADVERTISED_ADDRESS`. See the 
`docker run` and Compose examples in [Docker & Helm](/docs/server/docker).
+
+## Server exits with an io_uring error in a container
+
+**What you see:** the server exits at startup with one of these:
+
+```text
+Cannot create server bootstrap executor: Operation not permitted (os error 1): 
io_uring syscalls are blocked, typically by a container seccomp profile
+```
+
+```text
+Cannot create server bootstrap executor: Out of memory (os error 12): io_uring 
was denied locked memory for its rings
+```
+
+On a machine with more cores, the same problems can show up as `failed to 
create io_uring runtime for shard N` instead.
+
+**Cause:** Docker's default seccomp profile blocks the `io_uring` system calls 
the server needs, or the container's locked-memory limit is too small for the 
server's io_uring rings.
+
+**Fix:** run the container with `--security-opt seccomp=unconfined` and 
`--ulimit memlock=-1:-1`, or with a custom seccomp profile and a locked-memory 
limit big enough for the server. See [Why these 
capabilities?](/docs/server/docker#why-these-capabilities) and [Linux 
tuning](/docs/server/linux-tuning#runtime-access-and-process-limits).
+
+## Kernel too old
+
+**What you see:** the server exits with an `io_uring Invalid Argument 
(EINVAL)` report that includes a line like:
+
+```text
+Kernel 5.15 is too old (need >= 5.19)
+```
+
+**Cause:** on Linux the server needs kernel 5.19 or newer for the io_uring 
features it uses. WSL2 kernels can be missing io_uring features even on a newer 
version.
+
+**Fix:** upgrade the host kernel to 5.19 or newer. Under WSL2, run `wsl 
--update`. Containers use the host's kernel, so it's the host that needs 
upgrading. See [System 
requirements](/docs/server/introduction#system-requirements).
+
+## Lost the root password
+
+**What you see:** you started the server without setting credentials, and you 
don't know the root password.
+
+**Cause:** if `IGGY_ROOT_USERNAME` and `IGGY_ROOT_PASSWORD` aren't set and 
`--with-default-root-credentials` isn't used, the server generates a random 
root password on first start and logs it once:
+
+```text
+WARN shard-0 server::boot::credentials: Generated root user password: 
<password>
+```
+
+It isn't logged again on later starts, because the credentials are only 
created when the data directory is new.
+
+**Fix:** set `IGGY_ROOT_USERNAME` and `IGGY_ROOT_PASSWORD` before the first 
start, or use `--with-default-root-credentials` for development. If the 
password is already lost, deleting the data directory resets it, but that also 
deletes all data, so only do it on a development instance.
+
+## "Already exists" error when running the CLI again
+
+**What you see:** running `iggy stream create dev` a second time fails:
+
+```text
+Error: CommandError(Problem creating stream (name: dev and ID auto incremented)
+
+Caused by:
+    Stream with name:  already exists.)
+```
+
+The name is missing from the message because of a known bug where error 
details are lost between the server and the client 
([#3735](https://github.com/apache/iggy/issues/3735)).
+
+**Cause:** the stream was created the first time. The CLI reports the server's 
error rather than skipping streams that already exist.
+
+**Fix:** nothing needs fixing. The stream exists and can be used as it is. 
Check with `iggy stream list` before creating it if you're running a setup 
script more than once.
+
+## Client connects, then hangs at login
+
+**What you see:** the client connects, then hangs with no error, while the 
server logs the connection being accepted and then dropped.
+
+**Cause:** the SDK and the server are from different releases. Clients from 
before 0.9.0 can't talk to a 0.9.0 server, and the login waits forever instead 
of failing ([#4262](https://github.com/apache/iggy/issues/4262)).
+
+**Fix:** use the SDK version that matches your server. For the 0.9.0 server 
that's the `iggy` crate 0.11.0 for Rust and `apache-iggy` 0.9.0 for Python. See 
[Server compatibility](/docs/sdk/introduction#server-compatibility) for every 
SDK.
+
+## Server won't start on Docker Desktop
+
+**What you see:** with 0.9.0 on Docker Desktop, every shard logs `Failed to 
bind memory` and the server exits with `failed to bind shard 0 memory to its 
NUMA node`.
+
+**Cause:** the server binds each shard's memory to a NUMA node, and Docker 
Desktop's Linux VM rejects that. The same happens on WSL2 and other hosts with 
a single NUMA node.
+
+**Fix:** add `-e IGGY_SHARDING_CPU_ALLOCATION=all` to the `docker run` 
command. Each shard is still pinned to its own core; only the memory binding is 
skipped, and on a single NUMA node it does nothing useful. This is fixed in the 
next release.

Reply via email to