[SOLUCIONADO]Problemas de concurrencia en masa

Buenas Tardes,

Tenemos un problema y es que para el programa de notas, al ingresar las notas en masa por varios docentes, sale el problema de CONCURRENCIA:

“se han encontrado los siguientes problemas: error de concurrencia en la edicion de los datos. mientras usted editaba esta información, la misma fue modificada por alguien mas.”

Como solucionamos este problema ??

La concurrencia es sobre el acceso a la misma tabla o al mismo registro ?? ya que cada docente tiene sus popias asignaturas.

Gracias

Hola Jhon,
Es sobre el mismo registro. Deberías comprobar el mensaje detallado para ver si realmente estan modificando la misma información.
Lo que hace el script es agregar al WHERE los valores originales del registro, si cambiaron asume que alguien mas lo modificó y por ende hay problemas de concurrencia. También puede ocurrir que sea un falso negativo porque, por ejemplo, se esta modificando manualmente el registro o un error nuestro en la comparación. Si puedes mirar el detalle del error (ya sea en pantalla o en el log)

Si el error persiste y no le encuentras motivo puedes desactivar el tilde ‘lock optimista’ del datos_relacion en cuestión, eso quita el control

Ok, Ingeniero, muchas gracias, se opta por desactivarlo, porque son mas las quejas que los beneficios, de todas formas el sistema garantiza que a cada docente le salen solamente sus asignaturas.

Se desactivo en la API de toba, pero sigue saliendo el famoso falso positivo, pregunto,

  1. se exporta y regenera nuevamente ya que NO tomo dicha modificacion
  2. Si solamente se tiene abierta la base de datos por PGAdmin, esto provoca dicha concurrencia?
  3. Si se tiene un archivo.php de la aplicacion provoca la misma ???
  4. Si en dos TABs diferentes dentro del mismo CI se parte una tabla en dos por la cantidad de campos, provoca la concurencia, por ejemplo en un ML del primer TABs se ingresan las Notas, en un segundo TAB se ingresan las Fallas y observaciones. Ambos comparten el mismo CI y el mismo Datos Relacion??

Adjunto Imagen
Gracias x pronta respuesta

Se capturo este SQL, por favor lo revizan que encuentra. Lo peor de todo es que ya se desactivo el Locking Optimista
pero sigue el bendito error, se imaginaran el caos en pleno proceso de ingreso de notas para 800 estudiantes …

Creemos que que en la comparacion se incluyen los campos de que relacionan las dos tablas, si ese es el error, que recomiendan, es un Bug ??

OJO que eno_estudiante: tenía el valor “62” y ahora tiene “60” se ingresa con un estudiante y sale otro ??? grave adjunto archvio de edicion,

Mientras Ud. editaba esta información, la misma fue modificada por alguien más. Para garantizar consistencia sólo podrá guardar cambios luego de reiniciar la edición.
Más info…

Tabla: estudiante_notas

Diff de datos: Cambios en fila 2

* eno_alto: tenía el valor NULL y ahora tiene "9425,9426"
* eno_autoevaluacion: tenía el valor NULL y ahora tiene "4.50"
* eno_basicas: tenía el valor NULL y ahora tiene "1409"
* eno_ciudadanas: tenía el valor NULL y ahora tiene "1410"
* eno_cualitativo: tenía el valor "0" y ahora tiene "2"
* eno_cuantitativo: tenía el valor "0" y ahora tiene "4.43"
* eno_estudiante: tenía el valor "62" y ahora tiene "60"
* eno_final: tenía el valor NULL y ahora tiene "4.30"
* eno_laborales: tenía el valor NULL y ahora tiene "1411"
* eno_parcial1: tenía el valor NULL y ahora tiene "4.50"
* eno_participacion: tenía el valor NULL y ahora tiene "4.00"
* eno_taller1: tenía el valor NULL y ahora tiene "5.00"
* eno_taller2: tenía el valor NULL y ahora tiene "4.50"
* eno_total_evaluaciones: tenía el valor NULL y ahora tiene "4.50"
* eno_total_produccion: tenía el valor NULL y ahora tiene "4.75"
* eno_total_trabajo: tenía el valor NULL y ahora tiene "4.00"

