2186 Commits

Author SHA1 Message Date
Sybren A. Stüvel
f05e87860c Bump Go version to 1.22.4 2024-06-08 20:55:54 +02:00
Sybren A. Stüvel
7c8a700187 Webapp: only emit 'activeJobDeleted' event when the active job was deleted
Only emit the `activeJobDeleted` event when the active job was deleted.
Previously this was emitted on _any_ job deletion, which would make working
with the web interface quite confusing when mass deletion was happening,
as it would always deselect the job, even when showing an unrelated job.
2024-06-06 16:46:51 +02:00
Sybren A. Stüvel
8b01012539 Website: document more of the sqlc workflow
Document installation & use of sqlc.

Installing sqlc is only necessary to regenerate the database code. Once
generated, the code is independent of sqlc.
2024-05-30 09:50:17 +02:00
Sybren A. Stüvel
7a9f809c43 Manager: convert more worker functions to sqlc
No functional changes.
2024-05-28 18:20:15 +02:00
Sybren A. Stüvel
9a229a7b8f Manager: Convert CreateWorker to sqlc
No functional changes.
2024-05-28 18:20:07 +02:00
Sybren A. Stüvel
0c4240ec3a Manager: make some db fields boolean instead of smallint
Turn `workers.lazy_status_request` and `workers.can_restart` into a
`boolean`. They were `smallint` before.

Having these explicitly modeled as `boolean` will make sqlc generate the
right type for them.

No functional changes.
2024-05-28 18:15:21 +02:00
Sybren A. Stüvel
ee31316d9d Manager: more gracefully log context cancellation errors in database layer
The context passed to the database layer will auto-close when the HTTP
client disconnects. This will cancel any running query, which is the
expected behaviour. Now this no longer results in an error being logged
in the database layer. Instead, a message is logged at debug level.

The API layer is also adjusted to silence logging of `context.Canceled`
for certain operations, most notably getting all jobs and getting all
tasks of a job. These calls occur when the webapp reconnects after a
restart of the Manager. That may trigger a refresh of the page, which
immediately aborts any pending API calls. This is normal and should not
cause errors to be logged.
2024-05-28 17:27:27 +02:00
Sybren A. Stüvel
ee4e41329a Manager: properly set task.JobUUID and task.WorkerUUID when using GORM
Add a GORM hook that sets `task.JobUUID` and `.WorkerUUID`. These were
only set by the sqlc code; this change ensures that they are now always
set, so that the caller doesn't have to worry about which function is
already ported to sqlc and which one is still GORM.
2024-05-28 16:34:09 +02:00
Sybren A. Stüvel
7fd8eca8d9 Manager: more gracefull handle SQLite "interrupted (9)" error
Wrap the SQLite error "interrupted (9)". That error is (as far as I
could figure out) caused by the context being closed. Unfortunately
there is no wrapping of the underlying context error, so it's not
possible to determine whether it was due to a 'deadline exceeded' error
or another cancellation cause (like upstream HTTP connection closing).

Primarily this makes a rather unreliable unit test properly reliable.
The code under test could return either `context.DeadlineExceeded` or
the "interrupted (9)" error (GORM + SQLite doesn't reliably chose one or
the other), and now this is cleanly tested for.
2024-05-28 16:07:23 +02:00
Sybren A. Stüvel
572089f13b Manager: speed up sequential job deletion by checking db when queue empty
Job deletions are placed in an in-memory queue in batches of 100 jobs.
Between batches the Manager's job deleter would idle for 1 minute. Now,
once the in-memory queue has been emptied, the job deleter will wait
only 100ms before checking the database again.

This 100ms might not be necessary either, but I think it's nice to give
the Manager a bit of a breather before diving into another batch of
deletions.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
286d0efa2d Manager: speed up job deletion by skipping the DB integrity check
Speed up the deletion of multiple jobs by skipping the database integrity
check. It is now clear what was causing the integrity issues (disabled
foreign key constraints), and this is now checked for before deleting
anything. This reduces the deletion time from ~500ms per job to ~150ms
(on my computer, with my database, of course).
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
390cb9445c Manager: log duration of job deletion
When a job has been deleted, log how long it took to delete.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
5ec479a983 Manager: remove testing.T parameter from some test setup functions
Replace the use of the `t *testing.T` parameter with just plain `panic()`
when test setup fails. This makes it easier to call the same functions
from other situations, like benchmark functions.

