Skip to content

Conversation

@mnorbury
Copy link
Contributor

@mnorbury mnorbury commented Oct 27, 2023

In some cases, when the resource channel is processing a large collection of objects, the sync process can continue even if the context cancel has been triggered. This is problematic for billing and usage since a sync can significantly overshoot the remaining rows quota. To allow an in-progress sync to abort quicker, we need to modify a number of channel patterns from using range to using select - which will allow the context.Done channel to be monitored.

This PR also adds the OnSyncFinisher hook which is called when the sync has finished adding messages. This allows the client code to call the batch updater close method without missing any updates.

fixes: https://github.com/cloudquery/cloudquery-issues/issues/750

In some cases, when the resource channel is processing a large collection of objects, the sync process can continue even if the context cancel has been triggered. This is problematic for billing and usage since a sync can significantly overshoot the remaining rows quota. To allow an in-progress sync to abort quicker, we need to modify a number of channel patterns from using `range` to using `select` - which will allow the `context.Done` channel to be monitored.

fixes: cloudquery/cloudquery-issues#750
select {
case res <- &message.SyncInsert{Record: resourceToRecord(resource)}:
case <-ctx.Done():
return nil
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not return ctx.Err()?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No good reason, I'll look at doing that 🙏

@github-actions
Copy link

github-actions bot commented Oct 27, 2023

⏱️ Benchmark results

  • Glob-8 ns/op: 190.1

Copy link
Member

@hermanschaaf hermanschaaf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@kodiakhq kodiakhq bot merged commit 6d7be0b into main Oct 30, 2023
@kodiakhq kodiakhq bot deleted the feat/allow-sync-to-be-cancelled branch October 30, 2023 09:42
hermanschaaf pushed a commit that referenced this pull request Oct 30, 2023
🤖 I have created a release *beep* *boop*
---


##
[4.17.0](v4.16.1...v4.17.0)
(2023-10-30)


### Features

* Add IsPaid flag to table definition
([#1327](#1327))
([ffd14bf](ffd14bf))
* Add OnBeforeSend hook
([#1325](#1325))
([023ebbc](023ebbc))
* Adding a batch updater to allow usage updates to be batched
([#1326](#1326))
([0301ed7](0301ed7))
* Adding quota monitoring for premium plugins
([#1333](#1333))
([b7a2ca5](b7a2ca5))
* Allow sync to be cancelled when in progress
([#1334](#1334))
([6d7be0b](6d7be0b))


### Bug Fixes

* **deps:** Update github.com/cloudquery/arrow/go/v14 digest to 50d3871
([#1337](#1337))
([f15a89d](f15a89d))
* **deps:** Update github.com/cloudquery/arrow/go/v14 digest to f46436f
([#1329](#1329))
([ee24384](ee24384))
* **deps:** Update module github.com/cloudquery/cloudquery-api-go to
v1.4.2 ([#1335](#1335))
([2ecd2a1](2ecd2a1))
* **deps:** Update module github.com/cloudquery/plugin-pb-go to v1.13.0
([#1332](#1332))
([5553f85](5553f85))
* **deps:** Update module github.com/cloudquery/plugin-pb-go to v1.13.1
([#1336](#1336))
([b782ee7](b782ee7))
* **deps:** Update module google.golang.org/grpc to v1.58.3 [SECURITY]
([#1331](#1331))
([43f60c2](43f60c2))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants