mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 11:48:43 -07:00
@@ -3160,7 +3160,22 @@ func (s *Server) jsClusteredStreamRequest(ci *ClientInfo, acc *Account, subject,
|
||||
cfg := &ccfg
|
||||
|
||||
js.mu.RLock()
|
||||
numStreams := len(cc.streams[acc.Name])
|
||||
asa := cc.streams[acc.Name]
|
||||
numStreams := len(asa)
|
||||
|
||||
// Check for subject collisions here.
|
||||
for _, sa := range asa {
|
||||
for _, subj := range sa.Config.Subjects {
|
||||
for _, tsubj := range cfg.Subjects {
|
||||
if SubjectsCollide(tsubj, subj) {
|
||||
js.mu.RUnlock()
|
||||
resp.Error = jsError(fmt.Errorf("subjects overlap with an existing stream"))
|
||||
s.sendAPIErrResponse(ci, acc, subject, reply, string(rmsg), s.jsonResponse(&resp))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
js.mu.RUnlock()
|
||||
|
||||
// Check for stream limits here before proposing. These need to be tracked from meta layer, not jsa.
|
||||
|
||||
@@ -1013,7 +1013,7 @@ func TestJetStreamClusterStreamPublishWithActiveConsumers(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestJetStreamClusterStreamOverlapSubjects(t *testing.T) {
|
||||
c := createJetStreamClusterExplicit(t, "R32", 2)
|
||||
c := createJetStreamClusterExplicit(t, "R3", 3)
|
||||
defer c.shutdown()
|
||||
|
||||
// Client based API
|
||||
@@ -1021,12 +1021,12 @@ func TestJetStreamClusterStreamOverlapSubjects(t *testing.T) {
|
||||
nc, js := jsClientConnect(t, s)
|
||||
defer nc.Close()
|
||||
|
||||
if _, err := js.AddStream(&nats.StreamConfig{Name: "TEST", Subjects: []string{"foo"}, Replicas: 2}); err != nil {
|
||||
if _, err := js.AddStream(&nats.StreamConfig{Name: "TEST", Subjects: []string{"foo"}}); err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if _, err := js.AddStream(&nats.StreamConfig{Name: "TEST2", Subjects: []string{"foo"}, Replicas: 2}); err == nil || err == nats.ErrTimeout {
|
||||
t.Fatalf("Expected error but got none or timeout")
|
||||
if _, err := js.AddStream(&nats.StreamConfig{Name: "TEST2", Subjects: []string{"foo"}}); err == nil || err == nats.ErrTimeout {
|
||||
t.Fatalf("Expected error but got none or timeout: %v", err)
|
||||
}
|
||||
|
||||
// Now grab list of streams and make sure the second is not there.
|
||||
|
||||
Reference in New Issue
Block a user