No functional changes to Flamenco itself.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
88f90ef0a5 Manager: properly close database at end of test
Instead of closing the sqlite database connection, tell GORM to close the
connection. Only that properly closes the DB, so that testing with a file
on disk doesn't fail when trying to delete that file.

No functional changes to the Manager itself.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
98cbe6a67d Manager: lightly polish job deletion
Tweak the logging a little bit so it's less noisy, properly warns when the
Shaman checkout dir cannot be removed, and optimise the database query
a bit (by just fetching the one field that's needed, instead of the entire
job).

Deletion still works the same.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
79076be91b Manager: Convert task failure persistence to SQLC
No functional changes.
2024-05-28 16:07:22 +02:00
Sybren A. Stüvel
a99e68ec99 Manager: Convert TaskTouchedByWorker to sqlc
No functional changes.
2024-05-28 16:07:21 +02:00
Sybren A. Stüvel
7175bb469b Manager: Convert UpdateJobsTaskStatuses(Conditional) to sqlc
No functional changes.
2024-05-28 16:07:21 +02:00
Sybren A. Stüvel
4435633756 Manager: Convert FetchTasksOfJob() and FetchTasksOfJobInStatus() to sqlc
No functional changes.
2024-05-28 16:07:21 +02:00
Sybren A. Stüvel
4ab853da40 Manager: Convert JobHasTasksInStatus and CountTasksOfJobInStatus to sqlc
No functional changes.
2024-05-28 16:07:21 +02:00
Sybren A. Stüvel
b66490831c Manager: fetch jobs of tasks in FetchTasksOfWorkerInStatus()
The task state machine expects that `task.Job` is set correctly. Since
SQLC does not automatically fill this field (and rightfully so), I've added
a bit of Go code that fetches the job in a separate query.

A TODO is added as a reminder that it would be better for the task state
machine itself to fetch the job when needed.
2024-05-28 16:07:17 +02:00
Sybren A. Stüvel
1e327c510e Manager: Convert FetchTasksOfWorkerInStatusOfJob to sqlc
No functional changes.
2024-05-28 14:46:43 +02:00
Sybren A. Stüvel
950d661377 Manager: convert TaskAssignToWorker and FetchTasksOfWorkerInStatus to sqlc
No functional changes.
2024-05-28 14:46:43 +02:00
Sybren A. Stüvel
dcca9aef03 Manager: convert db.SaveTaskActivity() to SQLC
No functional changes.
2024-05-28 14:46:42 +02:00
Sybren A. Stüvel
a9be729e59 Manager: Convert db.SaveTaskStatus() to SQLC
No functional changes.
2024-05-28 14:46:42 +02:00
Sybren A. Stüvel
a54972ddd0 Manager: Convert db.SaveTask() to SQLC
No functional changes.
2024-05-28 14:46:42 +02:00
Sybren A. Stüvel
f632f2dbb6 SQLC: upgrade to 1.26.0
Doesn't change anything function in the generated code, just the version
numbers & handling of empty comments in the query file.
2024-05-28 14:46:42 +02:00
Sybren A. Stüvel
c1cdff567e Manager: Convert FetchTask to sqlc
This is a bit more work than other queries, as it also breaks apart the
fetching of the job and the worker into separate ones. In other words,
internally the persistence layer API changes.
2024-05-28 14:46:42 +02:00
Sybren A. Stüvel
dc893dcad4 Manager: regenerate Go mock after removal of SaveTask
Regenerate the Go mock implementation after the removal of the SaveTask
function from the mocked interface.

See 097d5abb7c13e6eff1facea12f89f24c144194c0
2024-05-28 14:45:34 +02:00
Sybren A. Stüvel
eba340cedc Bump Go version to 1.22.3
Update Go from 1.22.2 to 1.22.3 (released 2024-05-07)

