Merge pull request #1902 from ripienaar/leader_only

skip responses from non leaders in jsz
This commit is contained in:
R.I.Pienaar
2021-02-09 21:46:56 +01:00
committed by GitHub
2 changed files with 7 additions and 2 deletions

View File

@@ -1155,6 +1155,8 @@ func (s *Server) statszReq(sub *subscription, _ *client, subject, reply string,
s.mu.Unlock()
}
var errSkipZreq = errors.New("filtered response")
func (s *Server) zReq(reply string, msg []byte, fOpts *EventFilterOptions, optz interface{}, respf func() (interface{}, error)) {
if !s.EventsEnabled() || reply == _EMPTY_ {
return
@@ -1172,6 +1174,9 @@ func (s *Server) zReq(reply string, msg []byte, fOpts *EventFilterOptions, optz
}
if err == nil {
response["data"], err = respf()
if errors.Is(err, errSkipZreq) {
return
}
status = http.StatusInternalServerError
}
if err != nil {

View File

@@ -2357,7 +2357,7 @@ func (s *Server) Jsz(opts *JSzOptions) (*JSInfo, error) {
js, cc := s.getJetStreamCluster()
if js == nil {
// Ignore
return nil, ErrJetStreamNotEnabled
return nil, fmt.Errorf("%w: no cluster", errSkipZreq)
}
// So if we have JS but no clustering, we are the leader so allow.
if cc != nil {
@@ -2365,7 +2365,7 @@ func (s *Server) Jsz(opts *JSzOptions) (*JSInfo, error) {
isLeader := cc.isLeader()
js.mu.RUnlock()
if !isLeader {
return nil, errNotLeader
return nil, fmt.Errorf("%w: not leader", errSkipZreq)
}
}
}