From fc75070a4f1877ba564e4d30d4bd318e395c3f10 Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Thu, 20 Oct 2022 09:51:53 +1100 Subject: [PATCH] Fixed a few bugs - Fixed a seg fault bug when cancelling a scan or query when no results are available yet - Reduce the size of each page to return so that progress indicators work --- .../dynamo-browse/controllers/tableread.go | 4 ++++ .../providers/dynamo/provider.go | 24 +++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/internal/dynamo-browse/controllers/tableread.go b/internal/dynamo-browse/controllers/tableread.go index 7f6dce7..25889ed 100644 --- a/internal/dynamo-browse/controllers/tableread.go +++ b/internal/dynamo-browse/controllers/tableread.go @@ -277,6 +277,10 @@ func (c *TableReadController) handleResultSetFromJobResult(filter string, pushba var partialResultsErr models.PartialResultsError if errors.As(err, &partialResultsErr) { + if newResultSet == nil { + return events.StatusMsg("Operation cancelled") + } + return events.Confirm(applyToN("View the ", len(newResultSet.Items()), "item", "items", " returned so far? "), func(yes bool) tea.Msg { if yes { return c.setResultSetAndFilter(newResultSet, filter, pushbackStack, op) diff --git a/internal/dynamo-browse/providers/dynamo/provider.go b/internal/dynamo-browse/providers/dynamo/provider.go index 2488d1f..ce71c90 100644 --- a/internal/dynamo-browse/providers/dynamo/provider.go +++ b/internal/dynamo-browse/providers/dynamo/provider.go @@ -115,7 +115,9 @@ func (p *Provider) ScanItems(ctx context.Context, tableName string, filterExpr * input.ExpressionAttributeValues = filterExpr.Values() } - paginator := dynamodb.NewScanPaginator(p.client, input) + paginator := dynamodb.NewScanPaginator(p.client, input, func(opt *dynamodb.ScanPaginatorOptions) { + opt.Limit = 100 + }) items := make([]models.Item, 0) @@ -136,11 +138,11 @@ outer: if len(items) >= maxItems { break outer } + } - if time.Now().After(nextUpdate) { - jobs.PostUpdate(ctx, fmt.Sprintf("found %d items", len(items))) - nextUpdate = time.Now().Add(1 * time.Second) - } + if time.Now().After(nextUpdate) { + jobs.PostUpdate(ctx, fmt.Sprintf("found %d items", len(items))) + nextUpdate = time.Now().Add(1 * time.Second) } } @@ -159,7 +161,9 @@ func (p *Provider) QueryItems(ctx context.Context, tableName string, filterExpr input.ExpressionAttributeValues = filterExpr.Values() } - paginator := dynamodb.NewQueryPaginator(p.client, input) + paginator := dynamodb.NewQueryPaginator(p.client, input, func(opt *dynamodb.QueryPaginatorOptions) { + opt.Limit = 100 + }) items := make([]models.Item, 0) @@ -180,11 +184,11 @@ outer: if len(items) >= maxItems { break outer } + } - if time.Now().After(nextUpdate) { - jobs.PostUpdate(ctx, fmt.Sprintf("found %d items", len(items))) - nextUpdate = time.Now().Add(1 * time.Second) - } + if time.Now().After(nextUpdate) { + jobs.PostUpdate(ctx, fmt.Sprintf("found %d items", len(items))) + nextUpdate = time.Now().Add(1 * time.Second) } }