mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-16 19:14:41 -07:00
Templates not supported currently in clustered mode
Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
@@ -468,13 +468,14 @@ type JSApiStreamTemplateNamesResponse struct {
|
||||
const JSApiStreamTemplateNamesResponseType = "io.nats.jetstream.api.v1.stream_template_names_response"
|
||||
|
||||
var (
|
||||
jsNotEnabledErr = &ApiError{Code: 503, Description: "JetStream not enabled for account"}
|
||||
jsBadRequestErr = &ApiError{Code: 400, Description: "bad request"}
|
||||
jsNotEmptyRequestErr = &ApiError{Code: 400, Description: "expected an empty request payload"}
|
||||
jsInvalidJSONErr = &ApiError{Code: 400, Description: "invalid JSON request"}
|
||||
jsInsufficientErr = &ApiError{Code: 503, Description: "insufficient Resources"}
|
||||
jsNoConsumerErr = &ApiError{Code: 404, Description: "consumer not found"}
|
||||
jsStreamMismatchErr = &ApiError{Code: 400, Description: "stream name in subject does not match request"}
|
||||
jsNotEnabledErr = &ApiError{Code: 503, Description: "JetStream not enabled for account"}
|
||||
jsBadRequestErr = &ApiError{Code: 400, Description: "bad request"}
|
||||
jsNotEmptyRequestErr = &ApiError{Code: 400, Description: "expected an empty request payload"}
|
||||
jsInvalidJSONErr = &ApiError{Code: 400, Description: "invalid JSON request"}
|
||||
jsInsufficientErr = &ApiError{Code: 503, Description: "insufficient Resources"}
|
||||
jsNoConsumerErr = &ApiError{Code: 404, Description: "consumer not found"}
|
||||
jsStreamMismatchErr = &ApiError{Code: 400, Description: "stream name in subject does not match request"}
|
||||
jsNoClusterSupportErr = &ApiError{Code: 503, Description: "not currently supported in clustered mode"}
|
||||
)
|
||||
|
||||
// For easier handling of exports and imports.
|
||||
@@ -624,6 +625,14 @@ func (s *Server) jsTemplateCreateRequest(sub *subscription, c *client, subject,
|
||||
s.sendAPIResponse(ci, acc, subject, reply, string(msg), s.jsonResponse(&resp))
|
||||
return
|
||||
}
|
||||
|
||||
// Not supported for now.
|
||||
if s.JetStreamIsClustered() {
|
||||
resp.Error = jsNoClusterSupportErr
|
||||
s.sendAPIResponse(ci, acc, subject, reply, string(msg), s.jsonResponse(&resp))
|
||||
return
|
||||
}
|
||||
|
||||
var cfg StreamTemplateConfig
|
||||
if err := json.Unmarshal(msg, &cfg); err != nil {
|
||||
resp.Error = jsInvalidJSONErr
|
||||
@@ -671,6 +680,14 @@ func (s *Server) jsTemplateNamesRequest(sub *subscription, c *client, subject, r
|
||||
s.sendAPIResponse(ci, acc, subject, reply, string(msg), s.jsonResponse(&resp))
|
||||
return
|
||||
}
|
||||
|
||||
// Not supported for now.
|
||||
if s.JetStreamIsClustered() {
|
||||
resp.Error = jsNoClusterSupportErr
|
||||
s.sendAPIResponse(ci, acc, subject, reply, string(msg), s.jsonResponse(&resp))
|
||||
return
|
||||
}
|
||||
|
||||
var offset int
|
||||
if !isEmptyRequest(msg) {
|
||||
var req JSApiStreamTemplatesRequest
|
||||
|
||||
@@ -2153,6 +2153,63 @@ func TestJetStreamClusterStreamInterestOnlyPolicy(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// These are disabled for now.
|
||||
func TestJetStreamClusterStreamTemplates(t *testing.T) {
|
||||
c := createJetStreamClusterExplicit(t, "R3S", 3)
|
||||
defer c.shutdown()
|
||||
|
||||
// Client based API
|
||||
s := c.randomServer()
|
||||
nc, _ := jsClientConnect(t, s)
|
||||
defer nc.Close()
|
||||
|
||||
// List API
|
||||
var tListResp server.JSApiStreamTemplateNamesResponse
|
||||
resp, err := nc.Request(server.JSApiTemplates, nil, time.Second)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if err := json.Unmarshal(resp.Data, &tListResp); err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if tListResp.Error == nil {
|
||||
t.Fatalf("Expected an unsupported error, got none")
|
||||
}
|
||||
if !strings.Contains(tListResp.Error.Description, "not currently supported in clustered mode") {
|
||||
t.Fatalf("Did not get correct error response: %+v", tListResp.Error)
|
||||
}
|
||||
|
||||
// Create
|
||||
// Now do templates.
|
||||
mcfg := &server.StreamConfig{
|
||||
Subjects: []string{"kv.*"},
|
||||
Storage: server.MemoryStorage,
|
||||
}
|
||||
template := &server.StreamTemplateConfig{
|
||||
Name: "kv",
|
||||
Config: mcfg,
|
||||
MaxStreams: 4,
|
||||
}
|
||||
req, err := json.Marshal(template)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
var stResp server.JSApiStreamTemplateCreateResponse
|
||||
resp, err = nc.Request(fmt.Sprintf(server.JSApiTemplateCreateT, template.Name), req, time.Second)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if err = json.Unmarshal(resp.Data, &stResp); err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if stResp.Error == nil {
|
||||
t.Fatalf("Expected an unsupported error, got none")
|
||||
}
|
||||
if !strings.Contains(stResp.Error.Description, "not currently supported in clustered mode") {
|
||||
t.Fatalf("Did not get correct error response: %+v", stResp.Error)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJetStreamClusterStreamPerf(t *testing.T) {
|
||||
// Comment out to run, holding place for now.
|
||||
skip(t)
|
||||
|
||||
Reference in New Issue
Block a user