Question
· Déc 21, 2023

ERREUR <Ens>ErrCanNotAcquireJobRootLock

Bonjour,

j'utilise une méthode en python sur une opération pour pouvoir générer un fichier csv à partir d'une table de lien. Cette méthode me génère l'erreur : ERREUR <Ens>ErrCanNotAcquireJobRootLock et cela me bloque complètement pour l'arrête de la production. Mon opération passe en statut "Queued" alors que le fichier est généré et mon message de retour est complet.

La méthode principale de l'opération est :

Method extractionPiecesSage(pRequest As myDSO.msg.exportPiecesSage, Output pResponse As myDSO.msg.retourExport) As %Status
{
    set sc = $$$OK
    set pResponse = ##class(myDSO.msg.retourExport).%New()
    set tFilename = pRequest.sFilename
    set tQuery = "SELECT * xxxxxxxxxx"
    set tConnexion = ""
    Try {
        
        do ..creerFichierCSV(tQuery, tFilename)
        do ..ajouterStreamFichier(tFilename, .pResponse)

        if pResponse.MessageStream.Size '= 0 {
            set pResponse.sFilename = tFilename
            set pResponse.bIsExportOk = 1
        }
        else {
            set pResponse.bIsExportOk = 0
        }  
    }
    Catch ex {
        Set sc = ex.AsStatus()
    }
    Return sc
}

Et la méthode pour générer le csv est la suivante :

ClassMethod creerFichierCSV(query As %String, filename As %String) [ Language = python ]
{
    import pandas as pd
    from sqlalchemy import create_engine
    engine = create_engine('iris+emb:///')  
    df = pd.read_sql(query,engine)
    try:
        df.to_csv(filename, index=False, header = True, encoding='utf-8', sep =';')
    except Exception as e:
                self.log_info(f"Une erreur s'est produite : {e}")
    return
}

Je ne parviens pas à trouver ce qui cloche. Auriez vous ne suggestion svp?

Merci par avance pour votre aide.

Bien cordialement,

Cécile

Version du produit: IRIS 2023.3
Discussion (2)1
Connectez-vous ou inscrivez-vous pour continuer

Bonjour,

C'est la connexion sqlalchemy qui creer une transaction qui n'est jamais relâchée, le code suivant devrait fonctionner:

ClassMethod creerFichierCSV(
	query As %String,
	filename As %String) [ Language = python ]
{
    import pandas as pd
    from sqlalchemy import create_engine,text
    engine = create_engine('iris+emb:///')
    try:
        df = pd.read_sql(text("SELECT * from Ens_Util.Log"),engine)
    except Exception as e:
        raise e
    finally:
        engine.dispose()

    df.to_csv("toto", index=False, header = True, encoding='utf-8', sep =';')

    return
}

Pour relâcher la transaction, aller dans :

Puis selection la transaction :

et enfin, la terminer :