Commit Graph

16569 Commits

Author SHA1 Message Date
Girish Ramakrishnan
00a643e70a release: add the env.tag to output 2024-12-09 09:03:36 +01:00
Girish Ramakrishnan
cc759a8427 Add waiting for lock message 2024-12-09 08:40:54 +01:00
Girish Ramakrishnan
bb392207ea remove global lock
Currently, the update/apptask/fullbackup/platformstart take a
global lock and cannot run in parallel. This causes situations
where when a user tries to trigger an apptask, it says "waiting for
backup to finish..." etc

The solution is to let them run in parallel. We need a lock at the
app level as app operations running in parallel would be bad (tm).
In addition, the update task needs a lock just for the update part.
We also need multi-process locks. Running tasks as processes is core
to our "kill" strategy.

Various inter process locks were explored:

* node's IPC mechanism with process.send(). But this only works for direct node.js
children. taskworker is run via sudo and the IPC does not work.

* File lock using O_EXCL. Basic ideas to create lock files. While file creation
can be done atomically, it becomes complicated to clean up lock files when
the tasks crash. We need a way to know what locks were held by the crashing task.
flock and friends are not built-into node.js

* sqlite/redis were options but introduce additional deps

* Settled on MySQL based locking. Initial plan was to have row locks
or table locks. Each row is a kind of lock. While implementing, it was found that
we need many types of locks (and not just update lock and app locks). For example,
we need locks for each task type, so that only one task type is active at a time.

* Instead of rows, we can just lock table and have a json blob in it. This hit a road
block that LOCK TABLE is per session and our db layer cannot handle this easily! i.e
when issing two db.query() it might use two different connections from the pool. We have to
expose the connection, release connection etc.

* Next idea was atomic blob update of the blob checking if old blob was same. This approach,
was finally refined into a version field.

