mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
[FIXED] Interface conversion bug for ipQueues in monitor which would cause panics. (#4477)
Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
@@ -1120,14 +1120,17 @@ func (s *Server) HandleIPQueuesz(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
queues := map[string]monitorIPQueue{}
|
||||
|
||||
s.ipQueues.Range(func(k, v interface{}) bool {
|
||||
s.ipQueues.Range(func(k, v any) bool {
|
||||
var pending, inProgress int
|
||||
name := k.(string)
|
||||
queue := v.(interface {
|
||||
queue, ok := v.(interface {
|
||||
len() int
|
||||
inProgress() uint64
|
||||
inProgress() int64
|
||||
})
|
||||
pending := queue.len()
|
||||
inProgress := int(queue.inProgress())
|
||||
if ok {
|
||||
pending = queue.len()
|
||||
inProgress = int(queue.inProgress())
|
||||
}
|
||||
if !all && (pending == 0 && inProgress == 0) {
|
||||
return true
|
||||
} else if qfilter != _EMPTY_ && !strings.Contains(name, qfilter) {
|
||||
|
||||
@@ -4981,3 +4981,22 @@ func TestHealthzStatusUnavailable(t *testing.T) {
|
||||
|
||||
checkHealthzEndpoint(t, s.MonitorAddr().String(), http.StatusServiceUnavailable, "unavailable")
|
||||
}
|
||||
|
||||
// When we converted ipq to use generics we still were using sync.Map. Currently you can not convert
|
||||
// interface{} or any to a generic parameterized type. So this stopped working and panics.
|
||||
func TestIpqzWithGenerics(t *testing.T) {
|
||||
opts := DefaultMonitorOptions()
|
||||
opts.JetStream = true
|
||||
|
||||
s := RunServer(opts)
|
||||
defer s.Shutdown()
|
||||
|
||||
url := fmt.Sprintf("http://%s/ipqueuesz?all=1", s.MonitorAddr().String())
|
||||
body := readBody(t, url)
|
||||
require_True(t, len(body) > 0)
|
||||
|
||||
queues := map[string]*monitorIPQueue{}
|
||||
require_NoError(t, json.Unmarshal(body, &queues))
|
||||
require_True(t, len(queues) >= 4)
|
||||
require_True(t, queues["SendQ"] != nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user