SQL: UPDATE estudiante_notas SET eno_autoevaluacion = “4”, eno_cualitativo = “2”, eno_cuantitativo = “4.14”, eno_final = “4.2”, eno_parcial1 = “4.3”, eno_participacion = “4”, eno_taller1 = “4.3”, eno_taller2 = “4”, eno_total_evaluaciones = “4.3”, eno_total_produccion = “4.15”, eno_total_trabajo = “4” WHERE eno_alto IS NULL AND eno_anno = “2009” AND eno_area = “3” AND eno_asignatura = “15” AND eno_autoevaluacion IS NULL AND eno_bajo IS NULL AND eno_basicas IS NULL AND eno_basico IS NULL AND eno_ciclo = “2” AND eno_ciudadanas IS NULL AND eno_comportamiento IS NULL AND eno_cuaderno IS NULL AND eno_cualitativo = “0” AND eno_cualitativo_comportamiento = “0” AND eno_cuantitativo = “0” AND eno_debilidades IS NULL AND eno_estudiante = “62” AND eno_fallas IS NULL AND eno_final IS NULL AND eno_fortalezas IS NULL AND eno_grado = “2” AND eno_grupo = “2” AND eno_jornada = “1” AND eno_laborales IS NULL AND eno_obs_docente IS NULL AND eno_parcial1 IS NULL AND eno_parcial2 IS NULL AND eno_participacion IS NULL AND eno_periodo = “3” AND eno_recomendaciones IS NULL AND eno_superior IS NULL AND eno_taller1 IS NULL AND eno_taller2 IS NULL AND eno_taller3 IS NULL AND eno_taller4 IS NULL AND eno_total_evaluaciones IS NULL AND eno_total_produccion IS NULL AND eno_total_trabajo IS NULL AND eno_vigente = “true”;


Hola Jhon,

Una consulta, el proyecto esta compilado?. En el mensaje anterior decias que se exporta y regenera nuevamente… esto lo estas haciendo sobre el servidor de produccion?

Creemos que que en la comparacion se incluyen los campos de que relacionan las dos tablas, si ese es el error, que recomiendan, es un Bug ??
Sin saber cual es la estructura de la tabla no puedo decirte nada, en principio unicamente tiene que agregar a la clausula where los campos de dicha tabla.
OJO que eno_estudiante: tenía el valor "62" y ahora tiene "60" se ingresa con un estudiante y sale otro ??? grave adjunto archvio de edicion,

Mientras Ud. editaba esta información, la misma fue modificada por alguien más. Para garantizar consistencia sólo podrá guardar cambios luego de reiniciar la edición.
Más info…

Tabla: estudiante_notas

Diff de datos: Cambios en fila 2

* eno_alto: tenía el valor NULL y ahora tiene "9425,9426"
* eno_autoevaluacion: tenía el valor NULL y ahora tiene "4.50"
* eno_basicas: tenía el valor NULL y ahora tiene "1409"
* eno_ciudadanas: tenía el valor NULL y ahora tiene "1410"
* eno_cualitativo: tenía el valor "0" y ahora tiene "2"
* eno_cuantitativo: tenía el valor "0" y ahora tiene "4.43"
* eno_estudiante: tenía el valor "62" y ahora tiene "60"
* eno_final: tenía el valor NULL y ahora tiene "4.30"
* eno_laborales: tenía el valor NULL y ahora tiene "1411"
* eno_parcial1: tenía el valor NULL y ahora tiene "4.50"
* eno_participacion: tenía el valor NULL y ahora tiene "4.00"
* eno_taller1: tenía el valor NULL y ahora tiene "5.00"
* eno_taller2: tenía el valor NULL y ahora tiene "4.50"
* eno_total_evaluaciones: tenía el valor NULL y ahora tiene "4.50"
* eno_total_produccion: tenía el valor NULL y ahora tiene "4.75"
* eno_total_trabajo: tenía el valor NULL y ahora tiene "4.00"</blockquote>

