Hi @Davi Massaru Teixeira Muta ,

As far as i know, there is no lock log history.

This is understandable, as there would be a lot of them on heavily used systems.

If you can modify the application code, may be you can add log trace when this error happens.

With ^$LOCK you can retrieve the owner of a lock.

Example:

Lock +^my.global(1)
Write "Owner is : ", ^$LOCK($Name(^my.global(1)),"OWNER")
;Owner is : 5216

Even if you recover the PID, analysis can be difficult if the process no longer exists at the time you perform the analysis.  Maybe add something like this for logging (executed with a job):

/// Start this method in job ex:
/// Job ##class(pkg.ClassName).TraceLock($Name(^my.global))
ClassMethod TraceLock(lockname As %String) As %Status
{
    Set sc = $$$OK
    
    Set pid = ^$LOCK(lockname, "OWNER")
    If pid = "", $QLength(lockname)>0 {
        ; check if the node is fully locked
        Set pid = ^$LOCK($QSubscript(lockname,0), "OWNER")
    }
    
    If pid = "" {
        ; no data ...
        Return sc	
    }
    
    Set key = $Increment(^debug.locktrace)
    
    Set ^debug.locktrace(key, "from pid") = $ZParent	; Just to keep a trace of the pid started this job
    Set ^debug.locktrace(key, "info") = $ZDateTime($Horolog, 3, 1) _ " The lock " _ lockname _ " owner is "_pid
    
    Set process = ##CLASS(%SYS.ProcessQuery).Open(pid)
    If $IsObject(process) {
        Set ^debug.locktrace(key, "owner-UserName") = process.UserName
        Set ^debug.locktrace(key, "owner-StartupClientIPAddress") = process.StartupClientIPAddress
        Set ^debug.locktrace(key, "owner-StartupClientNodeName") = process.StartupClientNodeName
        Set ^debug.locktrace(key, "owner-CurrentLineAndRoutine") = process.CurrentLineAndRoutine
        Set ^debug.locktrace(key, "owner-Routine") = process.Routine
    }
    
    Return $$$OK
    
    ; Exemple of result:
    ;^debug.locktrace=1
    ;^debug.locktrace(1,"from pid")=12964
    ;^debug.locktrace(1,"info")="2024-11-22 12:25:25 The lock ^my.global owner is 5216"
    ;^debug.locktrace(1,"owner-CurrentLineAndRoutine")=""
    ;^debug.locktrace(1,"owner-Routine")="shell"
    ;^debug.locktrace(1,"owner-StartupClientIPAddress")="127.0.0.1"
    ;^debug.locktrace(1,"owner-StartupClientNodeName")="TRM:"
    ;^debug.locktrace(1,"owner-UserName")="_SYSTEM"
}

Hope this help.

Lorenzo.
 

Hi @Dmitry Maslennikov ,

Yesterday I experienced this kind of problem with web socket.
To limit the license usage, I did this : 

Class dc.journalindexer.WebSocket Extends %CSP.WebSocket
{

Method OnPreServer() As %Status
{
    Do %session.Login("wsuser",,1)
    Set ..SharedConnection = 1
    ; ... some lines of code
    Quit sc
}

Method OnClientMessage(
	data As %String = "",
	close As %Integer) As %Status
{
    ; force logout and EndSession on disconnect from client
    If $Get(close) = 1 {
        Do %session.Logout()        
        Set %session.EndSession = 1
        Do ..EndServer()
    }

	Quit 0
}
}

Hi @Luis Angel Pérez Ramos ,

Thank you very much for describing how to use JWT auth with IRIS web app.

How do you solve the problem with cross-origin for development?  (Basically we use the port 4200 in development mode)

I tested with the Parameter HandleCorsRequest = 1; in the dispatch class, also setup an Event class (%CSP.SessionEvents) to force the response header Access-Control-Allow-Origin to "*" but something was wrong.

The problem occurs the /login usage, not with others services in my route map

If you experienced the same problem, I'm interested in your solution :)

Thank you.

Hi @Robert Cemper ,

Stats very interesting to know.

I'm glad to read the French Community is reactive 😄.  

This weekend I've been working on integrating code from @Theo Stolker and bug fixes about openapi-suite.  I was very happy to have a contribution.  

I noticed all issues (tasks for improvement in fact) of a project currently in active development were opened, but already done.  With Kanban it's not enough to move an issue to "done status", we have to close explicitly.  I probably raised your stats with this repository journal-indexer.

Finally, there is a solution @Theo Stolker .
If I parse by URL and send parameters "resolveFully=true" and "validateExternalRefs=true", the specification is fully resolved including external references.  I can't commit\push this update directly, because if a user puts a URL only accessible from inside his organization, It does not work.  It's not really a problem because the validator tools can be run locally in a container, but I have to update the documentation too.
I created the related issue 9 to follow the progression.  I can't continue anymore this morning.  I'll continue this evening.

Thank you very much for your contribution @Theo Stolker .
Your pull request is merged and a new release on OEX has been published.  

I'm still wondering if there is a simple way to resolve external references, I'll check if something help with validator.swagger.io (this tools is already used by OpenAPI suite).  There is an option for external ref but I don't know yet what that implies, I have to test that.

Hi @Theo Stolker ,

I just tested the "DID Manager" specification.

With the simple http client, I noticed a code generation issue with double-quoted HTTP status code.
It's fixed.

I see a generated model like model.CompoundServicePropertiesserviceEndpoint empty.
So, If we check the specification and we can see:

        serviceEndpoint:
          description: A map containing service references and/or endpoints.
          example: { 'auth': 'did:nuts:EwVMYK2ugaMvRHUbGFBhuyF423JuNQbtpes35eHhkQic/serviceEndpoint?type=auth' }
          type: object

It's a type object, but there is no schema defined, so we can't generate any properties in this case.
This is the same problem with the model model.OrganizationSearchResultorganization.

I also noticed external references in the specification file like :

        didDocument:
          $ref: '../common/ssi_types.yaml#/components/schemas/DIDDocument'

Indeed, this case is not supported.
I haven't checked for all the specs, but I think the 2 cases noted are the cause for the empty models.

If we specify a URL, maybe it would be possible to download the external ref and load the definition (to analyze...).