This is an automated email from the ASF dual-hosted git repository. crossoverjie pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git
The following commit(s) were added to refs/heads/master by this push: new 230d11b8 Add max topics per namespace methods (#1413) 230d11b8 is described below commit 230d11b82ba8b60c971013516c4922afea4a022d Author: Collignon-Ducret Rémi <mito...@users.noreply.github.com> AuthorDate: Tue Sep 2 04:40:14 2025 +0200 Add max topics per namespace methods (#1413) --- pulsaradmin/pkg/admin/namespace.go | 27 ++++++++++++ pulsaradmin/pkg/admin/namespace_test.go | 76 +++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/pulsaradmin/pkg/admin/namespace.go b/pulsaradmin/pkg/admin/namespace.go index bd4dc88c..9a5cb361 100644 --- a/pulsaradmin/pkg/admin/namespace.go +++ b/pulsaradmin/pkg/admin/namespace.go @@ -154,6 +154,16 @@ type Namespaces interface { // GetMaxProducersPerTopic returns the maxProducersPerTopic for a namespace. GetMaxProducersPerTopic(namespace utils.NameSpaceName) (int, error) + // SetMaxTopicsPerNamespace sets maxTopicsPerNamespace for a namespace. + SetMaxTopicsPerNamespace(namespace utils.NameSpaceName, max int) error + + // GetMaxTopicsPerNamespace returns the maxTopicsPerNamespace for a namespace. + GetMaxTopicsPerNamespace(namespace utils.NameSpaceName) (int, error) + + // RemoveMaxTopicsPerNamespace removes maxTopicsPerNamespace configuration for a namespace, + // defaulting to broker settings + RemoveMaxTopicsPerNamespace(namespace utils.NameSpaceName) error + // GetNamespaceReplicationClusters returns the replication clusters for a namespace GetNamespaceReplicationClusters(namespace string) ([]string, error) @@ -996,3 +1006,20 @@ func (n *namespaces) RemoveProperties(namespace utils.NameSpaceName) error { endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "properties") return n.pulsar.Client.Delete(endpoint) } + +func (n *namespaces) SetMaxTopicsPerNamespace(namespace utils.NameSpaceName, max int) error { + endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "maxTopicsPerNamespace") + return n.pulsar.Client.Post(endpoint, max) +} + +func (n *namespaces) GetMaxTopicsPerNamespace(namespace utils.NameSpaceName) (int, error) { + var result int + endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "maxTopicsPerNamespace") + err := n.pulsar.Client.Get(endpoint, &result) + return result, err +} + +func (n *namespaces) RemoveMaxTopicsPerNamespace(namespace utils.NameSpaceName) error { + endpoint := n.pulsar.endpoint(n.basePath, namespace.String(), "maxTopicsPerNamespace") + return n.pulsar.Client.Delete(endpoint) +} diff --git a/pulsaradmin/pkg/admin/namespace_test.go b/pulsaradmin/pkg/admin/namespace_test.go index 4917e94b..6600cfaf 100644 --- a/pulsaradmin/pkg/admin/namespace_test.go +++ b/pulsaradmin/pkg/admin/namespace_test.go @@ -523,3 +523,79 @@ func TestNamespaces_Properties(t *testing.T) { assert.Equal(t, err, nil) assert.Equal(t, actualPropertiesAfterRemoveCall, map[string]string{}) } + +func TestNamespaces_SetMaxTopicsPerNamespace(t *testing.T) { + config := &config.Config{} + admin, err := New(config) + require.NoError(t, err) + require.NotNil(t, admin) + + tests := []struct { + name string + namespace string + maxTopics int + errReason string + }{ + { + name: "Set valid max topics per namespace", + namespace: "public/default", + maxTopics: 100, + errReason: "", + }, + { + name: "Set invalid max topics per namespace", + namespace: "public/default", + maxTopics: -1, + errReason: "maxTopicsPerNamespace must be 0 or more", + }, + { + name: "Set valid max topics per namespace: 0", + namespace: "public/default", + maxTopics: 0, + errReason: "", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + namespace, _ := utils.GetNamespaceName(tt.namespace) + err := admin.Namespaces().SetMaxTopicsPerNamespace(*namespace, tt.maxTopics) + if tt.errReason == "" { + assert.Equal(t, nil, err) + + err = admin.Namespaces().RemoveMaxTopicsPerNamespace(*namespace) + assert.Equal(t, nil, err) + } + if err != nil { + restError := err.(rest.Error) + assert.Equal(t, tt.errReason, restError.Reason) + } + }) + } +} + +func TestNamespaces_GetMaxTopicsPerNamespace(t *testing.T) { + + config := &config.Config{} + admin, err := New(config) + require.NoError(t, err) + require.NotNil(t, admin) + + namespace, _ := utils.GetNamespaceName("public/default") + + // set the max topics per namespace and get it + err = admin.Namespaces().SetMaxTopicsPerNamespace(*namespace, 100) + assert.Equal(t, nil, err) + maxTopics, err := admin.Namespaces().GetMaxTopicsPerNamespace(*namespace) + assert.Equal(t, nil, err) + expected := 100 + assert.Equal(t, expected, maxTopics) + + // remove the max topics per namespace and get it + err = admin.Namespaces().RemoveMaxTopicsPerNamespace(*namespace) + assert.Equal(t, nil, err) + + maxTopics, err = admin.Namespaces().GetMaxTopicsPerNamespace(*namespace) + assert.Equal(t, nil, err) + expected = 0 + assert.Equal(t, expected, maxTopics) +}