Mariano Reingart escribió:
Alvaro:
Mariano Reingart escribió:

Para solucionar el tema si el médico se va y no desbloquea, se podría
implementar algun mecanismo de señales con LISTEN y NOTIFY para detectar
si el bloqueo sigue vigente o no.
Hmm, ¿quién haría listen y quién notify?  ¿Qué identificador se usaría?

Se me ocurre que una forma es que el que necesita acceso (y esta
bloqueado) podría hacer un NOTIFY sobre la misma tabla, y el LISTEN lo
haría el que esta bloqueando.
De esta forma los que tengan bloqueos, los podrían revalidar (cambiar la
fecha o algún otro dato del registro en cuestión).
Si no los revalidan en x segundos listo, se consideraría que la máquina se
apago o la conexión se interrumpió.
Si, aunque el tiempo, debe ser mayor o bien poner algún tipo de "aviso sonoro", pq el médico puede estar "reconociendo" al paciente, y no estar en su mesa, o cosas así, no sé, por ejemplo(que no se si se puede implementar) este aviso, si llega al final despues de "x" segundos, que tenga un ciclo de 3 veces o así,digo esto pq yo he estado allí, y el tema de este tipo de especialistas, es comlicado, por ejemplo, estan con un paciente en consulta, la enfermera lo llama pq a otro paciente que le administran tratamiento tiene una urgencia de 3 o mas minutos por ejemplo, eso no quiere decir que el medico se haya ido, o el pc este desconectado o cosas así,el tema es complicado según yo veo. Consultando aqui con ustedes, me he dado cuenta de deficiencias o problemas en mi "implementación", y son mas de los que pensaba, y todavia...
Igualmente al escuchar en el NOTIFY, tendría que preguntarle al usuario si
renovar el bloque o permitir que el otro usuario modifique el registro,
porque si te dejaron la maquina encendida y el proceso es automático,
estaríamos en la misma (va a renovar el bloqueo cuando el usuario no
esta).

De todas maneras, al seguir siendo un bloqueo lógico, a mi me parece que
también se debe verificar la versión de la fila con xmin, para evitar
sobreescribir los datos que pudo haber escrito otro usuario, por el motivo
que fuese.

Igualmente todo esto es una suposición, habría que probarlo bien.

Por pruebas, que no quede, esto estará como un par de semanas o quizás mas, en pruebas, pq no sólo es eso, tengo que probar auditorias y un sin fin de cosas que pensé que jamás las iba a necesitar:)
Sds
Mariano
Un slaudo
Suso

--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a