-
Notifications
You must be signed in to change notification settings - Fork 289
Description
I have an application (tfenster/verified-bluesky) that worked fine on your cloud, but due to the limit of 1024 entries to the KV store, I moved it to Azure (Azure Kubernetes Service, Azure Cache for Redis). Since then, it works for some time (didn't exactly check, but seems like a few minutes), but then calls to the KV store fail with "io error: broken pipe". I have narrowed it down to the following piece of code as the easiest repro, but other places accessing the store also fail with the same error:
package main
import (
"encoding/json"
"fmt"
"net/http"
"strings"
spinhttp "github.com/fermyon/spin/sdk/go/v2/http"
"github.com/fermyon/spin/sdk/go/v2/kv"
)
func init() {
spinhttp.Handle(func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
fmt.Println("Getting stats")
store, err := kv.OpenStore("default")
if err != nil {
http.Error(w, "Error opening kv store "+err.Error(), http.StatusInternalServerError)
return
}
defer store.Close()
fmt.Println("Getting keys")
keys, err := store.GetKeys()
if err != nil {
http.Error(w, "Error getting keys from kv store "+err.Error(), http.StatusInternalServerError)
return
}
...
}
})
}
func main() {}
The call to kv.OpenStore still seems to work, but store.GetKeys() fails and I get this response:
HTTP/1.1 500 Internal Server Error
Date: Sun, 05 Jan 2025 08:23:35 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 55
Connection: close
x-content-type-options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Error getting keys from kv store io error: broken pipe
For full context, see main.go. The logs only show this
Getting stats
Getting keys
The setup of the redis backend and creation of the runtime config looks like this
az redis create -n $redisName -g $rgAndClusterName -l $location --sku Basic --vm-size c0 --redis-configuration '{ "maxmemory-policy": "noeviction" }'
$redisKeys = $(az redis list-keys -n $redisName -g $rgAndClusterName) | ConvertFrom-Json
@"
[key_value_store.default]
type = "redis"
url = "rediss://:$($redisKeys.primaryKey)@$redisName.redis.cache.windows.net:6380"
"@ | Out-File ./runtime-config-redis.toml
I then bring that to this secret (content obviously redacted)
apiVersion: v1
kind: Secret
metadata:
name: verified-bluesky-runtime-config
type: Opaque
data:
runtime-config.toml: ...
Deploying the spin app looks like this spinapp.yaml and the latest build to create and push the OCI artifact is here.
Let me know if I can share anything else
Not sure if that is relevant, but this is the output of the commands you asked for in the template, taken from my dev environment:
- Spin version (
spin --version):
vscode ➜ /workspaces/verified-bluesky/deployment (main) $ spin --version
spin 3.1.1 (aa919ce 2024-12-20)
- Installed plugin versions (
spin plugins list --installed)
vscode ➜ /workspaces/verified-bluesky/deployment (main) $ spin plugins list --installed
cloud 0.10.0 [installed]
kube 0.3.1 [installed]