registro modificar conectar con java mongodb obfuscation

java - modificar - conectar mongodb con netbeans



¿Por qué el controlador Java de MongoDB usa un generador de números aleatorios en un condicional? (4)

Agregue un miembro de la clase inicializado a negativo 1:

private int logit = -1;

En el bloque try, haz la prueba:

if( !ok && (logit = (logit + 1 ) % 10) == 0 ) { //log error

Esto siempre registra el primer error, luego cada décimo error posterior. Los operadores lógicos "cortocircuitan", por lo que logit solo se incrementa en un error real.

Si desea el primero y el décimo de todos los errores, independientemente de la conexión, establezca logit class static en lugar de aa member.

Como se ha señalado, esto debería ser seguro para subprocesos:

private synchronized int getLogit() { return (logit = (logit + 1 ) % 10); }

En el bloque try, haz la prueba:

if( !ok && getLogit() == 0 ) { //log error

Nota: No creo que tirar el 90% de los errores sea una buena idea.

Vi el siguiente código en esta confirmación para el controlador de conexión Java de MongoDB , y al principio parece ser una broma de algún tipo. ¿Qué hace el siguiente código?

if (!((_ok) ? true : (Math.random() > 0.1))) { return res; }

(EDITAR: el código se ha actualizado desde la publicación de esta pregunta)


Después de inspeccionar el historial de esa línea, mi principal conclusión es que ha habido una programación incompetente en funcionamiento.

  1. Esa línea se enrolla gratuitamente. La forma general

    a? true : b

    para boolean a, b es equivalente al simple

    a || b

  2. La negación circundante y los paréntesis excesivos enredan las cosas aún más. Teniendo en cuenta las leyes de De Morgan, es una observación trivial que esta pieza de código equivale a

    if (!_ok && Math.random() <= 0.1) return res;

  3. El compromiso que originalmente introdujo esta lógica tuvo

    if (_ok == true) { _logger.log( Level.WARNING , "Server seen down: " + _addr, e ); } else if (Math.random() < 0.1) { _logger.log( Level.WARNING , "Server seen down: " + _addr ); }

    —Otro ejemplo de codificación incompetente, pero observe la lógica invertida : aquí el evento se registra si es _ok o en el 10% de los otros casos, mientras que el código en 2. devuelve el 10% de las veces y registra el 90% de las veces. Así que los últimos cometen arruina no solo la claridad, sino la propia corrección.

    Creo que en el código que ha publicado podemos ver cómo el autor pretendía transformar el original if-then literalmente, en su negación requerida para la condición de return temprana. Pero luego se equivocó e insertó un "doble negativo" efectivo invirtiendo el signo de desigualdad.

  4. Dejando a un lado los problemas de estilo de codificación, el registro estocástico es una práctica bastante dudosa por sí misma, especialmente porque la entrada del registro no documenta su propio comportamiento peculiar. La intención es, obviamente, reducir las repeticiones del mismo hecho: que el servidor está actualmente inactivo. La solución adecuada es registrar solo los cambios del estado del servidor, y no cada uno de sus observaciones, y mucho menos una selección aleatoria del 10% de dichas observaciones. Sí, eso requiere un poco más de esfuerzo, así que vamos a ver algunos.

Solo puedo esperar que toda esta evidencia de incompetencia, acumulada a partir de la inspección de solo tres líneas de código , no se refiera al proyecto en su totalidad, y que esta pieza de trabajo se limpie lo antes posible.


He visto este tipo de cosas antes.

Había una pieza de código que podía responder a ciertas "preguntas" que provenían de otra pieza de código de "caja negra". En el caso de que no pudiera responderlas, las enviaría a otra pieza de código de "caja negra" que era realmente lenta.

Así que a veces no se veían nuevas "preguntas" nunca vistas, y se mostraban en un lote, como 100 de ellas seguidas.

El programador estaba contento con el funcionamiento del programa, pero quería alguna forma de mejorar el software en el futuro, si era posible que se descubrieran nuevas preguntas.

Entonces, la solución fue registrar preguntas desconocidas, pero resultó que había miles de preguntas diferentes. Los registros se hicieron demasiado grandes y no hubo ningún beneficio en acelerarlos, ya que no tenían respuestas obvias. Pero de vez en cuando, se presentaba un grupo de preguntas que podían ser respondidas.

Dado que los registros se estaban haciendo demasiado grandes, y el registro se estaba interponiendo en el camino de las cosas realmente importantes que llegó a esta solución:

Solo registre un 5% al ​​azar, esto limpiará los registros, mientras que a la larga aún se mostrarán las preguntas / respuestas que podrían agregarse.

Entonces, si ocurriera un evento desconocido, en una cantidad aleatoria de estos casos, se registraría.

Creo que esto es similar a lo que están viendo aquí.

No me gustaba esta forma de trabajar, así que eliminé este fragmento de código y simplemente registre estos mensajes en un archivo diferente , por lo que todos estaban presentes, pero sin anular el archivo de registro general.