Repository navigation
Conversation
…or list all instances compatibility (used by Valkey databases)
…ow mysql.go and postgresql.go implement
DBAAS1-1729 update datastructures
…thods DBAAS1-1729: add valkey client methods
…ests DBAAS1-1729: Valkey integration tests
…047 (DBAAS1-1729)
…cts making them value fields rather than pointer fields, DBAAS1-1729
| type DatabaseFork struct { | ||
| Source int `json:"source"` | ||
| RestoreTime *time.Time `json:"-,omitzero"` | ||
| RestoreTime *time.Time `json:"restore_time,omitzero"` |
There was a problem hiding this comment.
Can this be changed back to json:"-"? RestoreTime is unmarshaled explicitly in UnmarshalJSON, so it should be excluded from the default JSON unmarshaling.
There was a problem hiding this comment.
I'd added this as part of this commit. Users can provide an explicit restore time for the fork-to-restore path for point-in-time-recovery supporting database engines. To clarify the semantics, would reverting to - make json.Marshal to omit the field for engines like Valkey, so on the marshalling path the user reading this response may not identify what restore time was used?
There was a problem hiding this comment.
Yes, reverting to - would indeed omit this field from json.Marshal. I noticed that fork is no longer listed as a parameter in the API docs for creating MySQL, PostgreSQL, or Valkey databases. Do you know if this is intentional?
If fork is still meant to be a settable field during database creation, then I agree that changing it from - to restore_time makes sense.
There was a problem hiding this comment.
yes, I verified that in the current API documentation for MySQL, PostgreSQL, and Valkey, Fork restore is supported and each endpoint documents creating or restoring a database, and the OpenAPI request schema has a separate restore branch with a fork object. source is required, while restore_time is optional. It appears the fork fields aren’t shown in the regular create parameter list because create and restore are represented as separate request-body schemas.
The restore_time tag change is intentional. DatabaseFork.UnmarshalJSON parses the timestamp explicitly, but the tag is also needed to marshal it into fork-create requests. this should be covered by new unit test that verifies the request contains fork.restore_time.
ezilber-akamai
left a comment
There was a problem hiding this comment.
Thanks for the contribution!
| ID int `json:"id"` | ||
| Status DatabaseStatus `json:"status"` | ||
| Label string `json:"label"` | ||
| Hosts DatabaseHost `json:"hosts"` |
There was a problem hiding this comment.
@anmsharm1 Does copilot make sense here? Can you look into this?
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>


📝 Description
- TPT-4130
This change set adds full Valkey database support to the Linode API client and covers it end-to-end with unit and integration tests.
It was developed and staged originally across four related PRs:
available_restore_timesThis PR adds support for
available_restore_timeson the shared Database model, Valkey database response deserialization, Valkey create/update option models, client methods for list/get/create/update/delete, SSL, credentials, patch, suspend/resume and advanced config.This follows the existing database patterns used by MySQL/PostgreSQL and ensures Valkey behaves consistently within the shared client surface.
✔️ How to Test
Here are some notes I took for doing my local development environment setup for linodego development:
linodego developer setup
What are the steps to reproduce the issue or verify the changes?
The test suite helps validate:
available_restore_timesdeserializes correctly for both Valkey and PostgreSQL response shapesHow do I run the relevant unit/integration tests?
Unit tests
Integration tests
Linodego’s integration tests can exercise the real API against a live Linode account, using the same client code that users call in production. They typically create or mutate real database resources, wait for the resource to reach the expected state, assert on the returned fields and lifecycle behavior, and then clean up so the tests validate end-to-end behavior rather than just mocked JSON parsing.
To trigger the live tests, a
LINODE_TOKENshould be set an env var,