Phew!
2024-12-07 20:41:22 +01:00
Girish Ramakrishnan
a5b9ff0c3a add to changelog 2024-12-07 11:27:52 +01:00
Johannes Zellner
146afce934 Improve devices error handling 2024-12-06 13:35:52 +01:00
Girish Ramakrishnan
de0909248d start.sh: collapse the mkdir lines 2024-12-05 15:53:03 +01:00
Johannes Zellner
d5b3a56129 dashboard: show devices error within the form 2024-12-05 15:27:10 +01:00
Johannes Zellner
fbed850acc Also validate devices in the setter route 2024-12-05 15:16:06 +01:00
Johannes Zellner
25fb467c02 dashboard: initial UI to attach devices to apps 2024-12-05 14:49:36 +01:00
Johannes Zellner
8493022f75 Allow apps to specify custom devices 2024-12-05 14:21:07 +01:00
Johannes Zellner
621c1ed95a dashboard: import momentjs with all locales 2024-12-05 12:19:58 +01:00
Johannes Zellner
4992e284fb dashboard: never hide or wrap action buttons in app list 2024-12-04 18:15:34 +01:00
Girish Ramakrishnan
e4fb040ddf make tests great again 2024-12-04 16:36:05 +01:00
Girish Ramakrishnan
2bfa49cc2e applinks: add tests 2024-12-04 16:17:07 +01:00
Girish Ramakrishnan
3b9d617e37 groups: add events to eventlog 2024-12-04 11:30:30 +01:00
Girish Ramakrishnan
fdf8025a02 style: remove -> del 2024-12-03 17:36:50 +01:00
Girish Ramakrishnan
423dfb6ace schema: update comment 2024-12-03 16:33:59 +01:00
Girish Ramakrishnan
0a4aede3a8 eventlog: branding events 2024-12-02 12:18:09 +01:00
Girish Ramakrishnan
872705d58d oidc: use the cloudron name as provider name 2024-12-02 12:01:19 +01:00
Girish Ramakrishnan
ca5776e6f3 services: fix oidc usage 2024-12-02 11:00:12 +01:00
Girish Ramakrishnan
d4998b5d55 rename view user-settings to user-directory 2024-12-02 09:02:58 +01:00
Girish Ramakrishnan
e93f5e3e87 oidc: show name in delete dialog 2024-12-02 08:56:03 +01:00
Girish Ramakrishnan
d29bb90c5a update various oidc translations 2024-12-02 08:56:03 +01:00
Girish Ramakrishnan
1230e5c9e7 oidc: add load pattern 2024-12-02 08:36:03 +01:00
Girish Ramakrishnan
dc3d23c27b oidc: flatten the export list 2024-12-02 08:31:35 +01:00
Girish Ramakrishnan
6623061c2c services: fix ticks 2024-11-30 18:02:29 +01:00
Girish Ramakrishnan
1ecb853309 mail: attachment search 2024-11-30 17:42:26 +01:00
Girish Ramakrishnan
2a6c52800b system: filesystems in exclude are excluded from content analysis
some disks can be very slow and noisy (at home). this allows users to simply skip them.
also, applicable for large storage boxes
2024-11-30 13:08:21 +01:00
Girish Ramakrishnan
320ddfda2e compute docker df only once 2024-11-30 12:44:15 +01:00
Girish Ramakrishnan
40febc8ef2 system: rename DISK_TYPES to FS_TYPES 2024-11-30 12:04:07 +01:00
Girish Ramakrishnan
56f6519b3e rename disks to filesystems 2024-11-30 12:04:04 +01:00
Girish Ramakrishnan
f219abf082 system: indent cache file 2024-11-30 11:11:54 +01:00
Girish Ramakrishnan
742a04d149 system: expose getDisks only for tests 2024-11-30 10:42:06 +01:00
Girish Ramakrishnan
26caacc12e Fix debugs 2024-11-30 10:18:48 +01:00
Girish Ramakrishnan
1497518867 better assert message 2024-11-30 10:18:40 +01:00
Johannes Zellner
1a4a69f365 update postgres to add pgvector extension 2024-11-28 17:37:22 +01:00
Girish Ramakrishnan
78520e09c3 domains: add inwx provider 2024-11-26 19:13:33 +05:30
Girish Ramakrishnan
f0207ff161 test: comment it out, it is not run anyway 2024-11-26 15:54:55 +05:30
Girish Ramakrishnan
dd45f1c032 cloudron-support: set connect timeout and redirect ping output 2024-11-26 11:15:27 +05:30
Girish Ramakrishnan
ddf1c8e385 cloudron-support: clarify ipv6 in kernel 2024-11-26 11:10:58 +05:30
Girish Ramakrishnan
948efbaa76 docker: upgrade docker to 27.3.1 2024-11-23 20:31:44 +05:30
Girish Ramakrishnan
ccd1a4319d lint 2024-11-21 19:18:26 +05:30
Girish Ramakrishnan
22be1f1b72 sqlite: create dumps based on the basename 2024-11-21 12:34:06 +05:30
Girish Ramakrishnan
7095862601 sqlite: add some comments 2024-11-21 12:24:27 +05:30
Girish Ramakrishnan
fa98e0570f sqlite: change path to paths 2024-11-21 10:02:26 +05:30
Girish Ramakrishnan
4316d3eade add sqlite3 addon take 2
- there is no container id during the addon lifecycle
- sqlite3 requires the localstorage addon to be inited. so this has to
  become like the ftp option
- remove all that child_process streaming stuff. too complicated
2024-11-21 00:13:17 +05:30
Girish Ramakrishnan
f8cd0b5f52 add sqlite3 addon 2024-11-21 00:13:17 +05:30
Girish Ramakrishnan
a8b3f69acc Update manifestformat 2024-11-21 00:13:17 +05:30
Johannes Zellner
78cb36ea0e Start using POST /api/v1/apps to install 2024-11-20 16:18:37 +01:00
Girish Ramakrishnan
b4d58f0609 aws: add a 20min timeout
in some services like b2, the multi-part copy just hangs. this allows
us to retry
2024-11-20 07:13:43 +05:30