Docs: Edit of 3 files in backend contributor guide (part 6 of doc quality improvement project) (#89582)

* Docs: edit of 3 files in backend contributor guide

* Update contribute/backend/database.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Fix from review

* Update contribute/backend/database.md

* Update contribute/backend/errors.md

* Update contribute/backend/errors.md

* Fix header levels

* Style edits

* Prettier fixes

---------

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
This commit is contained in:
Joseph Perez
2024-06-25 12:28:22 -07:00
committed by GitHub
co-authored by brendamuir
parent 594deb2cbe
commit d49a3e98dc
3 changed files with 86 additions and 99 deletions
+12 -10
View File
@@ -1,6 +1,8 @@
# Database
Grafana uses a database to persist settings between restarts. In fact, if you don't specify one, Grafana creates a [SQLite3](https://www.sqlite.org/) database file on your local disk. This guide explains how to store and retrieve data from the database.
Grafana uses databases to persist settings between restarts. If you don't specify one, Grafana creates a [SQLite3](https://www.sqlite.org/) database file on your local disk. This guide explains how to store and retrieve data from the default or other databases.
## Supported databases and services
Grafana supports the [following databases](https://grafana.com/docs/installation/requirements/#database):
@@ -16,7 +18,7 @@ Grafana uses the [XORM](https://xorm.io) framework for persisting objects to the
> **Deprecated:** We are deprecating `sqlstore` handlers in favor of using the `SQLStore` object directly in each service. Since most services still use the `sqlstore` handlers, we still want to explain how they work.
The `sqlstore` package allows you to register [command handlers](communication.md#handle-commands) that either store, or retrieve objects from the database. `sqlstore` handlers are similar to services:
The `sqlstore` package allows you to register [command handlers](communication.md#handle-commands) that either store or retrieve objects from the database. The `sqlstore` handlers are similar to services:
- [Services](services.md) are command handlers that _contain business logic_.
- `sqlstore` handlers are command handlers that _access the database_.
@@ -27,7 +29,7 @@ The `sqlstore` package allows you to register [command handlers](communication.m
To register a handler:
- Create a new file `myrepo.go` in the `sqlstore` package.
- Create a new file, `myrepo.go`, in the `sqlstore` package.
- Create a [command handler](communication.md#handle-commands).
- Register the handler in the `init` function:
@@ -48,7 +50,7 @@ Here, `inTransactionCtx` is a helper function in the `sqlstore` package that pro
## `SQLStore`
As opposed to a `sqlstore` handler, the `SQLStore` is a service itself. The `SQLStore` has the same responsibility however: to store and retrieve objects, to and from the database.
As opposed to a `sqlstore` handler, the `SQLStore` is a service itself. Like the handler, the `SQLStore` is responsible for storing and retrieving objects, to and from the database.
To use the `SQLStore`, inject it in your service struct:
@@ -73,13 +75,13 @@ For transactions, use the `WithTransactionalDbSession` method instead.
## Migrations
As Grafana evolves, it becomes necessary to create _schema migrations_ for one or more database tables.
As your use of Grafana evolves, you may need to create _schema migrations_ for one or more database tables.
To see all the types of migrations you can add, refer to [migrations.go](/pkg/services/sqlstore/migrator/migrations.go).
Before you add a migration, make sure that you:
- Never change a migration that has been committed and pushed to main.
- Never change a migration that has been committed and pushed to `main`.
- Always add new migrations, to change or undo previous migrations.
Add a migration using one of the following methods:
@@ -87,7 +89,7 @@ Add a migration using one of the following methods:
- Add migrations in the `migrations` package.
- Implement the `DatabaseMigrator` for the service.
**Important:** If there are previous migrations for a service, use that method. By adding migrations using both methods, you risk running migrations in the wrong order.
> **Important:** If there are previous migrations for a service, use that method. Don't add migrations using both methods or you risk running migrations in the wrong order.
### Add migrations in `migrations` package
@@ -97,11 +99,11 @@ To add a migration:
- Open the [migrations.go](/pkg/services/sqlstore/migrations/migrations.go) file.
- In the `AddMigrations` function, find the `addXxxMigration` function for the service you want to create a migration for.
- At the end of the `addXxxMigration` function, register your migration:
- At the end of the `addXxxMigration` function, register your migration (refer to the following example).
> **NOTE:** Putting migrations behind feature flags is no longer recommended as it may cause the migration skip integration testing.
- [Example](https://github.com/grafana/grafana/blob/00d0640b6e778ddaca021670fe851fe00982acf2/pkg/services/sqlstore/migrations/migrations.go#L55-L70)
[Example](https://github.com/grafana/grafana/blob/00d0640b6e778ddaca021670fe851fe00982acf2/pkg/services/sqlstore/migrations/migrations.go#L55-L70)
> **Note:** We no longer recommend putting migrations behind feature flags because this could cause the migration to skip integration testing.
### Implement `DatabaseMigrator`