Podrias enviarme el resto de los archivos de la operacion?.
Una duda que me queda es si esto se produce cuando los formularios son editados normalmente o cuando se colocan sus campos como solo lectura.
Cuales son las operaciones involucradas en los formularios_ml?.. son altas, bajas, modificaciones?.. una mezcla de todo un poco?

SQL: UPDATE estudiante_notas SET eno_autoevaluacion = "4", eno_cualitativo = "2", eno_cuantitativo = "4.14", eno_final = "4.2", eno_parcial1 = "4.3", eno_participacion = "4", eno_taller1 = "4.3", eno_taller2 = "4", eno_total_evaluaciones = "4.3", eno_total_produccion = "4.15", eno_total_trabajo = "4" WHERE eno_alto IS NULL AND eno_anno = "2009" AND eno_area = "3" AND eno_asignatura = "15" AND eno_autoevaluacion IS NULL AND eno_bajo IS NULL AND eno_basicas IS NULL AND eno_basico IS NULL AND eno_ciclo = "2" AND eno_ciudadanas IS NULL AND eno_comportamiento IS NULL AND eno_cuaderno IS NULL AND eno_cualitativo = "0" AND eno_cualitativo_comportamiento = "0" AND eno_cuantitativo = "0" AND eno_debilidades IS NULL AND eno_estudiante = "62" AND eno_fallas IS NULL AND eno_final IS NULL AND eno_fortalezas IS NULL AND eno_grado = "2" AND eno_grupo = "2" AND eno_jornada = "1" AND eno_laborales IS NULL AND eno_obs_docente IS NULL AND eno_parcial1 IS NULL AND eno_parcial2 IS NULL AND eno_participacion IS NULL AND eno_periodo = "3" AND eno_recomendaciones IS NULL AND eno_superior IS NULL AND eno_taller1 IS NULL AND eno_taller2 IS NULL AND eno_taller3 IS NULL AND eno_taller4 IS NULL AND eno_total_evaluaciones IS NULL AND eno_total_produccion IS NULL AND eno_total_trabajo IS NULL AND eno_vigente = "true";

Esta SQL ejecutada no se corresponde con los datos que supuestamente fueron cambiados, si te fijas bien los valores que me pasas del ‘Diff de datos: Cambios en fila 2’ son totalmente dispares con los incrustados en la SQL, de hecho el where esta creado con los valores originales de la tabla, por lo tanto si falla la SQL en modificar el registro es porque efectivamente los datos de dichas columnas fueron modificados entre la lectura del datos_tabla y la ejecucion de dicha SQL.

Si me pudieras adjuntar mas detalles de la operacion te lo agradeceria :slight_smile:
Saludos
Richard

Favor como prioridad indicarnos como desactivar que se ejecute la busqueda de concurrencia, ya que se desactivo el LOKING OPTIMISTA y en la tabla respectiva de la base tiene valor 0 “donde mas se desactiva???”, pero sigue saliendo el error y estamos llevados.

Gracias

  • Si no lo estan editando directamente en producción tenés que pasarlo como siempre con exportar y regenerar
    [li]Si estan usando metadatos compilados tenes que ejecutar
toba proyecto compilar -p PROYECTO

Si aún así se sigue controlando, por código lo podes desactivar así


$this->get_relacion()->persistidor()->set_lock_optimista(false);

Ingeniero, gracias por la pronta respuesta
Agregue la linea antes de sincronizar

$this->get_relacion()->persistidor()->set_lock_optimista(false);
$this->get_relacion()->sincronizar();

Esperamos que sea la soluciòn estamos en un caos, estare en constante comunicaciòn del caso.

Por la poca experiencia, no compilamos, en windows es desarrollo y en linux producciòn, por la urgencia estamos trabajando directamente en produccion, pero sin compilar.

Gracias,

En realidad el problema estaba resumido en una sola solucion,

Al crear el Datos Tabla de las notas, NO se subio la tabla completa desde postgres, faltaba tildar el PK estudiante, por lo tanto, eso generaba la concurrencia al no tomar esta ultima clave.

Lo tomaria como un BUG el que no suba los PK completos desde postgres, mientras tanto recomiendo a los que trabajan mucho el datos relacion verificar los tildados de los PK.

Gracias por su apoyo en este proceso