diff --git a/service/frontend/namespace_handler.go b/service/frontend/namespace_handler.go index 179ce531c9..0b1c46fe24 100644 --- a/service/frontend/namespace_handler.go +++ b/service/frontend/namespace_handler.go @@ -863,6 +863,10 @@ func (d *namespaceHandler) createResponse( ReportedProblemsSearchAttribute: numConsecutiveWorkflowTaskProblemsToTriggerSearchAttribute > 0, WorkerHeartbeats: d.config.WorkerHeartbeatsEnabled(info.Name), }, + Limits: &namespacepb.NamespaceInfo_Limits{ + BlobSizeLimitError: int64(d.config.BlobSizeLimitError(info.Name)), + MemoSizeLimitError: int64(d.config.MemoSizeLimitError(info.Name)), + }, SupportsSchedules: d.config.EnableSchedules(info.Name), } diff --git a/service/frontend/namespace_handler_test.go b/service/frontend/namespace_handler_test.go index be3c98ecfe..0eb3e34401 100644 --- a/service/frontend/namespace_handler_test.go +++ b/service/frontend/namespace_handler_test.go @@ -358,7 +358,7 @@ func (s *namespaceHandlerCommonSuite) TestListNamespace() { } } -func (s *namespaceHandlerCommonSuite) TestCapabilities() { +func (s *namespaceHandlerCommonSuite) TestCapabilitiesAndLimits() { s.mockMetadataMgr.EXPECT().GetNamespace(gomock.Any(), &persistence.GetNamespaceRequest{ Name: "ns", }).Return( @@ -384,6 +384,8 @@ func (s *namespaceHandlerCommonSuite) TestCapabilities() { s.True(resp.NamespaceInfo.Capabilities.AsyncUpdate) s.True(resp.NamespaceInfo.Capabilities.ReportedProblemsSearchAttribute) s.True(resp.NamespaceInfo.Capabilities.WorkerHeartbeats) + s.Equal(int64(2*1024*1024), resp.NamespaceInfo.Limits.BlobSizeLimitError) + s.Equal(int64(2*1024*1024), resp.NamespaceInfo.Limits.MemoSizeLimitError) // Second call: Override the default value of dynamic configs. s.config.EnableEagerWorkflowStart = dc.GetBoolPropertyFnFilteredByNamespace(false) @@ -391,6 +393,8 @@ func (s *namespaceHandlerCommonSuite) TestCapabilities() { s.config.EnableUpdateWorkflowExecutionAsyncAccepted = dc.GetBoolPropertyFnFilteredByNamespace(false) s.config.NumConsecutiveWorkflowTaskProblemsToTriggerSearchAttribute = dc.GetIntPropertyFnFilteredByNamespace(5) s.config.WorkerHeartbeatsEnabled = dc.GetBoolPropertyFnFilteredByNamespace(false) + s.config.BlobSizeLimitError = dc.GetIntPropertyFnFilteredByNamespace(1024) + s.config.MemoSizeLimitError = dc.GetIntPropertyFnFilteredByNamespace(512) resp, err = s.handler.DescribeNamespace(context.Background(), &workflowservice.DescribeNamespaceRequest{ Namespace: "ns", @@ -401,6 +405,8 @@ func (s *namespaceHandlerCommonSuite) TestCapabilities() { s.False(resp.NamespaceInfo.Capabilities.AsyncUpdate) s.True(resp.NamespaceInfo.Capabilities.ReportedProblemsSearchAttribute) s.False(resp.NamespaceInfo.Capabilities.WorkerHeartbeats) + s.Equal(int64(1024), resp.NamespaceInfo.Limits.BlobSizeLimitError) + s.Equal(int64(512), resp.NamespaceInfo.Limits.MemoSizeLimitError) } func (s *namespaceHandlerCommonSuite) TestRegisterNamespace_WithOneCluster() { diff --git a/service/frontend/service.go b/service/frontend/service.go index 47378d17e6..067ad5695a 100644 --- a/service/frontend/service.go +++ b/service/frontend/service.go @@ -89,6 +89,7 @@ type Config struct { // size limit system protection BlobSizeLimitError dynamicconfig.IntPropertyFnWithNamespaceFilter BlobSizeLimitWarn dynamicconfig.IntPropertyFnWithNamespaceFilter + MemoSizeLimitError dynamicconfig.IntPropertyFnWithNamespaceFilter ThrottledLogRPS dynamicconfig.IntPropertyFn @@ -297,6 +298,7 @@ func NewConfig( DisableListVisibilityByFilter: dynamicconfig.DisableListVisibilityByFilter.Get(dc), BlobSizeLimitError: dynamicconfig.BlobSizeLimitError.Get(dc), BlobSizeLimitWarn: dynamicconfig.BlobSizeLimitWarn.Get(dc), + MemoSizeLimitError: dynamicconfig.MemoSizeLimitError.Get(dc), ThrottledLogRPS: dynamicconfig.FrontendThrottledLogRPS.Get(dc), ShutdownDrainDuration: dynamicconfig.FrontendShutdownDrainDuration.Get(dc), ShutdownFailHealthCheckDuration: dynamicconfig.FrontendShutdownFailHealthCheckDuration.Get(dc),