Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(error): handle wrapped errors in IsError() #374

Merged
merged 1 commit into from
Jan 15, 2024
Merged

Conversation

apricote
Copy link
Member

hcloud.IsError() currently does a type assertion to get our error type. This breaks if the error was previously wrapped, causing it to always return "false". This happens often if the error is passed through multiple functions before error handling is being done.

Example of code that is currently broken:

// Error returned by hcloud-go
err := hcloud.Error{ Code: hcloud.ErrorCodeUnauthorized }

// Error gets wrapped at some point in the call-chain
err = fmt.Errorf("failed to foobar: %w", err)

// Now the error is not properly identified
hcloud.IsError(err, hcloud.ErrorCodeUnauthorized) // false

`hcloud.IsError()` currently does a type assertion to get our error
type. This breaks if the error was previously wrapped, causing it to
always return "false". This happens often if the error is passed through
multiple functions before error handling is being done.

Example of code that is currently broken:

```go
// Error returned by hcloud-go
err := hcloud.Error{ Code: hcloud.ErrorCodeUnauthorized }

// Error gets wrapped at some point in the call-chain
err = fmt.Errorf("failed to foobar: %w", err)

// Now the error is not properly identified
hcloud.IsError(err, hcloud.ErrorCodeUnauthorized) // false
```
@apricote apricote self-assigned this Jan 12, 2024
@apricote apricote requested a review from a team as a code owner January 12, 2024 15:44
Copy link

codecov bot commented Jan 12, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Comparison is base (1c82332) 76.42% compared to head (7ae2799) 76.49%.
Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #374      +/-   ##
==========================================
+ Coverage   76.42%   76.49%   +0.07%     
==========================================
  Files          32       32              
  Lines        6732     6727       -5     
==========================================
+ Hits         5145     5146       +1     
+ Misses       1179     1174       -5     
+ Partials      408      407       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@apricote apricote added the backport release-1.x Open PR against release-1.x with these changes after the PR is merged. label Jan 15, 2024
@apricote apricote merged commit 83df108 into main Jan 15, 2024
7 checks passed
@apricote apricote deleted the error-unwrapping branch January 15, 2024 06:27
github-actions bot pushed a commit that referenced this pull request Jan 15, 2024
`hcloud.IsError()` currently does a type assertion to get our error
type. This breaks if the error was previously wrapped, causing it to
always return "false". This happens often if the error is passed through
multiple functions before error handling is being done.

Example of code that is currently broken:

```go
// Error returned by hcloud-go
err := hcloud.Error{ Code: hcloud.ErrorCodeUnauthorized }

// Error gets wrapped at some point in the call-chain
err = fmt.Errorf("failed to foobar: %w", err)

// Now the error is not properly identified
hcloud.IsError(err, hcloud.ErrorCodeUnauthorized) // false
```

(cherry picked from commit 83df108)
apricote added a commit that referenced this pull request Jan 15, 2024
`hcloud.IsError()` currently does a type assertion to get our error type. This breaks if the error was previously wrapped, causing it to always return "false". This happens often if the error is passed through multiple functions before error handling is being done.

Example of code that is currently broken:

```go
// Error returned by hcloud-go
err := hcloud.Error{ Code: hcloud.ErrorCodeUnauthorized }

// Error gets wrapped at some point in the call-chain
err = fmt.Errorf("failed to foobar: %w", err)

// Now the error is not properly identified
hcloud.IsError(err, hcloud.ErrorCodeUnauthorized) // false
```

---

Backport 83df108 from #374.

Co-authored-by: Julian Tölle <julian.toelle@hetzner-cloud.de>
apricote pushed a commit that referenced this pull request Mar 27, 2024
🤖 I have created a release *beep* *boop*
---


##
[2.7.0](v2.6.0...v2.7.0)
(2024-03-27)


### Features

* add volume format property
([#397](#397))
([c0940af](c0940af))
* **error:** handle wrapped errors in IsError()
([#374](#374))
([83df108](83df108))
* require Go &gt;= 1.20
([#392](#392))
([299f181](299f181))
* **server:** deprecate ServerRescueTypeLinux32
([#378](#378))
([2f334c3](2f334c3))
* test with Go 1.22
([#391](#391))
([49be506](49be506))


### Bug Fixes

* falsely omitted fields in firewall schema
([#396](#396))
([a3509b6](a3509b6))
* LoadBalancerUpdateServiceOpts not converted correctly
([#394](#394))
([0f187ce](0f187ce))
* primary ip assignee id not mapped to nil
([#395](#395))
([b5fea38](b5fea38))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
apricote pushed a commit to hetznercloud/fleeting-plugin-hetzner that referenced this pull request Sep 12, 2024
…etznercloud/fleeting-plugin-hetzner!38)

This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/hetznercloud/hcloud-go/v2](https://github.com/hetznercloud/hcloud-go) | require | minor | `v2.6.0` -> `v2.7.2` |

---

### Release Notes

<details>
<summary>hetznercloud/hcloud-go (github.com/hetznercloud/hcloud-go/v2)</summary>

### [`v2.7.2`](https://github.com/hetznercloud/hcloud-go/releases/tag/v2.7.2)

[Compare Source](hetznercloud/hcloud-go@v2.7.1...v2.7.2)

##### Bug Fixes

-   creating firewall with rules not working correctly ([#&#8203;412](hetznercloud/hcloud-go#412)) ([43b2bab](hetznercloud/hcloud-go@43b2bab))

### [`v2.7.1`](https://github.com/hetznercloud/hcloud-go/releases/tag/v2.7.1)

[Compare Source](hetznercloud/hcloud-go@v2.7.0...v2.7.1)

##### Bug Fixes

-   setting firewall rules not working correctly ([#&#8203;405](hetznercloud/hcloud-go#405)) ([16daea0](hetznercloud/hcloud-go@16daea0))

### [`v2.7.0`](https://github.com/hetznercloud/hcloud-go/releases/tag/v2.7.0)

[Compare Source](hetznercloud/hcloud-go@v2.6.0...v2.7.0)

##### Features

-   add volume format property ([#&#8203;397](hetznercloud/hcloud-go#397)) ([c0940af](hetznercloud/hcloud-go@c0940af))
-   **error:** handle wrapped errors in IsError() ([#&#8203;374](hetznercloud/hcloud-go#374)) ([83df108](hetznercloud/hcloud-go@83df108))
-   require Go >= 1.20 ([#&#8203;392](hetznercloud/hcloud-go#392)) ([299f181](hetznercloud/hcloud-go@299f181))
-   **server:** deprecate ServerRescueTypeLinux32 ([#&#8203;378](hetznercloud/hcloud-go#378)) ([2f334c3](hetznercloud/hcloud-go@2f334c3))
-   test with Go 1.22 ([#&#8203;391](hetznercloud/hcloud-go#391)) ([49be506](hetznercloud/hcloud-go@49be506))

##### Bug Fixes

-   falsely omitted fields in firewall schema ([#&#8203;396](hetznercloud/hcloud-go#396)) ([a3509b6](hetznercloud/hcloud-go@a3509b6))
-   LoadBalancerUpdateServiceOpts not converted correctly ([#&#8203;394](hetznercloud/hcloud-go#394)) ([0f187ce](hetznercloud/hcloud-go@0f187ce))
-   primary ip assignee id not mapped to nil ([#&#8203;395](hetznercloud/hcloud-go#395)) ([b5fea38](hetznercloud/hcloud-go@b5fea38))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMjQuMSIsInVwZGF0ZWRJblZlciI6IjM3LjMyNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport release-1.x Open PR against release-1.x with these changes after the PR is merged. Improvement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants