Error al asignar un bloqueo exclusivo

Solapas principales

Esta es la traducción del pregunta original.

Hola a todos,

Tengo una clase que ha estado funcionando hasta ahora :(

La clase extiende la clase EnsLib.RecordMap.Service.FTPService y agrega información para cada fila.

Ahora, cuando guarda el objeto, genera el siguiente error

ERROR #5803: Error al asignar un bloqueo exclusivo

He visto la otra pregunta en la comunidad y he tratado de desbloquear

do ## clase ( mi.clase ) . % UnlockExtent ( 0 , 1 )
pero no funciona
 
¿Alguna idea?
 
Un saludo

Respuestas

Kurro dices que tu clase hereda de FTPService, si ves en el error la línea donde te da el error ¿es código tuyo o es código de la clase FTPService?

Hola,

Hereda de FTPService, pero el error lo está dando el RecordMap cuando hace el save.

Es código mio, tengo sobreescrito el método OnProcessInput para que, en lugar de invocar al BP por cada una de las filas que recupera, lo haga al final tras haber guardado cada una de los registros en la clase RecordMap.

Ya lo hemos desbloqueado borrando registros en la tabla de LockTable pero no se como se gestiona esta tabla.

¿Estos elementos se eliminan solos? ¿Cómo se pueden eliminar todos a la vez, en lugar de uno a uno?

Hola Kurro, 

Si has conseguido que funcione liberando otros registros de la tabla de Lock, entonces tiene toda la pinta que la tabla de locks se ha llenado y por eso no puede darte más bloqueos. 

Si se ha llenado, seguramente tengas entradas en el cconsole.log al estilo 

"LOCK TABLE FULL"

Este error puede llegar a ser grave, pues afecta a todos los locks y es posible que la aplicación y los usuarios se paralicen a la espera de que se vaya liberando dicha tabla, haciendo por tanto un cuello de botella. 

Las buenas noticias, es que probablemente se deba a que no esté bien dimensionada, y la manera de arreglarlo sea simplemente aumentando el tamaño de la tabla de Locks y el GMHeap. Por defecto están muy bajos (1MB) y el consejo cuando se empieza a ver este tipo de mensajes es aumentar y continuar monitorizando. 

Si compruebas que tienes los valores por defecto (de 1MB), mi consejo es aumentarlo al menos a 10MB (que no es prácticamente nada hoy en día) y continuar monitorizando (mirando el cconsole.log e incluso la rutina ^LOCKTAB:

%SYS>do ^LOCKTAB
                            Node Name: IRISTEST
                   LOCK table entries at 09:52AM  04/20/2020
                16746736 bytes usable, 16774512 bytes available.

Si vieses que se vuelve a llenar frecuentemente, es probable que debas aumentarla más, pues tu aplicación, tal y como está diseñada, consume más locks (no es malo ni bueno). 

Ojo, es importante que si aumentas el tamaño de la tabla de locks, has de aumentar el GMHeap en la misma proporción, pues el GMHeap contiene la tabla de locks. 

Te dejo un link a la documentación: 

https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...

https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...

Finalmente, entiendo que este problema te está dando en un servidor de pruebas o desarrollo, si fuese en producción, te recomendaría abrir un caso con soporte (WRC) pues es la manera más segura y rápida de asegurarte una respuesta y que te podamos ayudar.  El community está genial pero si te corre prisa, mejor el WRC ;-)