It includes security fixes to the go command and the net package, as
well as bug fixes to the compiler, the runtime, and the net/http
package.
2024-05-28 08:59:59 +02:00
Sybren A. Stüvel
94923c628d Manager: increase wait time in worker timeout test
Instead of waiting for 1ns, wait for 1ms. That's more stable on my laptop,
and still short enough to not really slow down the test.
2024-05-28 08:53:15 +02:00
Sybren A. Stüvel
097d5abb7c Manager: Remove SaveTask function from interface
Remove `SaveTask(...)` from the persistence layer interface as defined
by the `api_impl` package. It's not used.
2024-05-28 08:53:15 +02:00
Sybren A. Stüvel
2d5de525d0 Website: add FAQ entry about doubling of backslashes in paths 2024-05-27 13:03:01 +02:00
Sybren A. Stüvel
1ac1deaead Document useful git config in gitattributes 2024-05-21 00:57:43 +02:00
Sybren A. Stüvel
422708fffc .gitattributes: mark .sql files as text 2024-05-21 00:57:43 +02:00
Sybren A. Stüvel
c307342f9d OAPI: regenerate code 2024-05-20 10:09:22 +02:00
Sybren A. Stüvel
1dc86119f0 OAPI: change URL to https://flamenco.blender.org/
The flamenco.io website has been off the air for quite a while already.
2024-05-20 10:05:45 +02:00
Sybren A. Stüvel
b97d27c955 Manager: add unit test for db.SaveTaskActivity()
No functional changes.
2024-05-18 12:38:03 +02:00
Sybren A. Stüvel
1eca95cfc9 Website: clarify that the Cycles/OPTIX job type is for Flamenco 3.6+
It needs some new features in the upcoming v3.6
2024-05-16 12:47:01 +02:00
Sybren A. Stüvel
4ce3f13505 Website: link to new 'job type' issue template
For the 'submit your job type on the tracker' link, use the new issue
template I made for that purpose.
2024-05-16 12:40:07 +02:00
Sybren A. Stüvel
7e9963e6ad Website: Replace WebP image with PNG
This is only necessary for those images that are getting processed by
Hugo's image pipeline.
2024-05-16 12:39:52 +02:00
Sybren A. Stüvel
c5b13baab9 Revert "Makefile: use Hugo with the -tags extended argument"
This reverts commit 44ffb09d7daa0e2a8c55750ef5da187a527f6478. Building
the extended version of Hugo requires CGo, which I don't want to have as
a build-time dependency for any part of Flamenco. So, unfortunately, no
WebP support.
2024-05-16 12:36:42 +02:00
Sybren A. Stüvel
9f6c1e3659 Remove checkbox from Custom Job Type issue template
They became (as could be expected) two checkboxes, so better to not include
any options that are mutually exclusive.
2024-05-16 12:32:13 +02:00
Sybren A. Stüvel
166735ec93 Add Gitea issue template for submitting custom job types 2024-05-16 12:30:55 +02:00
Sybren A. Stüvel
80f7ae99b9 Website: add Cycles/OPTIX/GPU job type
Add the latest version of the Blender Studio custom job type to the
website, as it does a few things others may find interesting.
2024-05-16 12:28:55 +02:00
Sybren A. Stüvel
44ffb09d7d Makefile: use Hugo with the -tags extended argument
This is necessary for proper WebP support.
2024-05-16 12:28:55 +02:00
Sybren A. Stüvel
afc5067573 Fix labels in Gitea issue templates
The Gitea labels have been updated from `type::Report` to `Type/Report`,
but the issue templates were still using the old style.
2024-05-16 12:28:55 +02:00
Sybren A. Stüvel
0e2effd29b Website: document 3rd party job type compatibility
All 3rd party job types should get a box with the versions of Flamenco and
Blender they are compatible / tested with.
2024-05-16 12:28:55 +02:00
Mateus Abelli
d5977c637b Website: Fix links in Documentation /development/database
This patch fixes what appears to be placeholders for the markdown links of GORM and SQLC.

Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104309
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
2024-05-16 08:26:03 +02:00
Mateus Abelli
47341a2338 Website: add image to 'Worker cannot find Manager' FAQ entry
Add a screenshot of the Manager's log on the terminal. This should make
it clearer which "Manager output" is meant, also for people who aren't
familiar with terminals.

Fixes #104303
2024-05-15 09:51:57 +02:00