Hola!
Tenemos un problema que viene de lejos pero que ahora se ha acentuado por problemas de red que se están dando en los entornos de producción.
Nuestra aplicación se despliega según el método clásico en unidades mapeadas de red. Esto incluye los ficheros .DOL y .URR
Por alguna razón que no comprendo, cuando hay un micro corte de red, la aplicación Uniface deja de responder. Aunque el acceso a la unidad mapeada se restaure en un segundo, cuando hacemos una llamada con un CALL, por ejemplo, a un procedimiento global la aplicación es incapaz de leer el fichero DOL. Es como si el canal de comunicación no importase. Sin embargo un filexist o un osunix dan respuesta.
Buscando en la documentación, encontré el parámetro de configuración $MEMORY ZIP=ALL que según entiendo guarda en memoria el contenido de estos ficheros y todo guay. Las llamadas a objetos globales van bien pero inesperadamente, en su lugar, dejan de funcionar todos los ACTIVATE de la aplicación y esta crashea.
Estoy un poco desesperado ya la verdad porque por exigencias del guión no podemos pasar a un despliegue con ficheros UAR y a guardar los compilados en cliente.
Un saludo
Sergio.
micro cortes de red y fichero .DOL
Re: micro cortes de red y fichero .DOL
Partimos de que $MEMORY ZIP=ALL funciona con los objetos de la DOL pero no de la URR. ¿tendréis alguna diferencia de configuración en esos dos ficheros?
Por otra parte, mira con un $ioprint=192 qué hace al buscar los ficheros *.sig dentro de la URR. Esto para que te dé alguna pista de por qué no mete en memoria la URR.
Por otra parte, mira con un $ioprint=192 qué hace al buscar los ficheros *.sig dentro de la URR. Esto para que te dé alguna pista de por qué no mete en memoria la URR.
$status=0 ; se acabaron los problemas
Re: micro cortes de red y fichero .DOL
Hola Luís.
Según la documentación $MEMORY ZIP=ALL trata todos los ficheros ZIP (including UAR, URR, and DOL files)
La traza devuelve:
"15:1:19: "Tipo JT_||G2010101"(_detail) DTLF:4 activate "Q1411C"."EXEC"( )
Object Lookup: s:\udesc.urr
Según la documentación $MEMORY ZIP=ALL trata todos los ficheros ZIP (including UAR, URR, and DOL files)
La traza devuelve:
"15:1:19: "Tipo JT_||G2010101"(_detail) DTLF:4 activate "Q1411C"."EXEC"( )
Object Lookup: s:\udesc.urr
Re: micro cortes de red y fichero .DOL
Hola
Imagino que la traza sigue algo como
ZIP error:(IOSERR_FILE_READ_WRITE) on [s:\udes.urr] ” – File read/write failure
La documentación dice eso pero no funciona. Es por ver qué cosas puede haber diferentes con la DOL y la URR (en teoría, ambos son dos ficheros ZIP muy similares) que puedan provocar que el $MEMORY funcione distinto.
Si haces activate de un form que ya habías cargado antes del corte imagino que sí funcionará. Vamos, quiero creer que la DOL la carga completamente en memoria pero que con la URR solamente carga las signatures que ha ido usando.
¿Es posible cambiar el método de despliegue por uno mixto?
Manejar la URR con un file_first en vez de file_only. Y tener una sección [RESOURCES] con la ruta S:\
La idea es que use siempre la URR pero si algo le impide leer el fichero, utilice S:\sig como alternativa.
Se verá que intenta abrir la S:\UDESC.URR y cuando falle, lo intente con
Non-DBMS file open: S:\sig\Q1411C.sig 6
Object size=0000385 sig/Q1411C.sig
Imagino que la traza sigue algo como
ZIP error:(IOSERR_FILE_READ_WRITE) on [s:\udes.urr] ” – File read/write failure
La documentación dice eso pero no funciona. Es por ver qué cosas puede haber diferentes con la DOL y la URR (en teoría, ambos son dos ficheros ZIP muy similares) que puedan provocar que el $MEMORY funcione distinto.
Si haces activate de un form que ya habías cargado antes del corte imagino que sí funcionará. Vamos, quiero creer que la DOL la carga completamente en memoria pero que con la URR solamente carga las signatures que ha ido usando.
¿Es posible cambiar el método de despliegue por uno mixto?
Manejar la URR con un file_first en vez de file_only. Y tener una sección [RESOURCES] con la ruta S:\
La idea es que use siempre la URR pero si algo le impide leer el fichero, utilice S:\sig como alternativa.
Se verá que intenta abrir la S:\UDESC.URR y cuando falle, lo intente con
Non-DBMS file open: S:\sig\Q1411C.sig 6
Object size=0000385 sig/Q1411C.sig
$status=0 ; se acabaron los problemas
Re: micro cortes de red y fichero .DOL
Hola.
Nop, esta linea no llega a salir: ZIP error:(IOSERR_FILE_READ_WRITE) on [s:\udes.urr] ” – File read/write failure
Se queda en el lookup. Con el procmonitor si que me daba un error similar a ese pero eso antes de cambiar el $MEMORY ZIP=ALL
A nivel de ASN, DOL y URR están igual, apuntando a servidor.
No te sigo en lo del despliegue mixto. En S: no tengo ningún recurso s:/SIG al que apuntar mediante [RESOURCES]. ¿Nos tocaría extraer las signatures de la URR a un directorio como el que indicas por cada despliegue que hagamos?
Nop, esta linea no llega a salir: ZIP error:(IOSERR_FILE_READ_WRITE) on [s:\udes.urr] ” – File read/write failure
Se queda en el lookup. Con el procmonitor si que me daba un error similar a ese pero eso antes de cambiar el $MEMORY ZIP=ALL
A nivel de ASN, DOL y URR están igual, apuntando a servidor.
No te sigo en lo del despliegue mixto. En S: no tengo ningún recurso s:/SIG al que apuntar mediante [RESOURCES]. ¿Nos tocaría extraer las signatures de la URR a un directorio como el que indicas por cada despliegue que hagamos?
Re: micro cortes de red y fichero .DOL
Me sorprende un poco que no salga esa línea si sale para la DOL.
Lo del despliegue mixto es aprovechar las posibilidades de despliegue que ofrece Uniface. Tienes la URR como fichero de signatures habitual pero tener una alternativa en caso de que falle la red.
Imagino que en la sección [SETTINGS] del asn tendréis esta línea
$search_descriptor = file_only
que indica que solamente se busquen los descriptores sólo en fichero (UDESC.urr)
Propongo, como workaround, añadir
$SEARCH_RESOURCES = resources_last
Para que busque los recursos primero en el despliegue clásico y luego en la sección RESOURCES
Y, por tanto, necesitas también añadir la sección [RESOURCES]
[RESOURCES]
s:\
El último paso, hay que hacerlo con cada despliegue, es descomprimir la UDESC.urr -> generará la subcarpeta S:\sig\ con todas las signatures contenidas
Con esto montado...
Utilizará siempre la UDESC.urr... a menos que tenga algún problema que le impida encontrarla. En tal caso, buscará la signature que necesite en S:\sig
El asunto es que esas signatures sueltas también están en red pero estamos hablando de microcortes. Me da la impresión de que la UDESC.urr no se lee completamente y, por tanto, no se almacena en memoria. Y ante cualquier nuevo activate necesita leer la signature de ese componente. Debido al microcorte, no podrá leer la UDESC.urr (porque le ha afectado) pero sí podrá leer el fichero XXX.sig (porque la unidad de red ya está reconectada).
Lo del despliegue mixto es aprovechar las posibilidades de despliegue que ofrece Uniface. Tienes la URR como fichero de signatures habitual pero tener una alternativa en caso de que falle la red.
Imagino que en la sección [SETTINGS] del asn tendréis esta línea
$search_descriptor = file_only
que indica que solamente se busquen los descriptores sólo en fichero (UDESC.urr)
Propongo, como workaround, añadir
$SEARCH_RESOURCES = resources_last
Para que busque los recursos primero en el despliegue clásico y luego en la sección RESOURCES
Y, por tanto, necesitas también añadir la sección [RESOURCES]
[RESOURCES]
s:\
El último paso, hay que hacerlo con cada despliegue, es descomprimir la UDESC.urr -> generará la subcarpeta S:\sig\ con todas las signatures contenidas
Con esto montado...
Utilizará siempre la UDESC.urr... a menos que tenga algún problema que le impida encontrarla. En tal caso, buscará la signature que necesite en S:\sig
El asunto es que esas signatures sueltas también están en red pero estamos hablando de microcortes. Me da la impresión de que la UDESC.urr no se lee completamente y, por tanto, no se almacena en memoria. Y ante cualquier nuevo activate necesita leer la signature de ese componente. Debido al microcorte, no podrá leer la UDESC.urr (porque le ha afectado) pero sí podrá leer el fichero XXX.sig (porque la unidad de red ya está reconectada).
$status=0 ; se acabaron los problemas
Re: micro cortes de red y fichero .DOL
Parece que no hay suerte:
[SETTINGS]
$MEMORY ZIP=ALL
$MAX_QUE = 2024
$ioprint=192
$PROC_PROFILING=true
$PROC_PROFILING_SEPARATOR= comma
$proc_tracing = true
$PROC_TRACING_ADDITION = "%%$clock[H]%%%:%%$clock[N]%%%:%%$clock[S]%%%: "Tipo %%$$TI_LOCALIZACION%%%_%%$23%%%||%%$COMPONENTNAME%%%"
$putmess_log_file=C:\Archivos de programa\Aplicacion Judicial\minerva\adm\log\log_tiempos_0%p.log
$search_descriptor = file_only
$SEARCH_RESOURCES = resources_last
$search_object = file_only
[RESOURCES]
S:\
[FILES]
usys:idf.aps usys:..\components\idf.aps
usys:uu*.frm usys:..\components\uu*.frm
usys:idf*.frm usys:..\components\idf*.frm
usys:ur*.svc usys:..\components\ur*.svc
usys:uu*.svc usys:..\components\uu*.svc
usys:usys*.frm usys:..\usys\usys*.frm
usys:udb*.frm usys:..\usys\udb*.frm
usys:urm*.frm usys:..\usys\urm*.frm
usys:*.trx usys:..\trx\*.trx
usys:uobj.dol s:\uobj.dol
uobj.dol s:\uobj.dol
usys:udesc.urr s:\udesc.urr
udesc.urr s:\udesc.urr
*.frm s:\*.frm
*.aps s:\*.aps
*.svc s:\*.svc
*.rpt s:\*.rpt
El log se sigue quedando en el mismo sitio. No hace ni amago de intentar buscar en la otra ruta la signature:
"9:5:40: "Tipo JT_||MSIOJ01"(_accept) ACPT:7 activate "h100"."EXEC"( )
Object Lookup: s:\udesc.urr
El proc monitor devuelve el error de lectura de la URR y luego da unas cuantas vueltas hasta que se muere de pena. Eso si, al salir del proceso forzandole, bien que cierra el fichero
ReadFile
NETWORK ERROR
\\10.12.19.210\minforms\udesc.urr
Offset: 466.944
Length: 32.768
I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O
Priority: Normal
...
CloseFile
SUCCESS
\\10.12.19.210\minforms\udesc.urr
[SETTINGS]
$MEMORY ZIP=ALL
$MAX_QUE = 2024
$ioprint=192
$PROC_PROFILING=true
$PROC_PROFILING_SEPARATOR= comma
$proc_tracing = true
$PROC_TRACING_ADDITION = "%%$clock[H]%%%:%%$clock[N]%%%:%%$clock[S]%%%: "Tipo %%$$TI_LOCALIZACION%%%_%%$23%%%||%%$COMPONENTNAME%%%"
$putmess_log_file=C:\Archivos de programa\Aplicacion Judicial\minerva\adm\log\log_tiempos_0%p.log
$search_descriptor = file_only
$SEARCH_RESOURCES = resources_last
$search_object = file_only
[RESOURCES]
S:\
[FILES]
usys:idf.aps usys:..\components\idf.aps
usys:uu*.frm usys:..\components\uu*.frm
usys:idf*.frm usys:..\components\idf*.frm
usys:ur*.svc usys:..\components\ur*.svc
usys:uu*.svc usys:..\components\uu*.svc
usys:usys*.frm usys:..\usys\usys*.frm
usys:udb*.frm usys:..\usys\udb*.frm
usys:urm*.frm usys:..\usys\urm*.frm
usys:*.trx usys:..\trx\*.trx
usys:uobj.dol s:\uobj.dol
uobj.dol s:\uobj.dol
usys:udesc.urr s:\udesc.urr
udesc.urr s:\udesc.urr
*.frm s:\*.frm
*.aps s:\*.aps
*.svc s:\*.svc
*.rpt s:\*.rpt
El log se sigue quedando en el mismo sitio. No hace ni amago de intentar buscar en la otra ruta la signature:
"9:5:40: "Tipo JT_||MSIOJ01"(_accept) ACPT:7 activate "h100"."EXEC"( )
Object Lookup: s:\udesc.urr
El proc monitor devuelve el error de lectura de la URR y luego da unas cuantas vueltas hasta que se muere de pena. Eso si, al salir del proceso forzandole, bien que cierra el fichero
ReadFile
NETWORK ERROR
\\10.12.19.210\minforms\udesc.urr
Offset: 466.944
Length: 32.768
I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O
Priority: Normal
...
CloseFile
SUCCESS
\\10.12.19.210\minforms\udesc.urr
Re: micro cortes de red y fichero .DOL
Entonces el workaround no sirve de nada.
Se queda esperando por la URR y no da pie a buscarla en la alternativa. Ya en este punto no puedo ayudar. No sé realmente qué hacen Uniface y Windows con los ficheros. Y por ese desconocimiento no sé por qué Uniface se queda parada. Lógicamente tiene que ver con que tiene un fichero bloqueado que desaparece un instante. Quizás una vez lo tiene abierto se refiere a él por su FILE_ID (y Windows ya no sabe de qué le habla) pero al cerrarlo se refiere a la ruta y ahí Windows le dice que todo perfecto. No tengo ni idea.
Creo que es cosa de abrir un ticket en Uniface.
O dos, porque el $MEMORY no parece funcionar con la URR.
Se queda esperando por la URR y no da pie a buscarla en la alternativa. Ya en este punto no puedo ayudar. No sé realmente qué hacen Uniface y Windows con los ficheros. Y por ese desconocimiento no sé por qué Uniface se queda parada. Lógicamente tiene que ver con que tiene un fichero bloqueado que desaparece un instante. Quizás una vez lo tiene abierto se refiere a él por su FILE_ID (y Windows ya no sabe de qué le habla) pero al cerrarlo se refiere a la ruta y ahí Windows le dice que todo perfecto. No tengo ni idea.
Creo que es cosa de abrir un ticket en Uniface.
O dos, porque el $MEMORY no parece funcionar con la URR.
$status=0 ; se acabaron los problemas