mirror of
https://github.com/tiennm99/keepalive.git
synced 2026-10-11 03:13:31 +00:00
The README now covers what keepalive is, a quick start, the adapter table, and links. Reference material moves to docs/: configuration (every option, per-adapter keys, validation), deployment (Compose, Coolify, Docker, source), how it works (writes, retries, timeouts, logging), known issues (PostgreSQL public-schema permissions and Aiven's ACL key-pattern tilde, by log line), and adding an adapter (now including ConfigKeys registration). .gitignore also excludes config.yaml, matching .dockerignore.
46 lines
2.9 KiB
Markdown
46 lines
2.9 KiB
Markdown
# Known issues
|
|
|
|
Problems seen when pointing keepalive at hosted datastores, listed by the log line they produce. keepalive creates its table, key, or document on first connect, so a dedicated keepalive user needs write access plus permission to create that object. Until the cause is fixed, the service logs the error and retries every minute; no restart is needed after the fix.
|
|
|
|
## PostgreSQL: `permission denied for schema public`
|
|
|
|
```
|
|
[aiven-postgres] connect: pq: permission denied for schema public at position 2:28 (42501); retrying in 1m0s
|
|
```
|
|
|
|
**Cause.** On connect, keepalive runs `CREATE TABLE IF NOT EXISTS keepalive` in the `public` schema. Since PostgreSQL 15, only the database owner can create objects in `public` by default, so a non-owner user is refused. PostgreSQL checks this permission even when the table already exists.
|
|
|
|
**Fix.** Give keepalive its own database and make its user the owner. Run this as an admin user (`avnadmin` on Aiven):
|
|
|
|
```sql
|
|
CREATE DATABASE keepalive OWNER keepalive; -- new database
|
|
ALTER DATABASE keepalive OWNER TO keepalive; -- existing database
|
|
```
|
|
|
|
Then point `url` at that database, for example `postgres://keepalive:...@host:port/keepalive?sslmode=require`.
|
|
|
|
On Aiven for PostgreSQL, changing the owner was the fix that worked; `GRANT CREATE ON SCHEMA public TO keepalive` did not. If you try the grant anyway, note that it applies only inside the database it runs in, so a SQL editor connected to `defaultdb` does not change the database in `url`.
|
|
|
|
## Redis / Valkey: `NOPERM No permissions to access a key`
|
|
|
|
```
|
|
[aiven-valkey] connect: NOPERM No permissions to access a key; retrying in 1m0s
|
|
```
|
|
|
|
**Cause.** The user's ACL key pattern does not cover the counter key. keepalive writes `<namespace>:<counter_key>` when `namespace` is set, otherwise `<counter_key>` (default `counter`).
|
|
|
|
On Aiven for Valkey, a common trigger is typing the key pattern with a leading `~`. Aiven adds the `~` itself, so `~keepalive:*` becomes a pattern that only matches keys starting with a literal `~`, and every write is refused.
|
|
|
|
**Fix.** Allow the commands `PING`, `SETNX`, and `INCR`, and set a key pattern that covers the counter key. On Aiven, enter the keys field without the `~`:
|
|
|
|
| Field | Value |
|
|
| ---------- | ------------------------------------------------------- |
|
|
| Categories | `+@all -@admin -@dangerous` (or `+@connection +@string`) |
|
|
| Keys | `keepalive:*` (matching `namespace: keepalive`) |
|
|
|
|
## Couchbase: `CONNECTION_ERROR` or bucket not ready
|
|
|
|
**Cause.** The cluster is unreachable or the bucket cannot be opened with the configured user.
|
|
|
|
**Fix.** Check the connection string, `bucket_name`, the database user's permissions, and Capella's allowed IP/network access. If the cluster or bucket was just created, raise `ready_timeout`; keepalive allows `ready_timeout` plus 1 minute for each connect attempt.
|