diff --git a/.gitignore b/.gitignore index 24eb926..bd7e0ef 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,8 @@ kubeconfig temp/* tmp/* -.cursor/hooks/state/ \ No newline at end of file +.cursor/hooks/state/ + +site/ +.cache/ +.venv-docs/ diff --git a/AGENTS.md b/AGENTS.md index e18cd77..82fe766 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,6 +32,8 @@ make manifests # regenerates config/crd/bases/ **Run `make lint` before finishing.** CI will catch it anyway; fix it locally first. +**Keep code comments sparse.** Avoid verbose comments that restate the implementation; add comments only when they clarify non-obvious intent, invariants, or external contracts. + --- ## Commands diff --git a/CHANGELOG.md b/CHANGELOG.md index d5cb730..f5ffed8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format follows Keep a Changelog, and this project adheres to Semantic Versio ## [Unreleased] +## [0.2.3] + +### Fixed +- Treat Redis `loadmodule` directives as restart-only config so module paths in `spec.redis` are not sent through live `CONFIG SET` reconciliation. + ## [0.2.2] ### Fixed diff --git a/CLAUDE.md b/CLAUDE.md index 2269c55..38f9232 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,6 +32,8 @@ make manifests # regenerates config/crd/bases/ **Run `make lint` before finishing.** CI will catch it anyway; fix it locally first. +**Keep code comments sparse.** Avoid verbose comments that restate the implementation; add comments only when they clarify non-obvious intent, invariants, or external contracts. + --- ## Commands diff --git a/charts/redis-operator/Chart.yaml b/charts/redis-operator/Chart.yaml index 43679cd..e421dbf 100644 --- a/charts/redis-operator/Chart.yaml +++ b/charts/redis-operator/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: redis-operator description: A Kubernetes operator for managing Redis 7.2 clusters with automatic failover, rolling updates, and backup support. type: application -version: 0.2.2 -appVersion: "0.2.2" +version: 0.2.3 +appVersion: "0.2.3" keywords: - redis - operator diff --git a/internal/instance-manager/reconciler/reconciler.go b/internal/instance-manager/reconciler/reconciler.go index 63630ab..c2994d4 100644 --- a/internal/instance-manager/reconciler/reconciler.go +++ b/internal/instance-manager/reconciler/reconciler.go @@ -442,8 +442,13 @@ func requiresRestart(key string) bool { "tls-port": true, "unixsocket": true, "databases": true, + "loadmodule": true, } - return restartKeys[key] + directive := key + if i := strings.IndexAny(key, " \t"); i >= 0 { + directive = key[:i] + } + return restartKeys[directive] } func isTLSEnabled(cluster *redisv1.RedisCluster) bool { diff --git a/internal/instance-manager/reconciler/reconciler_test.go b/internal/instance-manager/reconciler/reconciler_test.go index 51ea7cb..4c4e111 100644 --- a/internal/instance-manager/reconciler/reconciler_test.go +++ b/internal/instance-manager/reconciler/reconciler_test.go @@ -389,6 +389,9 @@ func TestRequiresRestart(t *testing.T) { {"", false}, {"appendonly", false}, {"hz", false}, + {"loadmodule", true}, + {"loadmodule /usr/local/lib/redis/modules/redistimeseries.so", true}, + {"loadmodule\t/usr/local/lib/redis/modules/rejson.so", true}, } for _, tt := range tests {