Quotas sur les appels et les entrepôts
Up ! 5GL permet de créer des applications utilisées en multi-utilisateurs. Sans contrôle particulier, chaque utilisateur, i.e chaque programme se connectant à un programme serveur, est en mesure de déclencher n'importe quel traitement et de créer autant d'objets qu'il le désire.
Ce principe libéral, convenant parfaitement à des applications légères, pose les problèmes suivants :
- Dans une application où il n'y a pas de quota sur l'usage du Cpu, chaque programme peut effectuer des calculs conséquents qui ont pour effet d'effondrer le serveur.
Chacun a certainement vécu un jour une situation où un utilisateur déclenchant de gros calculs sur son application locale reliée en client-serveur au site central nécessite l'exécution de nombreuses requêtes non optimisées, ce qui a pour effet de monopoliser le Cpu.
- Dans une application où il n'y a pas de quota sur le stockage, chaque programme peut remplir, autant qu'ils peuvent contenir, les entrepôts des serveurs.
Chacun a certainement vécu un jour une situation où les disques durs sont remplis à craquer par de nombreux fichiers inutiles.
Up ! 5GL et Up ! Security Manager possèdent des fonctions permettant de gérer aisément ces situations, afin de contingenter l'usage des ressources. Ces fonctions sont débrayables de la sorte à ne pas pénaliser les applications légères. En effet, ces fonctions sont utiles lorsque l'application comporte des serveurs persistants.
Quotas sur les ressources
Un quota limite sur la consommation d'une ressource particulière portant sur un module, un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type. Les appels d'un module ou les méthodes d'un type supportent les quotas s'ils possèdent l'attribut Quota. Les quotas sont définis au niveau des rôles.
Les quotas sont modélisés par les types Quotas et QuotaUnitaire de Up ! Security Manager selon la hiérarchie suivante :
Des méthodes du type Role de Up ! Security Manager permettent respectivement de :
- Ajouter un quota pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type.
- Modifier un quota pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type.
- Supprimer un quota pour un rôle sur un module, sur un type, sur un objet, sur un appel de procédure ou de fonction d'un module, sur un appel de méthode d'un type.
Quotas de temps d'exécution
Un quota sur le temps d'exécution est limite sur la consommation de Cpu est de deux ordres :
- Le quota maximal.
L'appel ne peut consommer plus d'un certain quota de temps pour exécuter le code utilisateur mais aussi le code système des tâches du processus. Ce quota s'exprime en secondes.
- Le quota proportionnel.
L'appel ne peut consommer plus d'une certaine proportion de temps pour exécuter le code utilisateur mais aussi le code système des tâches du processus. Ce quota s'exprime en pourcentage.
Quotas sur les entrepôts
Un quota sur un entrepôt limite l'occupation en volume de l'entrepôt. Il n'est pas possible de créer plus d'objets que le quota l'autorise. Ce quota s'exprime en octets.
Vérification des quotas
Dès lors que les quotas sont déclarés, Up ! Security Manager les vérifie. Si une vérification échoue alors :
- L'exception QuotaTempsDepasse est envoyée si un quota de temps d'exécution était sur le point d'être dépassé.
- L'exception QuotaEntrepotDepasse est envoyée si un quota d'occupation d'entrepôt était sur le point d'être dépassé.
Pour le quota proportionnel de temps d'exécution, dès que la proportion est atteinte, Up ! System commute automatiquement de tâches pour rendre le Cpu à une autre tâche de l'application en technologie Up ! Virtual Technical Machine ou d'une autre application.