HaxeFoundation / HaxeFoundation/haxe

Server maintenance

Open
#8,734 5 comments 0 reactions 1 assignee Claimed by @Simn View on GitHub
feature-compiler-cache
Dominant language
Haxe
Stars
6.9k
Forks
715
Avg merge
2d 2h
Merged PRs (30d)
11

Description

Once we've merged https://github.com/HaxeFoundation/haxe/pull/8730 we'll be able to poll the connected socket to see if there's a pending request. This should allow us to implement a pattern like so:

```ocaml
let rec loop block =
match read_from_socket block with
| Some data ->
process_data data
| None ->
if there_is_more_maintenance_to_do() then begin
do_some_small_maintenance();
loop false
end else
loop true
in
loop false
```

This assumes that the socket read function returns `Some data` if there's data, and `None` otherwise.

It is important to keep maintenance tasks small so an incoming request isn't delayed too much. Such tasks could include:

* Do some GC maintenance (https://github.com/HaxeFoundation/haxe/pull/8727).
* Walk a type's fields and check if `cf_expr_unoptimized` is equal to `cf_expr`, in which case we can unset it (this currently nearly doubles the memory required for typed AST storage).
* Check if we have compilation contexts which haven't been accessed in a long time and discard them.
* Once we have a binary format (https://github.com/HaxeFoundation/haxe/issues/8275), check if we have some data which hasn't been used for a while and could be "demoted" to binary to save memory.

Generally, the goal is to keep memory usage at an acceptable level while not disrupting operations.

This requires some design to abstract the maintenance tasks.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.