Skip to content

Paket-Permissions #161

@janbritz

Description

@janbritz

Aktuell hat jeder Worker festgesetzte Resourcen-Limits WorkerResourceLimits(max_memory=200 * MiB, max_cpu_time_seconds_per_call=10) was sich aber mit #137 ändern soll. Aufbauen auf diesen Kommentar:

Paket

Jedes Paket sollte sich auf ein festgelegtes Mindestmaß an Resourcen verlassen können, das es verwenden darf. Benötigt das Paket von einer oder mehreren Resourcen mehr, dann kann es über die qpy_config.yml angefordert werden z.B.:

resources:
  virtual_memory: 500 MiB
  cpu_time_per_call: 20s
  [...]

Sollten weniger Resourcen angefragt werden, als das festgelegte Mindestmaß, darf der Worker auch nicht mehr verwenden.

Paketabhängigkeit

Um die Implementierung im Server zu vereinfachen, würde ich vorschlagen, dass die angefragten Resourcen mindestens genauso hoch sein müssen, wie die der Abhängigkeiten. Im SDK könnte man für den Fall, dass das nicht gegeben ist, eine Warnung oder sogar eine Fehlermeldung ausgeben.
Das sollte relativ einfach bei statischen Abhängikeiten umzusetzen sein, bei Dynamischen muss der Entwickler vorher schauen, welche und wieviele die Pakete jeweils benötigen.

Server

Die Limits können vom Admin nach oben geändert werden. Wenn ein Paket mehr Resourcen benötigt, als vom Admin (oder per Default) festgelegt, dann wird das Paket nicht ausgeführt.

Der Admin sollte aber über die config.ini für ausgewählte Pakete Außnahmen machen können z.B.:

[worker_pool]
max_workers = 8
max_memory = 500 MiB

[worker]
virtual_memory = 250 MiB
cpu_time_per_call = 15s

exceptions =
     @qpy/truthtable {
         virtual_memory = 400 MiB
         cpu_time_per_call = 20s
     }
    @qpy/falsetable {
        virtual_memory = 200 MiB
    }

Man könnte hier auch überlegen, dass man zusätzlich zum Identifier auch eine Version angeben kann (@qpy/truthtable/1.0.0), oder die Limits für einen ganzen Namespace ändern kann (@qpy), oder es User-abhängig macht (tu-berlin.de).
Ich würde das wie die CSS-Regeln handhaben: die spezifischste zutreffende Regel (in unserem Fall der Identifer in exceptions) hat Vorrang.

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions