Merci pour cette notification @Adeline Icard ,

Je viens juste de finir une série de mise à jour en version 2023.1.3 😅

Je ne sais pas dans quelle mesure nous pourrions être exposé à cette memory leak et vais conseiller d'attendre une version 2023.1.4 pour les systèmes de production dans l'attente d'en savoir plus.
Edit: Comme c'est limité à AIX, pas d'impact de mon coté.

Bonjour @Pierre LaFay , je profite de cet article pour partagé un problème que nous avons tout récemment rencontré.  le paramètre MAXLEN comme ci-dessous: 

Property PropertyName As%String (MAXLEN = "");

signifie "pas de limite", c'est à dire la longueur max d'une chaine.

Via le JDBC, ce MAXLEN="" ne semble pas interprété comme en ObjectScript, vous pouvez donc aussi avoir des données tronquées.  Dans ce cas d'utilisation, il vaut mieux utiliser un MAXLEN avec une grande valeur (ex : MAXLEN = 3000000) que "".  Il s'agit probablement que d'un petit bug au niveau du driver, j'ouvrirai peut être un WRC à ce sujet prochainement.

Bonsoir Julia,

Si vous renvoyez toujours le json avec la liste tPrinter complète, le plus simple serait de faire un clear de la liste et la recharger, ex : 
 

ClassMethod TestUpdate() As%Status
{
	Set tSC = $$$OKSet json = {
		"NomPoste":"Poste",
		"tPrinter":
		[
			{
				"NomService":"Petite",
				"NomImprimante":"EPFR_12"
			},
			{
				"NomService":"Grande",
				"NomImprimante":"modif"
			}
		]
	}
	
	Set id = 1Set tSC = ..UpdatePoste(id, json)
		
	Return tSC
}



ClassMethod UpdatePoste(id As%Integer, json As%DynamicObject) As%Status
{
	Set poste = ##class(Epc.conf.poste).%OpenId(id, , .tSC)
	
	If$$$ISERR(tSC) Return tSC
	
	Do poste.tPrinter.Clear() ; supprime le contenu actuel de la liste tPrinterDo poste.%JSONImport(json)
	
	Set tSC = poste.%Save()
		
	Return tSC
}

Est-ce que cela peut vous aider ?

Merci pour cette article @Matthieu LAURENT 
L'utilisation du parameter LOCATION est une très bonne pratique pour éviter un piège.

Par défaut si ce n'est pas précisé le système enregistre dans la global qui  correspond au nom de la classe en se terminant par un S (ex : ^User.TestStreamS pour la classe User.TestStream).  Ce n'est pas forcément un problème, mais à l'usage: si quelqu'un fait 
Set obj.Justificatif = ##class(%Stream.GlobalCharacter).%New() 

Le stream se retrouve par défaut dans ^CacheStream ce qui peut devenir un problème si on répète cela avec des streams de différentes classes.

L'utilisation du parameter LOCATION évite cela même dans ce cas de figure.

Bonsoir @ilyes Bahlagui ,

L'erreur <FILEFULL> est caractéristique d'un fichier base de données (IRIS.DAT) qui ne dispose plus d'espace libre et qui ne peut plus s'étendre sur le file system.

Cela peut se produire dans les cas suivants : 

  • le disque sur lequel la database est stockée en ne dispose plus d'espace.
  • la database a été paramétrée avec une taille maximum et elle a été atteinte.

Je lis que vous êtes sur une version IRIS Community, je sais qu'il y a une limite au niveau de la taille des bases de données sur cette version gratuite, cela pourrait être aussi la cause du problème si vous avez atteint cette limite.

Selon la documentation officiel, l'ensemble des bases de données ne peut pas dépasser 10GB en community edition.

Pouvez-vous vérifier si vous êtes dans l'un de ces cas de figure ?

Dans le cas ou vous auriez atteint anormalement la limite de 10 Gb pour l'ensemble des base de données, vous pouvez utiliser l'utilitaire :

Do^%GSIZE

afin d'identifier les globals les plus volumineuses.

Lorenzo.

Décision logique, chez Zorgi nous sommes aussi passé par l'api. 

Nous avons ajouté des "metrics" personnalisées pour nos apps et construit nos dashboards  avec des outils dédiés comme Grafana et Prometheus.

Bonjour @Corentin Blondeau 
Je n'ai pas pu tester par moi-même, mais intuitivement je pense qu'il manque une une Instruction "Open" pour que le "Use" et "Write" puisse fonctionner.

Essayez avec un appel à la méthode Open de l'adapter avant le SendStream: 

$$$TOE(status,..Adapter.Open(..Adapter.Device))
Set status = ..Adapter.SendStream(stream)
Do..Adapter.Close(..Adapter.Device)

Oui en effet!
On ne trouve malheureusement aucun exemple d'utilisation de cet adapter et je me demande s'il est bien fonctionnel.  

En suivant le code de la méthode "OnInit", ensuite la méthode "Open", on retrouve la ligne:

Open pDevice:(pParameters):pTimeout

qParameters me semble bien trop light, dans votre cas, ça reviendrait à faire : 

Open"c:\intersystems\ensemble\bin/udpsend 127.0.0.1 3001":("WQ"):5

En TCP on ferait quelque chose ressemblant à : 

OPEN"|TCP|3001":("127.0.0.1":3001):5


Je n'ai pas trouvé de documentation qui traite sur l'utilisation du protocol UDP directement avec les commandes Open Use Write donc j'ai tenté d'investiguer en comparant avec la classe "%Net.UDP", mais je suis bloqué sur "$system.UDP.Init(host,port,timeout,sendsiz,rcvsiz)", impossible voir le code qui se cache derrière et donc l'éventuelle utilisation de la commande "Open".  

Si vous avez un accès au WRC vous pouvez leur poser la question.

Bonjour @Anthony Decorte 
Avez-vous essayé en modifiant le 5ème argument?
De ce que j'ai compris dans la documentation pour que le log soit à la fois affiché sur le current device (le terminal j'imagine) et le fichier de log spécifié (en 6ème argument), il faut passer la valeur "LC":
 

WhereToLog indicates the locations to log information during the deployment and can either be empty or a combination of:

			L - Write to the file name specified in the LogFile parameter
			C - write line text to current device
			H - write HTML version of text to temporary global for retrieval by portal
			EI - write text to event log Info