diff --git a/temporalcli/commands.gen.go b/temporalcli/commands.gen.go index 3ca46ec7f..044143ad6 100644 --- a/temporalcli/commands.gen.go +++ b/temporalcli/commands.gen.go @@ -2898,6 +2898,7 @@ type TemporalWorkflowListCommand struct { Query string Archived bool Limit int + PageSize int } func NewTemporalWorkflowListCommand(cctx *CommandContext, parent *TemporalWorkflowCommand) *TemporalWorkflowListCommand { @@ -2915,6 +2916,7 @@ func NewTemporalWorkflowListCommand(cctx *CommandContext, parent *TemporalWorkfl s.Command.Flags().StringVarP(&s.Query, "query", "q", "", "Content for an SQL-like `QUERY` List Filter.") s.Command.Flags().BoolVar(&s.Archived, "archived", false, "Limit output to archived Workflow Executions.") s.Command.Flags().IntVar(&s.Limit, "limit", 0, "Maximum number of Workflow Executions to display.") + s.Command.Flags().IntVar(&s.PageSize, "page-size", 0, "Maximum number of Workflow Executions to fetch at a time from the server.") s.Command.Run = func(c *cobra.Command, args []string) { if err := s.run(cctx, args); err != nil { cctx.Options.Fail(err) diff --git a/temporalcli/commands.workflow_view.go b/temporalcli/commands.workflow_view.go index 0552dd952..c57e2d258 100644 --- a/temporalcli/commands.workflow_view.go +++ b/temporalcli/commands.workflow_view.go @@ -306,9 +306,7 @@ func (c *TemporalWorkflowListCommand) run(cctx *CommandContext, _ []string) erro cctx.Printer.StartList() defer cctx.Printer.EndList() - // Build request and start looping. We always use default page size regardless - // of user-defined limit, because we're ok w/ extra page data and the default - // is not clearly defined. + // Build request and start looping. pageFetcher := c.pageFetcher(cctx, cl) var nextPageToken []byte var execsProcessed int @@ -360,16 +358,22 @@ func (c *TemporalWorkflowListCommand) pageFetcher( cctx *CommandContext, cl client.Client, ) func(next []byte) (workflowPage, error) { + + if c.Limit > 0 && c.Limit < c.PageSize { + c.PageSize = c.Limit + } return func(next []byte) (workflowPage, error) { if c.Archived { return cl.ListArchivedWorkflow(cctx, &workflowservice.ListArchivedWorkflowExecutionsRequest{ Query: c.Query, NextPageToken: next, + PageSize: int32(c.PageSize), }) } return cl.ListWorkflow(cctx, &workflowservice.ListWorkflowExecutionsRequest{ Query: c.Query, NextPageToken: next, + PageSize: int32(c.PageSize), }) } } diff --git a/temporalcli/commands.workflow_view_test.go b/temporalcli/commands.workflow_view_test.go index 3f5894497..a39e6512f 100644 --- a/temporalcli/commands.workflow_view_test.go +++ b/temporalcli/commands.workflow_view_test.go @@ -442,10 +442,12 @@ func (s *SharedServerSuite) TestWorkflow_List() { "workflow", "list", "--address", s.Address(), "--query", fmt.Sprintf(`TaskQueue="%s"`, s.Worker().Options.TaskQueue), + "--page-size", "1", ) s.NoError(res.Err) out := res.Stdout.String() s.ContainsOnSameLine(out, "Completed", "DevWorkflow") + s.Equal(3, strings.Count(out, "DevWorkflow")) // JSON res = s.Execute( diff --git a/temporalcli/commandsgen/commands.yml b/temporalcli/commandsgen/commands.yml index 0fc735682..7a8878e3d 100644 --- a/temporalcli/commandsgen/commands.yml +++ b/temporalcli/commandsgen/commands.yml @@ -2886,6 +2886,9 @@ commands: - name: limit type: int description: Maximum number of Workflow Executions to display. + - name: page-size + type: int + description: Maximum number of Workflow Executions to fetch at a time from the server. - name: temporal workflow metadata summary: Query the Workflow for user-specified metadata