Explain auto docu and fix NewFlowPostgres#262
Conversation
| _ = conn | ||
| // err = waitDatabaseInitialized(ctx, conn) | ||
| // _ = conn.Close(ctx) | ||
| // if err != nil { |
There was a problem hiding this comment.
@bastianjoel I deactivated this code, since I did not know how to solve it.
This code checks for the version table. It only passes, if the version table has one entry. But I don't know, when it is written.
Is it the backend? If so, we need another check. Because the backend is not running in the go tests.
Can you tell me, who is writing into the version table?
There was a problem hiding this comment.
Yes indeed the backend is filling the version table during initialization and migrations.
I advise you to add a migration number to the version table in your test setups initialization process right after filling in the schema.
There was a problem hiding this comment.
This is how it's being done in the backend. https://github.com/OpenSlides/openslides-backend/blob/e0ce9db82d895885e05e143731ad5df320084e67/openslides_backend/services/postgresql/create_schema.py#L89
There was a problem hiding this comment.
Would it be possible to do this in this file?
https://github.com/OpenSlides/openslides-meta/blob/main/dev/sql/base_data.sql
There was a problem hiding this comment.
Yes. Currently I don't see a reason not to do it here. This file expects an empty database anyway.
@bastianjoel The bug with the auto generation of the environment happens, because I never documented, how the environment system works.
I added some explanation, how the system was designed. I also changed the NewFlowPostgres function, to it behaves correctly.
You can find the necessary changes for a service here for the autoupdate: OpenSlides/openslides-autoupdate-service#1426
If you are ok with this change, then we have to fix the other go services as well.
If you don't like it, we have to discuss, how we solve it in another way. The current implementation breaks the idea behind the environment package.
Another way would be, if the Postgres-flow gets an "init" method that has to be called after NewFlowPostgres.
I like the returned init function better, because it makes it very hard to forget to call it. But an separate init method would be ok for me.