Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-shared-library
Reintentar los errores de base de datos Yugabyte espera que un cliente vuelva a intentar
La aplicación de DDL choca con la versión del catálogo, y cada backend físico aún sostenía el viejo falla su siguiente declaración con SQLState 40001 "versión Schema" desajuste para la mesa...: se espera 94, tengo 93". Hibernate no lo vuelve a intentar, así que llega a un usuario como un 500. La última ocurrencia produjo 188 de ellos en toda la flota durante quince minutos, y llegó como un informe de bichos sobre un widget: el la consulta fallida es casi siempre una carga de identidad aburrida que funciona primero en cada Solicitud autenticada, así que cualquier característica grita más fuerte es culpada. No hay ningún ajuste que elimine esto. La guía de operaciones de Yugabyte dice DML concurrente durante DDL "puede utilizar el viejo esquema, el nuevo esquema, o encontrar errores temporales de desajuste de esquema que requieren recuperación de clientes", y los dos banderas de servidor que estrecharían la ventana no se establecen en tiempo de ejecución. con yb-ts-cli, que se niega a ambos sin fuerza, por lo que cambiar cualquiera de los dos costes a reinicio de una base de datos que ejecuta un maestro y un servidor. Una nota anterior en esta base de código culpó al maxLifetime de HikariCP y sugirió lo baja. Eso no habría hecho nada: el servicio de turnos --enable-ysql-conn-mgr=true, por lo que las piscinas Java sostienen conexiones LOGICAL en El propio gestor de conexión de Yugabyte y el raquítico del catálogo viven en el físico compartido respalda que la piscina no posee. No cuesta nada cuando nada está mal: volver a intentarlo es impulsado enteramente por una excepción un cúmulo saludable nunca lanza, así que el camino del estado estacionario es una llamada de lambda. Deliberadamente estrecho sobre lo que va a volver a intentar - una violación de restricción es la la base de datos diciendo que la escritura está equivocada, no que fue desafortunada, y volver a intentarlo convierte un error rápido en tres lentos. Queda un fracaso inconcluso solo. El mismo 40001 también cubre auténticos conflictos de serialización y Yugabyte leer reinicios, que llegan a los usuarios en la actualidad. Nada lo llama todavía; el cableado sigue.
· KlusterServices
Digamos si una terminal está funcionando o esperando a su miembro
Cada terminal en el listado ahora lleva el estado: ocupado, o esperando. Es el una pregunta que alguien hace de una ventana que no puede ver, y es lo que a El color de hexhead minimizado responderá. Una SHELL está esperando cuando el comando de primer plano es una concha. es lo que tmux ya ve en el panel, por lo que esto no necesita contabilidad y no puede ir Qué rancios. Cualquier otra cosa en el primer plano es trabajo que el miembro comenzó. pensando o ocioso. Su transcripción responde en su lugar, de lo último que alguien En realidad SAID: ayudante, stop-rason end.turn - ha contestado y devuelto: WAITING asistente, stop-reason tool.use - está ejecutando algo: BUSY user -a- acaba de enviar, nada de vuelta todavía: BUSY La última LINE es casi siempre de contabilidad, costos de los lados, operaciones de cola, instantáneas de archivos, todas adendadas después de la respuesta, así que leerlo reportaría cada Sesión ociosa como ocupada. El escaneo se remonta al último disco conversacional. Desconocido lee como WAITING, deliberadamente: un "ocupado" equivocado pinta un verde de ventana y ocultas que necesita a alguien, donde un "espera" equivocado sólo atrae la atención. Eso es la dirección más segura para que una luz de estado se equivoque. Por lo tanto, el listado pide a tmux un octavo campo. El título se mantiene después del Támón y el Se mantiene encuadernada; "pane-current-command" es un nombre de comando desnudo sin nada argumentos, por lo que no puede llevar al separador. Verificado en la máquina, no sólo en accesorios: de doce sesiones reales los siete que estaban trabajando en la lectura ocupada y los cinco que habían terminado de leer la espera y el El caso de la concha se cotejo se cotejo contra un "baj" vivo (espera) y un "espera) vivo. 226 pruebas.
· kamo-internal
Elija el modelo y el esfuerzo antes de comenzar una sesión de codificador, una vez
Enviar El diálogo IA tiene, y los dos son la opción SAME en lugar de dos. Alguien que se ha instalado en Soneto en High se ha instalado. Re-sigking en el otro lugar cada vez es el tipo de fricción que nadie reportaría como un bicho y todo el mundo se siente a diario, por lo que la pareja se almacena como una preferencia de interfaz de usuario miembro. acerca de la persona, no el navegador, por lo que un portátil y un escritorio están de acuerdo y despeje un navegador no los vuelve a poner en el Opus. Monta el mapa de preferencias el launchpad ya se lee una vez por carga de página, por lo que querer que no cuesta extra petición sobre la primera pintura. Ambas superficies pueden estar abiertas a la vez. El Centro de Interacción es un panel sobre el página a Enviar diálogo AI está en el lugar para que se anuncie un cambio, así que se anuncie un cambio, así como escrito, y el otro sigue sin ser remontados. Tres cosas que vale la pena llamar: - El diálogo Enviar a la IA ya no vuelve a sembrar el modelo y el esfuerzo cuando se abre. Es lo hizo, cuando eran estado local, y dejar eso habría escrito los defectos de nuevo sobre la elección permanente del miembro cada vez un informe de fallo fue enviado exactamente lo contrario de recordarlo. - Una preferencia almacenada sobrevive al código que lo escribió, así que se comprueba más bien que de confianza, y PER FIELD: un modelo retirado entre lanzamientos no debe también le costó al miembro el esfuerzo que eligieron. Cualquier cosa no reconocida se vuelve a caer, que mantiene una selección de renderizar un valor que no es una de sus opciones. se muestra como una caja vacía, y es como alguien descubre su entorno por ser Se fue. - Los selectos son nativos de la paleta. Este panel está pintado de los colores de la aplicación en una superficie y el emulador en la otra, y MUI's Seleccionar convierte su menú en un portal que necesitaría toda la paleta enhebrado a través de él para evitar que una lista blanca cae de un panel negro. A el control nativo lo obtiene de color y trae el teclado correcto y Con él se lee la pantalla. Reanudar una sesión también usa la elección de pie: elegir una conversación de nuevo y elegir un modelo son decisiones separadas. No hay nuevas teclas de diccionario. Las etiquetas Modelo y Effort y cada nombre de opción son el diálogo Enviar a la de la IA, reutilizado en lugar de duplicado para que no puedan derivar. 13 de 14 guardias y 5363 pases de pruebas. check-i18n-keys está actualmente rojo en otro Trabajo de suscripción en vuelo de sesión, no en nada aquí.
· SecurityService
Llerar el modelo del miembro y su esfuerzo a una sesión de codificador
y deliberadamente no examinado aquí. La policía en el agente es la única cosa que decide lo que se ejecuta una sesión con su propio comentario lo llama "el límite de seguridad de todo el despacho camino" - por lo que un segundo vocabulario en este servicio sería una segunda opinión que podía estar en desacuerdo con ello, y el que no estaba de acuerdo sería el que nadie era leyendo. Cualquier cosa fuera vuelve como una negativa con una sentencia la consola impresiones literalmente, exactamente como un directorio de trabajo desconocido. Llama que es anterior a esto envía.
· KlusterServices
Deja que una sesión de codificador se ejecute en el modelo y el esfuerzo que el miembro eligió
para una nueva sesión y para una reanudación por igual, desde el modelo y el "esfuerzo" y el esfuerzo. son banderas por sesiones de cualquier manera. Ellos son la única parte del comando que un llamante puede influenciar, y todavía no puede expresar una bandera: ambos pasan por el .coder, el mismo vocabulario fijo los usos de envío envida a IA, que mapea un nombre en argumentos fijos y plantea en cualquier otra cosa. El modo de permiso no es accesible desde aquí y no convertirse en un parámetro. Nombrar NEITHER está permitido y significa "lo que sea la propia configuración del miembro dice" - una mejor respuesta que uno que este agente inventó, y lo que cualquier persona que llamara que Presáis de esto envía. Nombrar sólo a UNO se le niega: correr en su modelo pero El esfuerzo de otra persona no es lo que ninguna de las dos respuestas quiso decir. Ultra Code es xhigh más una palabra clave en el MESSAGE, y una sesión interactiva no tiene ningún mensaje para que el agente lo ponga. Por lo tanto, se ejecuta en xhigh y la miembro escribe la palabra ellos mismos, que es el comportamiento honesto en lugar de un silenciosa rebajada disfrada de otra cosa. 215 pruebas.
· kamo-internal
Nombra un cabezal de hechicelo después de la ventana que representa
La punta de la herramienta de un hexhead lee "User w12" - el id de la cabeza, que es el identificador de la ventana, en un cuerda escrita para avatares de miembros. Un muelle de seis ventanas minimizadas era seis etiquetas idénticas, así que la única manera de encontrar el que querías era abrirlos. El título ya estaba allí: cada desove lleva el título de la ventana (la tienda lo requiere), el menú contextual ya lo muestra, y HexHead ya tenía un Alit alimentando tanto su punta de herramienta como su nombre accesible que nada nunca pasados. Thread .head.title- abajo a través de la etapa y la primavera en él. Mantenlo vigente también. Se engenerde una cabeza con el título que la ventana tenía en el momento en que se minimizó, y los títulos siguen movidos después de eso, un chat rebautizado sobre el enchufá, un cambio de lista, una sesión de IA nombrada por el servidor una vez que respuestas. El autobús de la herramienta ahora refleja el "tool:title" como "hexheads":title" y el motor aplica la forma en que aplica conteos no leídos: absoluto, mismo-array en no cambio, y nunca desove una cabeza por una ventana que no tenga ninguna.
· SecurityService
Rechaza un registro cuyo host no nombra organización
Tal huésped podría firmar hasta ahora. Cayó hasta la elección del espacio de trabajo camino y conseguido solo en la membresía, lo que lo convirtió en una puerta donde nada de la Se aplican los propios controles del inquilino: las reglas de acceso y los bloques geográficos son por organización, así que decide (ip, anfitrión) sólo podría responder "permitido que ninguna organización sea dueña de esto anfitrión". Nada fue pasado por alto, porque la membresía todavía estaba probada y completeSignIn vuelve a comprobar las reglas una vez que se elige un espacio de trabajo. Pero la credencial comprobarse sentado detrás de ninguna política de inquilinos, alcanzable apuntando a cualquier DNS nombre en la entrada, y la escalera de bloqueo añadido junto a ella no tenía lista de bloqueos para escalar y contar bajo un inquilino sintético. Se rechaza antes de que se lean las credenciales y antes de la puerta de cierre. El orden es la mitad del punto: un huésped desconocido no es una contraseña equivocada, por lo que contarla camina a un usuario legítimo hacia un cierre por error DNS de un operador, y negarse aquí significa que los contadores de inquilinos sintéticos nunca se crean en absoluto. Dicho claramente en lugar de detrás de la negativa genérica de la credencial. Qué es lo que acoge esto respuestas de la plataforma en no es un secreto. operador que trae a relucir un nuevo dominio de inquilino al que le digan "contraseña equivocada" gastará la tarde que se restablezca. Dos tallas, ambos deliberados: localhost. OrgResolutionService.byHost lo excluye explícitamente, por lo que nunca puede nombrar una organización y la puerta de otro modo harían desarrollo local imposible. Se decide desde el HOST, reflejando que la talla-out existente, NO desde "la dirección del llamante no es pública" . Cada solicitud dentro del clúster mira de esa manera, así que el día X-Forwarded-For-For forwarding repliegue en la producción que versión de la prueba apagaría la puerta a través de la flota. Loopback literales solamente; un nombre de servicio desnudo no está exento. Un interruptor de matar, ************* envío en el envío. Si una mesa de dominio problema siempre detiene la resolución de huéspedes legítimos, el registro tiene que ser reabiertable sin un redespliegue y la reapertura restaura el viejo camino exactamente en lugar de un el tercer comportamiento. Un huésped exento debe mantener DEFERRING a la opción del espacio de trabajo, no simplemente superar el Puerta. Enviarlo por el camino resuelto por el huésped en su lugar lo rompe más tranquilamente: autenticaciónLa forma de tres agumentos de U.U. se niega sin un FQDN resuelto, así que El "anfitrión desconocido" habría llegado vestido de contraseña equivocada. Eso fue un real. defecto en el primer corte de este cambio, ataviado preguntando qué hace el localhost a continuación.
· KlusterServices
Un terminal de codificador lleva el nombre codificador dio la conversación
Corría desde hace mucho tiempo titulado "Startup implementación and Harmony Ajuste de la cuenta". Dos cosas separadas estaban tragando ese nombre. ** El listado.** El título fue WRITTEN una vez, en bootstrap, como marcador de posición. Es una conversación a pocos segundos y renombrándola más tarde si el trabajo resulta ser Otra cosa, por lo que una copia almacenada está equivocada casi inmediatamente. el resto de este archivo ya hace para la lectura tmux y el disco en lugar de manteniendo una mesa. Cuesta 6ms incluso contra una transcripción de 205 MB, porque coderSessionIndex lee sólo los dos extremos de un archivo y memoize en (mtime, tamaño). **La ventana.** Tmux's .set-titles es OFF por defecto, por lo que la aplicación Emitirlo todo el tiempo. El título del cristal ya estaba bien mientras la ventana de la herramienta porque el default de Tmux prefijaría cada nombre con es el nombre de host: que retitinearía cada terminal "desktop-1" sobre el nombre de su nombre El miembro lo dio. de un vistazo y el nombre no cambia de forma entre la apertura de la ventana y el listado que se pone al día - el mismo formulario de SeguridadService que ya utiliza para el etiqueta inicial. Un nombre que el miembro mecanografiado todavía gana y se deja exactamente como mecanografiado; un nombre derivado que lo sobrescribió haría mentir el campo de renombre. La única excepción es un almacenamiento lugarholder es, así que los terminales abrieron antes de que este cambio comience a derivarse sus propias en lugar de necesitar las opciones de nadie reescrito. La unión vive en el manejador /terminals en lugar de dentro de la mitad. TerminalManager sabe sólo tmux, coderSessionIndex conoce sólo el disco, y Tampoco debería tener que aprender sobre el otro para responder a su propia pregunta. 212 pruebas. Verificado contra la máquina en vivo: el terminal de ejecución se resuelve a
· kamo-internal
Mostrar el bloqueo de inicio de sesión como regla que no se puede apagar
SecurityService aplica ahora un bloqueo progresivo de inicio de sesión a cada organización si existe o no una fila para ella cinco intentos libres, luego cinco segundos, luego cerraduras de cinco, quince y treinta minutos, luego un bloque de IP permanente. Detección Las reglas es donde un administrador va a averiguar qué es protegerlos, por lo que tiene que decirlo. Es la primera regla de esta pantalla cuyo interruptor está bloqueado, que necesita más que una entrada desactivada. La fila se sienta primero, teñida, con un candado, un "Siempre en el chip y la escalera se renderizaron sólo como fichas, porque una protección que no se puede configurar todavía tiene que ser legible, y "PROGRESSIVE LOGIN LOCKOUT" solo, no le dice a un administrador nada sobre lo que sucederá a sus usuarios. El botón de eliminación es ABSENT en lugar de desactivado. Eliminar es la otra manera de apagado una regla; SecurityService lo rechaza con un 409 de cualquier manera, y un botón cuyo único resultado es una negativa es un botón que miente. El mismo razonamiento para el diálogo de edición, que para esta regla muestra la escalera solo y la alerta El campo único que un inquilino es de los dueños. El servidor ignora al otro campos en el camino hacia el camino, así que renderizarlos ofrecería ediciones que en silencio no Guardaré. Los nombres de interruptor bloqueados por sí mismo a través de slotProps.input. Las palabras de la fila viven en un elemento hermano, por lo que sin él un lector de pantalla anuncia "caja de cheques, comprobado" y nada más y la punta de la herramienta que lleva la razón de la cerradura no es alcanzable de esa manera en absoluto. inputProps habría sido abandonado en silencio por MUI's Cambiar; check-switch-aria existe porque eso ha mordido este repo antes. Nada aquí hace cumplir nada, y las pruebas lo dicen: la aplicación está atrapada SecurityService's DetectionRuleMandatoryTest. Lo que está aquí es que el la pantalla no miente al respecto. El interruptor no puede moverse, la eliminación no es ofrecido, la escalera es visible, y una regla ordinaria mantiene todos los controles siempre lo había hecho, por lo que la cerradura es sobre este tipo de regla y no sobre las reglas de detección en general. Las llaves del diccionario fueron empujadas a kamo-translation-dictionary primero; siguiente-indección hace un camino clave perdido literalmente, y los mensajes/ es gitignored aquí, por lo que el otros barcos de orden visible galimatías visibles que una construcción verde local no capturaría.
· kamo-login
Muestra el cierre progresivo, así que un letrúnte se explica
El servidor ahora rechaza los inicios de sesión en una escalera y cinco intentos gratuitos, luego cinco segundos, luego se bloquean de cinco, quince y treinta minutos, luego un bloque permanente. Sin nada de esto, la pantalla respondería todo eso con "Nombre de usuario inválido o contraseña" y un botón que en silencio no hace nada, que se lee como el sitio estar roto en lugar de como un control de seguridad funcionando. Cuatro estados, y las diferencias entre ellos son el diseño: Un METER STRIKE aparece bajo el campo de contraseña una vez que los fallos comienzan acumularse, decir cuántos intentos quedan antes de firmar en pausas y para Cuánto tiempo. Alguien que realmente ha olvidado su contraseña debe ser empujado hacia el enlace de reinicio ANTES de que estén bloqueados, no después. La espera de cinco veces se mantiene en línea: el botón Iniciar sesión se convierte en una cuenta repuesta con un barra drenando a través de ella. Tomar la forma y volver a ponerlo por cinco Los segundos serían más perturbadores que la espera. Una LOCK OF MINUTES se hace cargo de la tarjeta de un anillo que vacía, una cuenta repuesta de mm:ss, y una escapada de contraseña, porque por el décimo fracaso la contraseña es olvidados en lugar de mal escribir y la recuperación es una puerta que este cierre no cerca. Se OVERLAYS la forma en lugar de reemplazarla: los campos permanecen montados y desactivado para que un gestor de contraseñas a mitad de lleno no pierda su objetivo. Un BLOCK no tiene cuenta atrás, sin anillo y sin reintiendo. An animación que implica que algo viene cuando nada es mentira contada despacio. Dice que la cuenta no es lo que se bloqueó, porque eso es Verdadero y es lo primero que la persona querrá saber. Aquí no hay política. El navegador es dueño de la cuenta regresiva y nada más . copia de la escalera en código cliente es una copia que un atacante puede editar y una copia que A la deriva el momento en que cambia de lado. Este repo ha sido mordido exactamente por eso antes: el control de la regla de acceso al nodo comparó los tipos de reglas con "lista blanca" mientras El editor escribió "WHITELIST", no coinició con nada, y nadie se dio cuenta. Así que la API Rutas retransten los números del servidor intactos, incluyendo la reenvío 429 como a sí mismo en lugar de colallarlo en 400, lo que reportaría "mala petición" de un respuesta cuyo contenido es cuánto tiempo esperar. Un bloqueo no sacuda el campo de contraseña ni selecciona su contenido. El sacudido "usted mecleó la contraseña equivocada", y durante un control la contraseña nunca fue Mirando el campo culparía al campo estaría culpando a la cosa equivocada. Los cuatro estados entregados y leídos de vuelta con titultero contra servidor enlatado responde, porque una construcción verde no demuestra nada sobre cómo se ve una página. Reducción La moción se cumple explícitamente; la moción/recapacitado no la honra por sí sola.
· SecurityService
Encierro progresivo, escalando a un bloque de IP permanente
Una contraseña equivocada ahora cuesta algo, y el costo sube. Contado desde el El último fichaje acertado de su tema: los primeros cinco fracasos son libres, el sexto y cada uno después de esperar cinco segundos, y el décimo, veinteo y Teniente la puerta durante cinco, quince y treinta minutos. El cuadragésimo se pone la dirección en la lista de bloques permanente de la organización y correos sysadmin. La OMS está contada es la parte que vale la pena leer. El sujeto es normalmente el (dirección, identificador) PAIR, ni una sola parte. Contar el identificador por sí solo permitiría cualquiera que conozca un nombre de usuario bloquear a su dueño desde el otro lado del mundo; contar la dirección por sí sola dejaría a una persona detrás de una oficina compartida NAT bloquea a sus colegas. Una escalera de solo par tiene un agujero, aunque una contraseña a través de doscientos nombres de usuario y ningún par único llega a seis. por lo que una dirección vista fallando contra más de diez identificadores DISTINCT se convierte en un sujeto por derecho propio, y a partir de entonces cada fracaso de él cuenta con uno Escalera lo que sea su cuenta que se llame. El más duro de los dos gobierna. Comprobar ANTES de la contraseña se compara, en cada terminal de credencial: tanto por los caminos de inicio de sesión como el desafío MFA, cuyo espacio de seis dígitos obtiene su propio Escalera para que un autenicador fumbled no pueda gastar el presupuesto del paso de contraseña. A llamante que todavía puede medir la diferencia entre un derecho y una contraseña equivocada mientras está bloqueado tiene un oráculo de trabajo y un cierre de encierro que sólo pierde su tiempo. Los fallos se cuentan para los identificadores que no nombran a nadie, exactamente en cuanto a los que Hazlo. Contar sólo cuentas reales haría un nombre de usuario equivocado barato y un derecho uno caro, que es un oráculo de inscripción de cuenta construido a partir de latencia. Redis-backed, de 30 días de TTL deslizante, despejado donde la última LoginService ya estampó una verdadera sesión de inicio. Fracasado en cada error de Redis, que coinja con AccessDecisionService's doctrina: un cierre de encierro que fracasa en una cerraja de infraestructuras cada Inquilino fuera de su propia plataforma. Los fallos se registran con lo lanzador, no sólo su mensaje - un defecto en este camino es de otra manera indistinguible de un Apagón, y en silencio desactivaría todo el control. El cuadragésimo fallo bloquea la dirección por sí misma en lugar de confiar en la Llama para seguir y escribir la fila de bloques. Esa fila se encuentra detrás de un 30 segundo caché del veredicto, y en un anfitrión no nombra ninguna organización no hay fila para escribir en todo; un control que depende de que su persona que le llame sea eficaz es uno más adelante refactores apagan por accidente. PROGRESSIVE-LOGIN-LOCKOUT aparece en Reglas de Detección como regla que no puede ser Apagado o eliminado, y cuyos umbrales no son datos de arrendatario, un editable El umbral es un interruptor desactiva usando un sombrero diferente. Los beneficiarios se quedan editables, o el aviso de bloque sólo podría llegar al operador de la plataforma. La cerrazón vive en el servicio, no el controlador: una puerta a la que se puede llegar alrededor no es una puerta. La fila se materializa en LEAD, porque todas las organizaciones existentes ya tiene las cinco reglas originales y nunca llegaría a la rama semilla sobre vacía.
· kamo-internal
Mostrar a un miembro el URI de rediración en su propio dominio
Esta es la pantalla para la que todo el cambio es. Un miembro que crea Google Espacio de trabajo con la propia aplicación OAuth de su organización viene aquí para encontrar el dirección para pegar en la consola de Google y encontrar api.kamocrm.com, en el catálogo, para una organización que ha verificado su propia dominio y cuyos miembros nunca ven el nombre de host de Kamo en ningún otro lugar. La dirección ahora viene del servidor, por organización, y se renderiza Sólo de lectura en lugar de como una caja de texto. Esa no es una elección de estilismo: nada alguna vez leyó un valor mecanografiado en ese campo. EmailService, MediaService y VOIPService reproduce cada una propia redirección configurada en el token intercambio, por lo que un URI un org mecanografiado aquí se les mostró de vuelta e ignorado. y una oreja que escribió una que no estaba de acuerdo con lo que el servicio envía recibido a redirect-uri-mismatch desde dentro de Google sin nada en esta pantalla a - explícalo. Ya no se envía a guardar tampoco, por lo que ninguna lata de cuerda almacenada mira autorizado en la siguiente carga. Cada devolución se hace, no sólo la primera. Un Microsoft registro es la aplicación del buzón y la aplicación Teams-meetings; cada mitad completan en la llamada de su propio servicio, por lo que Entra necesita tanto y mostrando uno deja al otro fallando sin pistas de qué URI fue enviado. Igual se aplica a la tarjeta de la plataforma, así que callbackUrl se convirtió en callbackUrls allí también y Microsoft, Zoho, Zoom, Equipos, Meta y Canva ganaron las entradas nunca lo habían hecho, que había dejado a un operador de plataforma sin dirección a Regístrese en absoluto. La lista del catálogo se mantiene solo con plataforma y lo dice. La propia aplicación de Kamo siempre se ejecuta en el hostelero de la plataforma; reutilizando esa lista para una organización puso el nombre de host de la plataforma frente a un inquilino de marca blanca y contar para registrar una dirección que su flujo nunca envía.
· SecurityService
Sire a cada org la URL de devolución de llamada en su propio dominio
Este endpoint es donde un miembro encuentra la cuerda que pegan en Google's consola, así que es el endpoint el que estaba equivocado: devolvió sólo el redireccionar el org se había mecanografiado, y la pantalla llenó el espacio en blanco con un hard codded api.kamocrm.com . el nombre de host de la plataforma, delante de un Inquilino de marca blanca, para una aplicación que el inquilino se registró. callbackUrls es computado por el servidor y solo de lectura. El anfitrión viene de esto. el dominio verificado de la organización y las rutas de OAuthCallbackPaths, que es la misma mesa EmailServicio, MediaService y construcción de VOIPService su propia redireccione de la dirección mostrada aquí y la dirección enviada en el alambre hay una cadena de construcción en lugar de por acuerdo. Conseguir que se equivoca no tiene síntoma local; aparece dentro de un tercero, semanas después, como redirección. Una lista, no una cadena: un registro de Microsoft es la aplicación del buzón y la aplicación Equipos-reuniones, y cada mitad se completa en su propio servicio callback, por lo que Entra necesita tanto registrada como la pantalla tiene que decirlo. Vacío para un proveedor cuyo kback Kamo no sirve X no tiene conexión flujo, y cada proveedor de nómina se completa en una página de kamo-internal en el anfitrión del espacio de trabajo. Aquellos mantienen su campo editable en lugar de ser entregados un Api de aspecto plausible.* no se refiere a nada escucha. OrgDomains.verifiedRootDomain ahora se delegue al predicado compartido para la misma razón: dos copias de la regla dejarían esta pantalla y la los servicios discrepan sobre qué rutas de dominio.
· VOIPService
Vuelve al nombre de host de la org para la redirise de los equipos
Una redirigir el org mecanografiado en su propio registro todavía gana directamente. Microsoft requiere que la URI se vuelva a jugar en el intercambio simético para que coince con el autorización byte-for-byte, así que lo que haya entrado en esa aplicación Entra es la sólo respuesta correcta, y una conexión existente no debe moverse. Lo que cambia es la caída bajo ella. Una org en su propia aplicación sin la redireccion y almacenaba con la plataforma; ahora se pone api. es su propio dominio, que es lo que muestra su pantalla de configuración. Un org on La aplicación multiinquilino de Kamo mantiene al anfitrión de la plataforma, desde ese registro tiene una redireccion y un discurso por-org en contra es un desajuste. Ambos controladores VOIP OAuth ya enrutado a través de este método, así que la org y el miembro conectan las piernas se mueven juntas.
· MediaService
Envía el propio nombre de host de una org como la reunión de la rediriz OAuth
La misma regla que sigue el flujo de buzón ahora, para las reuniones de Zoom y Equipos: una organización en su aplicación OWN registró esa aplicación en contra api.es su propio dominio, así que eso es lo que va en el alambre. La devolución de la convocatoria es pública y sin sesiones, por lo que tanto la organización como la el proveedor sale del Estado, el proveedor, así como el org, porque un org puede estar en su propia aplicación Zoom y la aplicación Entra de Kamo a la vez y la Dos deben obtener respuestas diferentes. Una org en la aplicación de Kamo mantiene al anfitrión de la plataforma: ese registro tiene una redirir en URI y una dirección per-org en contra es un desajuste que nadie puede Fríe desde dentro de Kamo.
· EmailService
Enviar el propio nombre de host de una org como el buzón de correo OAuth redir cuenta
Una organización que trajo su propia aplicación de Google o Entra registró que aplicación en su propia cuenta, bajo su propia marca, y ahora se le dice en su la pantalla de configuración para autorizar api. su propio dominio. Esto hace el servicio Envía eso. Ambas piernas pasan por un elegido, porque tienen que ponerse de acuerdo: el valor sobre la solicitud de autorización y el valor reproducido en el intercambio simbulado debe ser byte-idéntico o el proveedor rechaza el intercambio. La devolución de la llamada pierna es pública y sin sesiones - el navegador llega del proveedor sin sesión de Kamo, así que la organización sale del estado, que es por qué orgIdFromState existe junto a providerFromState. Bañado en la orgía dueño del cliente, y esa puerta no es incidental. El registro de la plataforma de Kamo mantiene exactamente una redirigir URI, en el host de plataforma; el envío de una dirección per-org en contra es un redirect'uri-mismatch el org no puede arreglar desde cualquier parte dentro de Kamo, porque no son dueños que el proyecto de Google. hasOrgOwnClient es el mismo pregunta PlatformOAuthClientResolver responde cuando elige qué cliente id para enviar, para que la credencial y la redirigente nunca puedan discrepar sobre qué aplicación se está conectando. Sólo la autoridad se reescribe, por lo que GOOGLE-OAUTH-REDIRECT-URI mantiene su ruta y su esquema. OAuthRedirectUriTest llama al propio seleccionador privado del controlador. que reafirmarlo, y pinchar los defectos configurados contra OAuthCallbackPaths - la tabla que la pantalla de configuración lee. Ese guardia es el punto del archivo de prueba: si los dos derivas, nada aquí falla. Es falla dentro de Google, semanas después, para una organización que copió un Cintar una pantalla que ya estaba mal. También atrapó el único error real en este cambio: plataformaProviderFor enciende el enum, y un interruptor sobre un nulo lanza enum en en en en en en en en en vez de caer en su brazo predeterminado - por lo que una llamada de qué estado no decodificaría Tomó un NPE en el camino a su propia página de error.
· kamo-shared-library
Abordar las llamadas OAuth de un org a su propio dominio
Un URI de redirección de OAuth es ocupado por un tercero. Un miembro lo pega en La consola de Google o Microsoft, y a partir de entonces en el valor el servicio se envía en la solicitud de autorización y repeticiones en el intercambio simgráfico tiene para que coincidas con lo que mecanografieron, carácter para el carácter. Así que la dirección una pantalla de configuración SHOWS y la dirección de un servicio SENDS son una pregunta, y hasta ahora fueron respondidas por diferentes constantes en diferentes repositorios con el nombre de host de la plataforma horneado en ambos. Una organización que ha verificado acme.com registra su propia aplicación OAuth, en su propia cuenta de Google, bajo su propia marca, y se le dijo que autorizara api.kamocrm.com. OrgApiHosts responde "qué anfitrión" y OAuthCallbackPaths responde "que camino", y entre ellos son la única definición SecurityService, EmailService, MediaService y VOIPService leen. El predicado de dominio es el que ya se encuentra la ruta de inicio de sesión en la que ya se encuentra. activo, de tipo, sin alias, de propiedad. condición gana su lugar aquí por su propia razón. propiedad-verificado porque los duplicados a través de orgs son legales, por lo que una fila no verificada enviaría la llamada de un proveedor, portando un código de autorización en vivo, a alguien más, el huésped de la otra manera. ssl.confirmado porque "Api" es una de las etiquetas del SSL cubre las sonda, por lo que esa bandera es lo que hace api. certificado en lugar de un navegador intersticial que se traga el código. reHost reescribe sólo a la autoridad, por lo que un operador que movió una llamada de guardia en configuración mantiene su camino y su esquema, y un valor que No puede ser analizado es devuelto sin tocar en lugar de ser reemplazado por una conjetura. Un proveedor puede poseer más de una llamada: un solo Microsoft registro es la aplicación del buzón Y la aplicación Teams-meetings, y cada mitad completa en el camino de su propio servicio - por lo que Entra necesita tanto, y sólo un La lista puede decirlo.
· SecurityService
Los detalles de la cuenta de usuario pertenecen a su propietario, o a un operador
Una regla, en un solo lugar, para los tres puntos finales que escriben una cuenta de USUARIO: el Actualización del miembro del perfil, la dirección personal del perfil y la plataforma Usuarios Pestaña. Gobiernan los mismos datos y se habían convertido en tres respuestas diferentes. UsuarioAccountEditPolicy: la persona misma, un operador elegible para Dios, el Usuario del sistema, o administrador de plataforma que sostenga MANAGE-USERS / SYSTEM-USER la pestaña de los Usuarios en /account. La organización de alto nivel se monta a lo largo libre, ya que PlatformRightsResolver no resuelve nada para una sesión en un inquilino. Dos cosas que deja caer deliberadamente. MANAGE-MEMBERS y MANAGE-MEMBER-SECURIDAD ya no llegan al nombre legal, el nombre o fecha de nacimiento. Esos son derechos RTEANTES a través de una cuenta cada organización que la persona pertenezca a acciones, y un administrador de inquilinos puede edite los modelos de seguridad de su propia organización, para que un inquilino pueda otorgarse a sí mismo la capacidad de reescribir la identidad que todos los demás ven. El mismo razonamiento ha siempre los mantenía fuera de la contraseña. Esta era también la única regla que el endpoint Así que ahora es más estricto que antes y no es meramente diferente. "La organización actual es dueña de la cuenta" se ha ido. Se lee como el natural de salvaguarda y fue un callejón sin salida: la plataforma da la cuenta de 77 de 141 miembros, y 37 de esas personas no son miembros de la organización que es dueño de su cuenta en absoluto, así que no existía espacio de trabajo en el que pudieran editar su propio nombre, nombre preferido o dirección personal. También respondió a la una pregunta equivocada para el propietario, que es una PERSONA, no una organización. Prueba de la El buzón está intacto y es la salvaguardia que realmente importa para la dirección. La política resuelve sus brazos de operador incluso cuando la cuenta de destino no puede ser - Lea. Rechazando a todo el mundo en un blanco desconocido suena como fracasar y es realmente fallando mal: dejaría una cuenta que nadie podría corregir, que es el estado del que existe un operador para salir. En las estancias de actualización de los miembros por el miembro: una sesión de imitación tiene había cambiado su miembro al objetivo, y una sesión de sudo está destinada a actuar como Ese miembro lo haría.
· kamo-shared-library
Una regla de detección un org no puede apagar, y la letra que envía
PROGRESSIVE-LOGIN-LOCKOUT se une a DetectionRuleType. Cada otro valor en eso enum describe algo en lo que un inquilino opta por: éste describe un control SecurityService se aplica a cada inicio de sesión, exista o no una fila. La fila existe por lo que la política es visible en la pantalla de seguridad y sus destinatarios de alerta son configurables, no para que pueda ser apagado. La escalera en sí no está per-org datos y no vive en la tabla. 26 caracteres, por lo que encaja con rule.type varchar (30) sin DDL, y la columna es Mapeó EnumType.STRING, por lo que añadir reetiqueta no hay fila existente. LOGIN.LOCKOUT-IP-IP-BLOCKED es la carta enviada cuando una dirección agota la totalidad Escalera y aterriza en la lista de bloqueo permanente. Es la única alerta en esta familia. cuyo sujeto no es miembro, se trata de una dirección atacante, así que cada campo que lleva controlado por atacante y cada uno de ellos usa el escape gemela. TemplateRenderer no escapa por su cuenta.
· kamo-internal
Un operador puede establecer una dirección personal y preguntar sobre la cuenta correcta
Dos cambios en el perfil del miembro, ambos sobre la misma confusión: qué persona Se está haciendo una pregunta sobre. La tarjeta de correo electrónico personal ya no es auto-sólo. Un operador elegible para Dios y el El Usuario del Sistema puede establecer el de cualquiera, porque el miembro que lo necesita cambió es Por lo general, el que acaba de decir que su viejo buzón es inalcanzable. el propio flujo del miembro no puede servir, ya que funciona enviando por correo esa dirección. Deliberadamente no MANAGE-MEMBERS o MANAGE-MEMBER-SECURITY: este es uno de los tres identificadores de inicio de sesión aceptan y la recuperación de una contraseña escribe, por lo que fijarlo está teniendo en cuenta. La misma línea que saca la tarjeta de contraseña. La tarjeta se lee a través de la variable de los miembros incluso en el propio lector perfil, por lo que hay una ruta de código y el SERVER decide si puede ser editado y en qué forma. Elige la redacción, la escritura, y si a se pide contraseña para un operador ya ha demostrado quiénes son, y preguntando para una contraseña que no tienen sería teatro. Tres cosas que la variante del operador no debe hacer, cada una de las cuales hizo primero: - hacer el panel de cambio pendiente. Su confirmación, de nuevo parte y descartella Puntos finales de SELF-scoped, por lo que a un operador se le habría entregado tres botones que actúan silenciosamente en su cuenta OWN mientras muestra la dirección de un colega. - ser suprimido por un cambio que el miembro tenía pendiente. Anularlo es el punto; el operador se le dice al operador en su lugar, incluyendo que la configuración de un La dirección lo cancela. - ofrezca la explicación de "donde viva su cuenta". Un operador lo sabe lo que es una cuenta de usuario; lo que no pueden ver es que esta escritura no es Verificó y no se queda callado, por lo que se les dice que en su lugar. Por separado, esSecurityProviderOrg ahora significa "este org posee la cuenta detrás el SER VERDODODO " y viene del servidor. Solía derivarse en la navegador de la propia cuenta de READER, que es un hecho acerca de quienquiera que esté mirando: un administrador con derecho a fijar el nombre legal de un colega podría ser rechazado porque su propio relato venía de otra parte, y uno que no tenía derecho Podrían ser ofrecidos la caja. Para un miembro en su propio perfil las dos lecturas coincide, así que nada sobre los cambios en el caso de uno mismo. La pancarta que dice que "tu cuenta es manejada por X" mantiene al lector-scopetado contesta, porque es la única cosa aquí genuinamente sobre el lector y ahora Regalo sólo en su propio perfil. Contando a alguien que vive su cuenta en otro lugar mientras están viendo el expediente de un colega responde a una pregunta no preguntó. Seis pruebas sujetan la puerta como límite, el más agudo es que un administrador mantener tanto MANAGE-MEMBERS como MANAGE-MEMBER-SECURIDAD no pueden ver ni editar la dirección.
· SecurityService
Deja que un operador de dios y el Usuario del Sistema establezcan la dirección de alguien
La dirección personal era solo. También es la dirección que un administrador tiene para poder corregir a un miembro que ha perdido el buzón en su cuenta no puede probar el nuevo, que es exactamente el caso el propio camino del miembro no puedo servir. Quién: una llamada de dios-ELIGIBLE, o el usuario del sistema de la plataforma. Deliberadamente NO MANAGE-MEMBERS o MANAGE-MEMBER-SECURITY. Esta dirección es una de las tres. identificadores de inicio de sesión acepta y la recuperación de una contraseña escribe, por lo que es ser capaz de fijarlo es ser capaz de tener en cuenta la misma línea PasswordChangeController dibuja, por la misma razón. Elegibilidad se lee a través de SessionPlatformFacts en lugar de buscar la DG, porque ese analizador existe precisamente para que la elegibilidad y una ventana de modo dios OPEN no se pueda confundir. El miembro objetivo debe estar en la propia organización del llamante, como la contraseña endpoint requiere. Lo que NO se aplica es la regla de garantía-proveedor: existe para evitar que un inquilino cambie cómo alguien firma en otro, y un operador de dios y el Usuario del Sistema son identidades de plataforma en lugar de un inquilino. Manteniéndolo dejaría la capacidad inutilizable del espacio de trabajo un operador es en realidad - parado. No hay un viaje de ida y vuelta de verificación en esta ruta, y la dirección se marca UNVERIFIED nadie lo probó, y dejando que una dirección escrita hereda la posición verificada de el que reemplazó haría de la bandera una mentira. Exclusividad dentro del proveedor todavía tiene, porque es un identificador de inicio de sesión sin embargo se escribió. El aviso al viejo buzón todavía va, y importa más aquí que en el miembro camino: este es el caso en el que el titular de la cuenta no inició el cambio. Cualquier cosa que el miembro tenía pendiente se cancela, por lo que el enlace de confirmación de ayer no puede deshacer silenciosamente la corrección. El Usuario del Sistema ahora puede LLLLLLLLLLLlever a este controlador. las cuentas es el punto. Puede que nunca sea el TARGET. /informes de contexto es Dios elegible y esSismaUso para que la consola pueda decidir qué para ofrecer. Tampoco hay derivable allí: el primero debe pasar por lo compartido parser, y la segunda es una columna en ninguna sesión en absoluto, así que sin ella el El Usuario del Sistema abriría un perfil y no se le mostraría la tarjeta a la que tiene derecho a uso. Ambos ensanchan una pantalla; cada escritura los re-deriva.
· KlusterServices
Budgetan los últimos cuatro servicios para obtener una segunda réplica
BillingService, EmailService, KamoLOS y SecurityService ahora dirigen dos vainas, cada una de las cuales ha puesto su barridos programados de efecto compartido detrás de un contrato distribuido de arrendamiento primero. Entre ellos que cubre la obra donde correr dos veces habría sido más caro: cargar a un cliente, adeudar una cuenta bancaria, Enviando una campaña, y refrescando una subvención de OAuth.
· SecurityService
Cierre los barridos compartidos, y ejecute dos vainas
Dieciséis de las diecisedes barridas programadas de SecurityService tienen un efecto compartido y ahora toman un nombre arrendamiento distribuido antes de correr. No hay ShedLock en ninguna parte de esta plataforma, así que la réplica El conteo fue lo que los hizo correctos. este servicio tenía el trabajo más programado en la flota y era por lo tanto, el más firmemente fijado a una vaina. Los que vale la pena nombrar: ************* dos vainas refrescando la misma subvención OAuth puede invalidar La nueva ficha de la otra y desconectar el calendario BulkExportRunner.pollForWork dos vainas afirmando que las mismas filas cola correrían el la misma exportación de EHR/PHI dos veces DomainVerificationWatcher flips ownership.verified, que decide qué anfitrión rutas a las que org DocReminderSweep envía recordatorios de documentos a prestatarios LeadLockSweeper podría liberar una cerradura otra cápsula que acaba de conceder ******************* es un "Component anidado dentro de una configuración", por lo que tomó el contrato de arrendamiento a mano en lugar de a través de la misma edición mecánica que el resto. Cuatro pruebas ahora ejercen el cuerpo cerrado directamente (barrido en bloque, reverificarConfirmedLocked, pollForWorkLocked). Antes llamaban al punto de entrada programado, que ahora pide un burlado SingletonTaskRunner para un contrato de arrendamiento que nunca concede, por lo que cada afirmación en ellas habría pasado contra un cuerpo que nunca corrió. En AccessRuleRescarvice y OrgObjectStorageViajebarrio el campo inyectado se declara LAST: esos utilizados Lombok's "RequiredArgsConstructor", que construye su lista de parámetros en orden de campo, por lo que ponérelo a otro lugar reordenar silenciosamente los argumentos existentes del constructor. réplicas 1 - 2. Verificado en un árbol de trabajo aislado de origen / principal porque esta compra actualmente lleva otro período de sesiones en progress OrgNetworkRowBuilder refactor, que no compila; con sólo estos archivos aplicaron las compilaciones de servicio y su suite es verde aparte de dos fallos que reproducirse idénticamente sobre el origen/principal (UnauthenticatedEndpointRatchet flags UsuarioAccountController .verifyByToken, que no es parte de este cambio).
· kamolos
Cierra cada trabajo de compin que mueve dinero, y dirige dos vainas
KamoLOS corrió una vaina y sus diez trabajos de compinche eran correctos sólo por ello. No hay ShedLock. en cualquier lugar de esta plataforma, por lo que una segunda réplica habría corrido cada uno de ellos dos veces: AutoDebitRunJob DEBITS DEBITS BORROWERS BANK ACCOUNTS InterestAcupalJob devengue intereses en préstamos en vivo dos veces StatementGenerationJob dos declaraciones por un período ReminderDispatchOob dos recordatorios de pago AñoEndTaxJob dos presentaciones de papeleo por prestatario además de la caducidad, la delincuencia, el anticipo de enfriamiento, la programación de recordatorios y la reconciliación Cada uno ahora toma un contrato de arrendamiento a través de SingletonTaskRunner antes de hacer nada. ******************* deliberadamente NO está cerrado. Descarga la lista OFAC SDN y reemplaza un Set mantenido en la propia memoria de esta cápsula, por lo que tiene que correr en todas partes. cada vaina menos la selección de los solicitantes de la revisión de los solicitantes contra una lista de sanciones de EMPTY, que es peor que la duplicación que impediría. réplicas 1 - 2.
· EmailService
Cierre los barridos compartidos, y ejecute dos vainas
Nue de los diez barridos programados de EmailService tienen un efecto compartido y ahora toman un contrato de arrendamiento antes Corriendo. El más consecuente es CampaignDispatcher: en dos vainas sin cerramiento, cada destinatario de cada campaña en marcha habría recibido un duplicado. RecordatorioSchedulerService es el mismo shape para los recordatorios de reuniones, y **************** para las notificaciones snoozed. El décimo, ******************* deliberadamente NO está cerrado. Camina los buzones observados por los clientes conectados a ESTA vaina y empuja los que nada está empujando, así que tiene que correr por todas partes. cerrando congelaría la insignia sin leer para cada miembro. WebSocket aterrizó en una vaina que no es el arrendatario. Transactional está ahora en el envoltorio programado y el cuerpo cerrado en ReminderSchedulerService y SyncService. El exterior es lo que realmente se aplica (el cuerpo se alcanza a través de un esto: referencia, que nunca pasa por el proxy de primavera); el interior es declarado porque eso es el método que emite la consulta de "Modifying", que es lo que el arco trinqueta lee " y el trinquete capturado" exactamente esto cuando la anotación estaba sólo en el envoltorio. réplicas 1 - 2. 590 pruebas, un fallo preexistente no relacionado con este cambio **************** falla idénticamente en el origen/principal).
· BillingService
Cierra cada barrido de movimiento de dinero, y dirige dos vainas
BillingService corrió una vaina y sus siete barridos programados fueron correctos sólo por ello. Ahí no es ShedLock en ninguna parte de esta plataforma, así que una segunda réplica habría corrido cada uno de ellos dos veces a garra: ******************* presenta el uso medido al proveedor de pago presentado dos veces, el cliente se cobra dos veces DunningSweill recupera pagos fallidos Y correos electrónicos sobre ellos StorageAutoExpandSweep compra almacenamiento en nombre del cliente, y factura TrialExpirySweep pone fin a ensayos y mueve suscripciones MailboxBillingReconciler / PbxBillingReconciler lucha por los mismos artículos de suscripción StorageSnapshotSweep doble-counts cada org's Night use figure Cada uno ahora toma un contrato de arrendamiento a través de SingletonTaskRunner antes de hacer nada. StorageSnapshotSweep es la única excepción en forma: su barrido está llamado también desde AlmacenamientoUsajeController cuando un operador pide una instantánea ahora, y devuelve la fila con el conteo de la fila respuesta. Así que la anotación programada se trasladó a un nuevo programadoSweep () que toma el contrato de arrendamiento, y sweep() en sí está intacto y todavía directamente llamable. Estate saltado silenciosamente porque otra vaina pasa a mitad de barre. réplicas 1 - 2.
· KlusterServices
Presupuesto los seis servicios que acaban de ganar una segunda réplica
AIService, KBService, ESigService, VOIPService, DocsService y TranslateService ahora ejecutan dos vainas, Así que un drenaje de cualquiera de los dos nodos debe desalojo uno a la vez en lugar de ambos a la vez. Los primeros cinco llegaron allí poniendo sus barridos programados de efecto compartido detrás de un distribuido arrendamiento; TranslateService no necesitaba ningún bloqueo, porque su único método programado refresca una caché en la propia memoria de la cápsula y se supone que debe correr por todas partes.
· TranslateService
Ejecute dos vainas
El método "Scheduled aquí", ********************** papa un mapa mantenido en la propia memoria de esta cápsula. Se supone que va a correr en cada vaina, no hay nada compartido para un segunda réplica para duplicar, y deliberadamente no consigue ningún bloqueo. cerraba que dejaría cada vaina pero el arrendatario con una tabla de idiomas vacía. Nada más en este servicio tiene estado entre solicitudes.
· DocsService
Cierre los barridos compartidos, y ejecute dos vainas
Cada barrido programado aquí cuyo efecto se comparte ahora toma un contrato de arrendamiento distribuido con nombre a través de SingletonTaskRunner antes de hacer nada, así que corre una vez a través de la flota en lugar de una vez por pod. Eso fue lo único que mantiene este servicio en una réplica. esta plataforma, por lo que el conteo de réplicas fue lo que hizo que los barridos corrigieran. Transacción y amigos permanecen en el método OUTER donde está: La primavera los aplica con un proxy, y el método interno se alcanza a través de un esto:: referencia, que nunca pasa por uno. Movirlos hacia adentro dejaría el barrido silenciosamente no transaccional. réplicas 1 - 2o con un PodDisruptionBudget en KlusterServices para que un drenaje de nodos espere.
· VOIPService
Cierre los barridos compartidos, y ejecute dos vainas
Cada barrido programado aquí cuyo efecto se comparte ahora toma un contrato de arrendamiento distribuido con nombre a través de SingletonTaskRunner antes de hacer nada, así que corre una vez a través de la flota en lugar de una vez por pod. Eso fue lo único que mantiene este servicio en una réplica. esta plataforma, por lo que el conteo de réplicas fue lo que hizo que los barridos corrigieran. Transacción y amigos permanecen en el método OUTER donde está: La primavera los aplica con un proxy, y el método interno se alcanza a través de un esto:: referencia, que nunca pasa por uno. Movirlos hacia adentro dejaría el barrido silenciosamente no transaccional. réplicas 1 - 2o con un PodDisruptionBudget en KlusterServices para que un drenaje de nodos espere.

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito