Aller au contenu
KAMOUniverse

Changelog

Ce qui est nouveau.

Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.

  1. · kamo-shared-library

    Retagissez les erreurs de la base de données Yugabyte s'attend à ce qu'un client réessaye

    Appliquer les bosses DDL la version du catalogue, et chaque backend physique toujours tenant l'ancien échoue à sa déclaration suivante avec SQLState 40001 - "schema version Disponibilité pour le tableau ...: 94, obtenait 93". Hiberné ne le rétrécit pas, donc il atteint un utilisateur en tant que 500. Le dernier cas a été produit 188 d'entre eux à l'échelle de la flotte plus de quinze minutes, et il est arrivé comme un bogue rapport sur un widget: le l'échec de la requête est presque toujours une charge d'identité ennuyeuse qui court d'abord sur chaque demande authentifiée, donc quelle que soit la caractéristique crie le plus fort est blâmée. Il n'y a pas de réglage qui supprime cela. Le guide des opérations de Yugabyte dit DML concurrent pendant la DDL "peut utiliser l'ancien schéma, le nouveau schéma, ou la rencontre erreurs de compadite de schéma temporaire qui nécessitent des récupérations côté client", et les deux les drapeaux de serveur qui réglaient la fenêtre ne sont pas réglables au moment de l'exécution et vérifiés avec yb-ts-cli, qui refuse les deux sans -force - donc changer l'un ou l'autre coûte redémarrer une base de données exécutant un maître et un tserver. Une note antérieure dans cette base de code a blâmé maxLifetime de HikariCP et a suggéré l'abaisser. Cela n'aurait rien fait : le tserver court -enable-ysql-conn-mgr-true, donc les piscines Java maintiennent des connexions LOGIQUE à Le responsable de la connexion de Yugabyte et le catalogue de contes vit dans un système physique partagé backends que la piscine ne possède pas. Ne coûte rien quand rien n'est pas faux: l'essayer est entièrement motivé par une exception un cluster sain ne lance jamais, donc le chemin de l'état d'équilibre est un appel lambda. Délibérément étroit à propos de ce qu'il va réessayer - une violation de contrainte est base de données disant que l'écriture est mauvaise, pas qu'elle était malchance, et réessayer transformant une erreur rapide en trois erreurs lentes. Il ne reste pas encore plus défaut seul. Le même 40001 couvre également les véritables conflits de sérialisation et le Yugabyte. lire redémarrages, qui atteignent les deux utilisateurs comme 500s aujourd'hui. Rien ne l'appelle encore; câblage suit.

  2. · KlusterServices

    Dites si un terminal fonctionne ou attend son membre

    Chaque terminal de la liste transporte maintenant l'état : occupé, ou en attente. C'est le une question que quelqu'un pose à une fenêtre qu'il ne peut pas voir, et c'est ce qu'a la couleur de l'hexhead minimisera répondra. Un SHELL attend quand la commande de l'avant-plan est un obus - 'pane'heade'commande' est ce que tmux voit déjà dans le panneau, donc cela n'a pas besoin de comptabilité et ne peut pas aller s'estomper. Tout le reste au premier plan est le travail que le membre a commencé. penser ou oisif. Sa transcription répond plutôt, de la dernière chose que n'importe qui en fait SAID: Assistant, stop-remoniace, fin de saison, . . . . . . . . . . . . . . . . . . . . . . . . assistant, l'outil stop-reason - utiliser - il exécute quelque chose: BUSY L'utilisateur - vient de le faire, rien à nouveau encore: BUSY La dernière LINE est presque toujours comptable - coût, latchchs, files d'attente, les instantanés de dossier, tous ajoutés après la réponse - donc lire il rapporterait chaque séance d'inactivité aussi chargée. L'analyse revient au dernier enregistrement conversationnel. Inconnu se lit comme ATTENDRE, délibérément: un mauvais "occupé" peint une fenêtre verte et cache qu'il a besoin de quelqu'un, où un faux "attendant" ne fait qu'attiser l'œil. C'est la direction plus sûre pour qu'un éclairage de statut se trompe. La liste demande donc à tmux un huitième champ. Le titre reste DERNE et la split reste borné; "pane-current" est un nom de commande nu sans arguments, donc il ne peut pas porter le séparateur. Vérifié sur la machine, pas seulement dans les montages: de douze séances réelles les sept qui travaillaient en cours de lecture et les cinq qui avaient fini de lire l'attente - et le Le cas de l'obus a été vérifié par rapport à un bouceau vivant (attendu) et à un sommeil en direct (en cas de sommeil) (en cas de sommeil en direct). 226 essais.

  3. · kamo-internal

    Choisissez le modèle et l'effort avant de commencer une session de codeur, une fois

    Send To AI dialogue a, et les deux sont le choix du deuxième choix plutôt que deux. Quelqu'un qui s'est installé sur Sonnet à High s'est installé. Recontempler dans le Un autre endroit chaque fois est le genre de friction que personne ne rapporte jamais comme un bug Et tout le monde se sent tous les jours, donc la paire est stockée en tant que préférence d'utilisateur membre. sur la personne, pas le navigateur, donc un ordinateur portable et un ordinateur de bureau se mettent d'accord et d'effacement un navigateur ne les remet pas tranquillement sur Opus. Il parcourt la carte des préférences le pavé de lancement lit déjà une fois par page load, donc vouloir qu'il ne coûte pas de supplément demande sur la première peinture. Les deux surfaces peuvent être ouvertes à la fois - le Centre d'Interaction est un panneau au-dessus de la page a Envoyer à l'AI est le suivant - donc un changement est annoncé aussi bien qu'écrit, et l'autre suit sans être remonté. Trois choses qui méritent d'être criées : - Le dialogue Send To AI ne réense donne plus de modèle et d'effort lorsqu'il s'ouvre. Il a fait, de retour quand ils étaient l'État local, et laisser cela en aurait écrit le retour par défaut sur le choix permanent du membre chaque fois qu'un rapport de bogue a été envoyé - l'exact opposé de son souvenir. - Une préférence stockée survit le code qui l'a écrit, de sorte qu'il est plutôt vérifié que la confiance, et PER FIELD: un modèle retiré entre les rejets ne doit pas non plus a coûté au membre l'effort qu'il a choisi. Tout ce qui n'est pas reconnu retombe, qui garde un choix de rendre une valeur qui n'est pas l'une de ses options - qui montre comme une boîte vide, et est comment quelqu'un découvre son cadre par le fait qu'il est disparus. - Les sélections sont natives stylisées à partir de la palette. Cette vitre est peinte à partir de les couleurs de l'application sur une surface et l'émulateur sur l'autre, et MUI Select rend son menu dans un portail qui aurait besoin de toute la palette enfilé à travers elle pour éviter qu'une liste blanche ne tombe d'un panneau noir. A le contrôle natif s'appuie sur ce point à partir du «champ de couleur» et apporte un clavier correct et Comportement du lecteur d'écran avec elle. Reprise d'une session utilise aussi le choix permanent: reprendre une conversation et la sélection d'un modèle sont des décisions distinctes. Pas de nouvelles clés de dictionnaire, les étiquettes Modèle et Effort et chaque nom d'option sont le dialogue Send To AI, réutilisé plutôt que dupliqué, de sorte qu'ils ne peuvent pas dériver. 13 des 14 gardes et 5363 test passent. check-i18-keys est actuellement rouge sur une autre le travail d'abonnement en cours de session, pas sur quoi que ce soit ici.

  4. · SecurityService

    Porter le modèle et l'effort du membre à une session de codeur

    et délibérément non examiné ici. «coderorer-flags» sur l'agent est la seule chose qui décide ce qu'une session se déroule avec - son propre commentaire l'appelle "la limite de sécurité de l'ensemble de l'envoi un deuxième vocabulaire dans ce service serait un deuxième avis qui pourrait être en désaccord avec elle, et celui qui n'était pas d'accord serait celui que personne n'était lire. Tout ce qui sort revient comme un refus avec une phrase la console est imprimé mot pour mot, exactement comme le fait déjà un annuaire de travail inconnu. l'appelant qui est antérieur à ce rapport envoie.

  5. · KlusterServices

    Laissez une session de coder s'exécuter sur le modèle et l'effort choisi par le membre

    pour une nouvelle session et pour une session reprise, depuis le modèle et l'effort sont des drapeaux par session dans un sens ou dans l'autre. Ils sont la seule partie de la commande qu'un appelant peut influencer, et ils sont encore ne peut pas exprimer un drapeau: tous deux passent par les «filtres» de l'ordre, le même vocabulaire fixe les utilisations de l'expédition d'envois à l'AI, qui cartographient un nom sur des arguments fixes et soulève sur n'importe quoi d'autre. Le mode d'autorisation n'est pas accessible à partir d'ici et n'est pas accessible devenir un paramètre. Le nom de NEITHER est autorisé et signifie "quelle que soit la configuration du membre dit" - une meilleure réponse qu'un agent inventé, et ce que tout appelant cela est antérieure à cet avis. Le nom de n'est que désigné par ONE est refusé: courir sur leur modèle mais L'effort de quelqu'un d'autre n'est pas ce que signifie l'une ou l'autre réponse. Ultra Code est xhigh plus un mot-clé dans le MESSAGE, et une session interactive n'a pas de message pour que l'agent puisse le mettre. Il fonctionne donc à xhigh et le les membres tapent le mot eux-mêmes, qui est le comportement honnête plutôt qu'un arboré comme quelque chose d'autre. 215 essais.

  6. · kamo-internal

    Nommez une tête hexagonale après la fenêtre qu'il représente

    L'infobulle d'une tête hexagonale est la lecture "Utilisateur w12" et la tête id, qui est l'id de la fenêtre, dans un chaîne écrite pour les avatars membres. Un quai de six fenêtres minimisées était de six des étiquettes identiques, donc la seule façon de trouver celle que vous vouliez était de les ouvrir. Le titre était déjà là: chaque frayon porte le titre de la fenêtre (le magasin l'exige), le menu contextuel le montre déjà, et HexHead avait déjà un Alimentation à la fois son infobulle et son nom accessible que rien n'est jamais passé. Filtrer 'head.title' à travers la scène et la source dans celui-ci. Gardez-le à jour aussi. Une tête est engendrée avec le titre que la fenêtre avait à la Il a été minimisé, et les titres continuent à bouger après ça - un chat rebaptisé sur le socket, un changement de liste, une session d'IA nommée par le serveur une fois qu'il réponses. Le bus de l'outil reflète désormais "tool:title" en tant que "hexheads:title" et le le moteur l'applique comme il n'applique pas les comptages: absolu, même réseau changent, et ne jamais frayer une tête pour une fenêtre qui n'a pas.

  7. · SecurityService

    Refuser une inscription dont le nom d'hôte n'est pas une organisation

    Un tel hôte pourrait s'en tenir jusqu'à présent. Il est tombé à travers le choix de l'espace de travail et a réussi à l'adhésion seule, ce qui en a fait une porte où aucun des les contrôles des locataires eux-mêmes appliqués: les règles d'accès et les blocages géographiques sont par organisation, Alors décider (ip, hôte) ne pouvait jamais répondre que "autorisé - aucune organisation ne possède ceci hôte". Rien n'a été tout à fait contourné, parce que l'adhésion était encore prouvée et completeSignIn re-coure les règles une fois qu'un espace de travail est choisi. Mais le croyant vérifier lui-même siégere sans aucune politique de locataire, accessible en pointant n'importe quel DNS Nom à l'entrée, et l'échelle de lock-out ajoutée à côté de lui n'avait pas de blocklist d'intensifier et d'être comptés sous un locataire synthétique. Refusé avant que les identifiants ne soient lus et avant la porte de verrouillage. L'ordre est la moitié du point: un hôte inconnu n'est pas un mot de passe erroné, donc compter le serait faire en sorte qu'un utilisateur légitime se dirige vers un lock-out sur l'erreur DNS d'un opérateur, et Refuser ici signifie que les contre-agents de liaison synthétiques ne sont jamais créés du tout. Dit clairement plutôt que derrière le refus générique des titres de certification. Qui héberge cela Les réponses de la plate-forme ne sont pas un secret - Traefik déjà des itinéraires de celle-ci - et un l'exploitant qui élève un nouveau domaine de locataire auquel on dit "un mauvais mot de passe" dépensera l'après-midi réinitialisant un. Deux découpes, toutes deux délibérées : localhost. OrgResolutionService.byHost l'exclut explicitement, de sorte qu'il ne peut jamais name an organisation and the gatender autrement le développement local impossible. Il est décidé à partir de l'HOST, en miroir que la découpe existante, NON à partir de "l'adresse de l'appelant n'est pas publique" - chaque demande à l'intérieur du groupe regarde de cette façon, donc le jour X-Forwarded-Pour transférer des pauses dans la production qui Une version du test ferait passer la porte à travers la flotte. Boucle littérales seulement; un nom de service n'est pas exempté. Un interrupteur d'arrêt, et expédier. Si une table de domaine Un problème empêche jamais les hôtes légitimes de résoudre, la signature doit être réimpossible sans redéployer - et la réouverture restitue l'ancienne voie exactement plutôt qu'une un troisième comportement. Un hôte exempté doit continuer à faire appel à l'espace de travail, et pas seulement au-delà Porte. L'envoyer sur le chemin résolu par l'hôte à la place le casse plus discrètement: la forme à trois arguments d'authateUser refuse sans un FQDN résolu, donc "hôte inconnu" serait arrivé habillé comme un mot de passe erroné. C'était un vrai Défaut de la première coupure de ce changement, en demandant ce que fait l'hôte local Ensuite.

  8. · KlusterServices

    Un terminal de codeur porte le codeur de nom donné la conversation

    Le fonctionnement était depuis longtemps intitulé "Inclut les frais de démarrage et harmonie ajustement du compte". Deux choses distinctes avalaient ce nom. Le titre était ÉCRITE une fois, à bootstrap, en tant qu'espace réservé. Il une conversation quelques secondes et la renomme plus tard si le travail s'avère être autre chose, donc une copie stockée ne va presque pas immédiatement - le même argument le reste de ce fichier fait déjà pour lire tmux et le disque plutôt que garder une table. Il coûte 6 millions d'euros, même contre une transcription de 205 MB, parce que CoderSessionIndex ne lit que les deux extrémités d'un fichier et se mémarise sur (heure, taille). La fenêtre. l'émettez tout au long - le titre de la vitre était déjà correct alors que la fenêtre de l'outil parce que la valeur par défaut de tmux préfixerait chaque nom avec est le nom d'hôte: qui reproduirait chaque terminal "desktop-1" sur le nom de membre l'a donné. en un coup d'oeil et le nom ne change pas de forme entre l'ouverture de la fenêtre et la liste de rattrapant - le même formulaire SecurityService utilise déjà pour le étiquette initiale. Un nom que le MEMBRE a dactylographié gagne toujours et reste exactement comme dactylographié; un nom dérivé qui l'a écrasé ferait se trouver le champ de renom. La seule exception est stockée il est situé, donc les terminaux ouverts avant que ce changement ne commence à dériver sur leur propre émission plutôt que d'avoir besoin des options de type "Tmux" de quiconque réécrit. L'adhésion vit dans le /terminals maître plutôt qu'à l'intérieur de l'un ou l'autre demi-l'autre TerminalManager ne connaît que tmux, coderSessionIndex ne connaît que le disque, et Il ne devrait pas non plus être informé de l'autre pour répondre à sa propre question. 212 essais. Vérifié contre la machine sous tension: le terminal en cours d'exécution se résout pour

  9. · kamo-internal

    Montrez le lock-out de l'inscription en règle qui ne peut pas être éteint

    SecurityService applique désormais un lock-out progressif de connexion à chaque organisation qu'il existe ou non une ligne pour elle - cinq tentatives libres, puis cinq secondes, alors serrures de cinq, quinze et trente minutes, puis un bloc IP permanent. Détection Les règles sont celles où un administrateur va découvrir ce qui les protège, donc il doit le dire. C'est la première règle sur cet écran dont l'interrupteur est verrouillé, qui a besoin de plus qu'une entrée désactivée. La rangée s'assied en premier, teintée, avec un cadenas, un "Toujours sur la puce" et l'échelle rendue en lecture seule en tant que puces - parce qu'une protection qui ne peut pas être configuré doit encore être lisible, et "PROGRESSIVE LOGIN LOCKOUT" seul ne dit à un administrateur rien sur ce qu'il adviendra de ses utilisateurs. Le bouton Supprimer est ABSENT plutôt que désactivé. La suppression est l'autre moyen de désactiver une règle; SecurityService refuse avec un 409 dans les deux sens, et a Un bouton dont le seul résultat est un refus est un bouton qui se trouve. Même raison de le dialogue d'édition, qui pour cette règle montre l'échelle en lecture seule et l'alerte les bénéficiaires - le domaine qu'un locataire possède en fait. Le serveur ignore l'autre les champs sur le chemin, de sorte que les rendre offrirait des édis qui silencieusement pas sauf. Le commutateur verrouillé se nomme à l'aide de slotProps.input. Les mots de la rangée vivent dans un élément frère, donc sans lui un lecteur d'écran annonce "case à cocher, vérifié" et rien d'autre - et l'infobulle portant la raison de la serrure n'est pas Les outils auraient été abandonnés en silence par le MUI. Changer; check-switch-aria existe parce que celui-ci a bouché ce repo avant. Rien ici n'impose quoi que ce soit, et les tests le disent: l'application est intégrée SecurityService's DetectionRuleMandatoryTest. Ce qui est épinglé ici, c'est que le l'écran ne lie pas à son sujet - l'interrupteur ne peut pas bouger, la suppression n'est pas offert, l'échelle est visible, et une règle ordinaire maintient tout contrôle toujours, donc la serrure est à propos de ce type de règle et non sur les règles de détection en général. Les clés du dictionnaire ont d'abord été poussées au kamo-traduction-dictionnaire; next-intl rend in extensible un chemin de touche manquant, et les messages/ sont gitignored ici, donc le d'autres navires de garde montrent que une construction locale verte ne capturerait pas.

  10. · kamo-login

    Montrez le lock-out progressif, donc un signe tenu s'explique

    Le serveur refuse maintenant les signes sur une échelle - cinq tentatives gratuites, puis cinq secondes, puis serrures de cinq, quinze et trente minutes, puis un bloc permanent. Sans aucun de ces éléments, l'écran répondrait à tout cela avec "Nom d'utilisateur invalide ou un mot de passe" et un bouton qui ne fait rien de tranquillement, qui se lit comme le site être brisé plutôt que comme un contrôle de sécurité. Quatre États, et les différences entre eux sont la conception: Un METERIER STRIKE apparaît sous le champ mot de passe une fois que les échecs commencent accumuler, dire combien de tentatives restent avant de signer en pause et pour combien de temps. Quelqu'un qui a vraiment oublié son mot de passe devrait être ruisselé vers le lien de réinitialisation AVANT qu'ils soient verrouillés, pas après. L'attente de CINQ-SECOND reste en ligne: le bouton Sign devient un compte à rebours avec un Barre s'évacuant de l'autre côté. Retirer la forme et le remettre pour cinq les secondes seraient plus perturbatrices que l'attente. Un LOCK OF MINUTES prend le contrôle de la carte - un anneau qui vide, un compte à rebours millimètres, et un mot de passe de réinitialisation s'échappe, car par la dixième défaillance le mot de passe est oubliés plutôt que mal tapés et la récupération est une porte que ce lock-out n'est pas fermer. Il pleuve le formulaire plutôt que de le remplacer: les champs restent montés et désactivé de sorte qu'un gestionnaire de mot de passe à mi-remplissage ne perd pas sa cible. Un BLOCEUR PERMANENT n'obtient aucun compte à rebours, pas d'anneau et pas de ré-empâtage. Une animation impliquant quelque chose arriver quand rien n'est un mensonge dit lentement. Il dit que le compte n'est pas la chose qui a été bloquée, parce que c'est C'est vrai et c'est la première chose que la personne voudra savoir. Aucune politique ne vit ici. Le navigateur possède le compte à rebours et rien d'autre - une seconde Une copie de l'échelle en code client est une copie qu'un attaquant peut éditer et une copie qui dérive le moment de l'un ou l'autre côté change. Cette prise a été mordue par exactement que Avant: le contrôle de la règle d'accès du nœud a comparé les types de règles à la "liste blanche" tandis que L'éditeur a écrit "WHITELIST", ne correspondait à rien, et personne ne l'a remarqué. Donc l'API routes relayent les numéros du serveur intacts, y compris le transfert de 429 comme lui-même plutôt que de l'écraser en 400, ce qui signalerait une "mauvaise demande" pour une la réponse dont le contenu est long à attendre. Un lock-out ne secoue pas le champ du mot de passe et ne sélectionne pas son contenu. Le tremblement signifie "tu as tapé le mauvais mot de passe", et pendant une mise en attente, le mot de passe n'a jamais été J'ai regardé - blâmer le champ serait blâmer la mauvaise chose. Les quatre états ont été rendus et lisus avec du marionnettiste contre serveur en conserve Les réponses, parce qu'une construction verte ne prouve rien sur l'apparence d'une page. Réduction La motion est explicitement honorée; la motion/réacte ne l'honore pas de lui seul.

  11. · SecurityService

    Enfermement progressif de l'authentification, escalade vers un bloc IP permanent

    Un mot de passe erroné coûte maintenant quelque chose, et le coût augmente. Détaché depuis le la dernière mise en œuvre réussie du sujet: les cinq premiers échecs sont libres, le sixième et chacun après il attend cinq secondes, et le dixième, vingtième et trentième, tenez la porte pendant cinq, quinze et trente minutes. Les quarantièmes appistes l'adresse figurant sur la liste permanente de l'organisation et le système mails. L'OMS est comptée est la partie qui mérite d'être lue. Le sujet est normalement le (adresse, identificateur) PAIR, ni l'autre moitié seul. Compter l'identifiant seul permettrait quiconque connaît un nom d'utilisateur verrouiller son propriétaire de l'autre côté de la monde; compter l'adresse seule laisserait une personne derrière un bureau partagé La section NAT démarre leurs collègues. Une échelle à deux paires a un trou, bien que pulvérisée Un mot de passe sur deux cents noms d'utilisateur et aucune paire à une seule paire n'atteint six donc une adresse vue échouant contre plus de dix identifiants DISTINCT devient un à son nom propre, et à partir de ce moment-là, chaque échec de celui-ci compte sur un échelle quel que soit son compte. Le plus dur des deux gouverne. AVANT que le mot de passe soit comparé, à chaque terme portant des titres d'identité: à la fois les chemins de connexion et le défi de l'AMF, dont l'espace à six chiffres devient le sien échelle pour qu'un authentificateur fumblé ne puisse pas dépenser le budget de l'étape de mot de passe. A appelant qui peut encore mesurer la différence entre un bon et un mauvais mot de passe alors qu'il est verrouillé a un oracle de travail et un lock-out qui ne fait que perdre de temps. Les échecs sont comptés pour les identificateurs qui ne nomment personne, exactement comme pour ceux qui le faire. Compter uniquement des comptes réels rendrait un mauvais nom d'utilisateur bon marché et un droit un chiffrement coûteux, qui est un oracle de dénombrement de compte construit à partir de la latence. TTL redépartant et 24e vitesse, débarrassé de la dernière fois un véritable embouteillage. Ouvrez-vous sur chaque erreur Redis, en correspondance avec AccessDecisionService doctrine: un lock-out qui échoue sur une infrastructure oscille verrouille chaque locataires de leur propre plate-forme. Les défaillances sont enregistrées avec les jetables, pas Juste son message - un défaut dans ce chemin est par ailleurs indistinguible d'un une coupure, et déroger silencieusement l'ensemble du contrôle. La quarantième défaillance bloque l'adresse par elle-même plutôt que de s'appuyer sur l'appelant à continuer et écrire la ligne de la liste de blocage. Cette rangée se trouve derrière une 30-seconde cache de verdict, et sur un hôte nommant aucune organisation il n'y a pas de rangée pour écrire à un contrôle qui dépend de son appel d'être efficace est un contrôle ultérieur le refactor se désactive par accident. PROGRESSIVE-LOGIN-LOCKOUT apparaît dans les règles de détection en règle qui ne peut pas être désactivé ou supprimé, et dont les seuils ne sont pas des données de locataire - une alternance un seuil est un interrupteur portant un chapeau différent. Les bénéficiaires restent modifiables, ou l'avis de bloc ne pouvait atteindre que l'opérateur de la plate-forme. La serrure vit dans le service, pas le contrôleur: une porte qui peut être atteinte autour n'est pas une porte. La ligne se matérialise sur READ, parce que chaque organisation existante déjà détient les cinq règles initiales et n'atteindrait jamais la branche de la graine à vide.

  12. · kamo-internal

    Montrer un membre de l'URI de redirection sur son propre domaine

    C'est l'écran pour lequel tout le changement est. Un membre qui met en place Google L'espace de travail avec l'application OAuth de leur organisation vient ici pour trouver le Adresse à coller dans la console Google - et a trouvé api.kamocrm.com, codée en dur dans le catalogue, pour une organisation qui a vérifié sa propre Les membres ne voient jamais le nom d'hôte de Kamo ailleurs. L'adresse vient maintenant du serveur, par organisation, et est rendue en lecture seule plutôt qu'en tant qu'encadré. Ce n'est pas un choix de style: rien toujours lire une valeur tapée dans ce champ. EmailService, MediaService et VOIPService rejoue chacun sa propre redirection configurée sur le jeton échange, donc un URI un org dactylographié ici a été montré à leur retour et ignoré et un organisme qui a tapé un qui n'était pas d'accord avec ce que le service envoie obtenu une redirection-uri-mismatch de l'intérieur de Google avec rien sur cet écran à l'expliquer. Il n'est plus envoyé sur save non plus, donc aucune chaîne stockée ne peut Regardez faire autorité sur la charge suivante. Chaque appel est rendu, pas seulement le premier. Un Microsoft l'enregistrement est l'application de boîte aux lettres et l'application Teams-meetings; chaque moitié complète sur le rappel de son propre service, de sorte que Entra a besoin à la fois et montre l'un laisse l'autre en défaut sans indice que l'URI a été envoyé. La même chose s'applique à la carte plate-forme, de sorte que callbackUrl est devenu callbackUrls là-bas Les entrées ont également été prises par Microsoft, zoho, zoom, équipes, Meta et Canva. ils n'ont jamais eu, qui avait laissé un opérateur de plate-forme sans adresse à s'inscrire en tout. La liste du catalogue reste plate-forme uniquement et le dit. L'application de Kamo est toujours est diffusé sur l'hôte de la plate-forme; réutiliser cette liste pour une organisation mettre le nom d'hôte de la plate-forme devant un locataire de marque blanche et dire pour enregistrer une adresse que leur flux n'envoie jamais.

  13. · SecurityService

    Servir chaque org l'URL de rappel sur son propre domaine

    Ce point de terminaison est l'endroit où un membre trouve la chaîne qu'il colle dans Google. console, donc c'est le point d'extrémité qui était faux: il n'a rapporté que le rediriger l'orge avait tapé, et l'écran rempli le blanc d'un api.kamocrm.com - nom d'hôte de la plate-forme, devant un locataires de marque blanche, pour une application que le locataire s'est enregistré. callbackUrls est calculateur de serveur et en lecture seule. L'hôte vient de cette le domaine vérifié de l'organisation et les chemins de OAuthCallbackPaths, qui est le même tableau EmailService, MediaService et VOIPService build leur propre redirection par - donc l'adresse indiquée ici et l'adresse envoyée sur le fil sont une seule chaîne par construction plutôt que par accord. Obtenir ce mal n'a pas de symptôme local; il fait surface à l'intérieur d'un tiers, semaines plus tard, en tant que redirection-ou-mismatch. Une liste, pas une chaîne: un enregistrement de Microsoft est l'application de boîte aux lettres et l'application Équipes-réunions, et chaque moitié complète sur son propre service callback, donc Entra a besoin à la fois d'être enregistré et l'écran doit le dire. Vide pour un fournisseur dont le rappel Kamo ne sert pas et X n'a pas de connexion et chaque fournisseur de paie complète sur une page interne en ligne hôte de l'espace de travail. Ceux-ci gardent leur champ éditable plutôt que d'être remis un Api. d'aspect plausible n'aborde rien d'écoute. OrgDomains.verifiedRootDomaine est désormais délégué au prédicat partagé pour la même raison: deux copies de la règle laisseraient cet écran et les services ne sont pas d'accord sur les itinéraires de domaine.

  14. · VOIPService

    Revenez au nom d'hôte de l'organisation pour les équipes rediriger

    Une redirection de l'orgueil dans sa propre inscription remporte tout de suite. Microsoft exige que l'URI soit rejoué sur l'échange de jetons pour correspondre à la l'autorisation byte pour l'octet, donc tout ce qui est passé dans cette application Entra est le Seule une réponse correcte, et une connexion existante ne doit pas bouger. Ce qui change, c'est la solution à l'enlisement. Une gencilla sur sa propre application sans la redirection stockée obtenait le nom d'hôte de la plate-forme; il obtient maintenant api.-se propre domaine, qui est ce que son écran de réglages montre. Une séance d'orge sur L'application multilocataire de Kamo garde l'hôte de la plate-forme, puisque cette inscription a une redirection et une adresse par ou contre laquelle il s'agit d'une inadéquation. Les deux contrôleurs VOIP OAuth ont déjà acheminé par cette méthode, donc l'orgueil et les jambes de liaison de l'organe se déplacent.

  15. · MediaService

    Envoyer le nom d'hôte d'une orge en tant que réunion OAuth redirection

    La même règle suit le flux de la boîte aux lettres, pour les réunions de l'équipe: une organisation sur son application OWN a enregistré cette application contre api. - son propre domaine, donc c'est ce qui se passe sur le fil. Le rappel est public et sans session, de sorte que l'organisation et le le fournisseur est le fournisseur ainsi que l'organisme, parce que une orge peut être sur sa propre application zoom et l'application Kamo's Entra à la fois et au deux doivent obtenir des réponses différentes. Une organisation sur l'application Kamo garde l'hôte de la plateforme: cet enregistrement en détient un rediriger l'URI et une adresse par enorg contre c'est une inadéquation que personne ne peut réparer à l'intérieur de Kamo.

  16. · EmailService

    Envoyer le nom d'hôte d'une org en tant que boîte aux lettres OAuth redirection

    Une organisation qui a apporté sa propre application Google ou Entra a enregistré que app dans son propre compte, sous sa propre marque, et est maintenant racontée sur son écran de réglages pour autoriser api.-se propre domaine. Cela rend le service envoyer cela. Les deux jambes passent par un choix, parce qu'elles doivent être d'accord: la valeur sur la demande d'autorisation et la valeur rejouée sur l'échange de jetons doit être identitaire ou le fournisseur rejette l'échange. Le rappel le long-coureur est public et sans session - le navigateur arrive du fournisseur sans session de Kamo - donc l'organisation sort de l'État, qui est Pourquoi orgIdFromState existe aux côtés de providerFromState. J'ai sur l'org l'ormais propriétaire du client, et cette porte n'est pas accessoire. L'enregistrement de la plate-forme de Kamo est exactement un URI de redirection, sur la hôte de la plate-forme; envoyer une adresse par or contre elle est un redirect-uri-mismatch l'orge ne peut pas réparer de n'importe où à l'intérieur de Kamo, parce qu'ils ne possèdent pas ce projet Google. hasOrgOwnClient est le même Question PlatformOAuthClientResolver répond lorsqu'il choisit quel client id à envoyer, donc le certificat et la redirection ne peuvent jamais être en désaccord sur quelle application se connecte. Seule l'autorité est réécrite, donc GOOGLE-OAUTH-REDIRECT-URI garde son le chemin et son schéma. OAuthRedirectUriTest appelle le choix privé du contrôleur au lieu de choisir que de le réaffirmer, et épingle les défauts configurés contre OAuthCallbackPaths - le tableau que l'écran des paramètres indique. Ce garde est le point du dossier de test: si les deux dérives, rien n'échoue ici. C'est échouent à l'intérieur de Google, quelques semaines plus tard, pour une organisation qui a copié un enchaîner un écran qui était déjà faux. Il a également attrapé le seul vrai bug dans ce changement: platformProviderFor active l'enum, et un interrupteur sur un enum nul lance plutôt que tomber dans son bras par défaut - donc un rappel dont l'état ne décolle pas ont pris un NPE sur la voie de sa propre page d'erreur.

  17. · kamo-shared-library

    Adresser les rappels OAuth d'une org à son propre domaine

    Un URI de redirection d'OutAuth est détenu par un tiers. Un membre le passe en La console de Google ou de Microsoft, et à partir de là sur la valeur du service envoie sur la demande d'autorisation et rejoue sur l'échange de jetons a pour faire correspondre ce qu'ils ont tapé, caractère pour le caractère. Donc l'adresse a settings screen SHOWS et l'adresse a service SENDS sont une question, et jusqu'à présent, il a été répondu par des constantes différentes dans différents référentiels - avec le nom d'hôte de la plate-forme cuit dans les deux. Une organisation qui a vérifié acme.com enregistre sa propre application OAuth, sur son propre compte Google, sous sa propre marque, et il a été dit d'autoriser api.kamocrm.com. OrgApiHosts répond à "qui hôte" et OAuthCallbackPaths répond "qui chemin", et entre eux, ils sont la seule définition SecurityService, EmailService, MediaService et VOIPService lisent tous. Le prédicat de domaine est celui que le chemin de connexion est déjà sur lequel actifs, sans abri, possédants, vérifiés, ssl-confirmés condition gagne sa place ici pour sa propre raison. parce que les doublons entre les orgs sont légaux, de sorte qu'une ligne non vérifiée enverrait le rappel d'un fournisseur, portant un code d'autorisation en direct, à quelqu'un l'hôte d'autrefois. ssl-confirmé parce que 'api' est l'une des étiquettes du SSL les couvre, de sorte que le drapeau est ce qui fait d'api. certificat plutôt qu'un navigateur interstitiel qui avale le code. reHost réécrit seulement l'autorité, de sorte qu'un opérateur qui a déplacé un rappel en configuration garde leur trajectoire et leur schéma, et une valeur qui ne peut être analysé est renvoyé intacte plutôt que remplacée par une supposition. Un fournisseur peut posséder plus d'un rappel: un seul Microsoft l'enregistrement est l'application de boîte aux lettres ET l'application Teams-meetings, et chaque moitié complète sur le chemin de son propre service - donc Entra a besoin des deux, et seulement un liste peut le dire.

  18. · SecurityService

    Les informations relatives au compte de l'utilisateur appartiennent à leur propriétaire ou à un opérateur.

    Une règle, en un endroit, pour les trois critères d'évaluation qui écrivent un compte USER: Mise à jour du membre du profil, l'adresse personnelle du profil et la plateforme Utilisateurs Onglet. Elles régissent les mêmes données et ont dérivé en trois réponses différentes. UserAccountEditPolicy: la personne elle-même, un opérateur éligible à un dieu, Utilisateur du système, ou un administrateur de plate-forme détenant MANAGE-USERS / SYSTEM-USER l'onglet Utilisateurs sur /compte. Les conditions préalables à l'organisation de haut niveau gratuit, puisque PlatformRightsResolver ne résout rien pour une session chez un locataire. Deux choses qu'il laisse délibérément tomber. MANAGE-MEMBRES et MANAGE-MEMBER-SECURITY n'atteignent plus le nom légal, Nom préféré ou date de naissance. Il s'agit de droits RTE-comptes chaque organisation que la personne appartient à des actions, et un administrateur locataire peut modifier les modèles de sécurité de sa propre organisation - afin qu'un locataire puisse s'accorder lui-même la capacité de réécrire l'identité que tout le monde voit. Le même raisonnement a les gardaient toujours hors du mot de passe. C'était aussi la seule règle du critère d'évaluation. Il est donc plus strict qu'auparavant plutôt qu'il ne soit simplement différent. "L'organisation actuelle est propriétaire du compte" a disparu. Il se lit comme le naturel la sauvegarde et était une impasse: la plate-forme constitue le compte de 77 de 141 et 37 de ces personnes ne sont pas membres de l'organisation qui possèdent leur compte - donc il n'y avait pas d'espace de travail dans lequel ils pourraient jamais éditer leur propre nom, leur nom préféré ou leur adresse personnelle. Il a également répondu à la une mauvaise question pour le propriétaire, qui est une PERSONNE, pas une organisation. Preuve de la la boîte aux lettres n'est pas affectée et c'est la garantie qui compte réellement pour l'adresse. La politique résout les armes de son opérateur même lorsque le compte cible ne peut pas être lire. Refuser tout le monde sur une cible inconnue semble être l'échec fermé et est échouer vraiment mal: il laisserait un compte que personne ne pourrait corriger, ce qui est l'état d'un opérateur existe pour s'en sortir. «isself» sur la mise à jour des membres est restée par MEMBER id: une session d'identité a a eu son membreID échangé à la cible, et une session sudo est destinée à agir comme suit: ce membre le ferait.

  19. · kamo-shared-library

    Une règle de détection qu'une org ne peut pas s'éteindre, et la lettre qu'il envoie

    PROGRESSIVE-LOGIN-LOCKOUT rejoint DétectionRuleType. Toute autre valeur sur ce point enum décrit quelque chose dans lequel un locataire opte; celui-ci décrit un contrôle SecurityService s'applique à toute connexion, qu'une ligne existe ou non. La ligne existe de sorte que la politique est visible sur l'écran de sécurité et ses destinataires d'alerte sont configurables, ce qui n'est pas possible de l'éteindre. L'échelle elle-même n'est pas par or les données et ne vivent pas dans le tableau. 26 caractères, donc il correspond à rule-type varchar(30) sans DDL, et la colonne est EnumType.STRING mappé, apposant donc de réétiquetage n'indique pas de ligne existante. LOGIN-LOCKOUT-IP-BLOCKED est la lettre envoyée lorsqu'une adresse s'épuise l'ensemble échelle et terres sur la liste de blocage permanente. C'est la seule alerte dans cette famille dont le sujet n'est pas un membre - il s'agit d'une adresse attaquante - donc chaque le champ qu'il porte est contrôlé par l'attaquant et chacun d'entre eux utilise l'échappement Deux fois. TemplateRenderer ne s'échappe pas de sa propre initiative.

  20. · kamo-internal

    Un opérateur peut fixer une adresse personnelle et poser des questions sur le bon compte

    Deux modifications du profil des membres, à la fois à propos de la même confusion: quelle personne a La question est posée à ce sujet. La carte d'e-mail personnelle n'est plus seulement auto-unique. Un opérateur éligible à Dieu et L'utilisateur du système peut définir les n'importe qui, parce que le membre qui en a besoin a changé est d'habitude, celui qui vient de dire que leur ancienne boîte aux lettres est inaccessible - le cas le flux propre du membre ne peut pas servir, puisqu'il fonctionne par courrier de cette adresse. Délibérément, pas de MANAGE-MEMBRES ou de GÉRalement - MEMBER-SÉCURITÉ: il s'agit de l'une des trois identifiants de connexion acceptent et le seul mot de passe de récupération écrit, donc le réglage tient compte de la prise en compte. Même ligne, le tirage de la carte de mot de passe tire. La carte lit à travers le point d'extrémité de la portée des membres même sur le leur. profil, donc il y a UN chemin de code et le SERVER décide s'il peut être édité et dans quelle forme. «mode» choisit la formulation, l'écriture, et si un un mot de passe est demandé - un opérateur a déjà prouvé qui il est, et demande pour un mot de passe qu'ils n'ont pas, ce serait le théâtre. Trois choses que la variante de l'opérateur ne doit pas faire, chacune d'elles en a fait en premier: - Rendre le groupe de changement en suspens. Son appel Confirmer, envoyer encore et rejeter Critères d'évaluation à champ d'application SELF, de sorte qu'un opérateur aurait reçu trois boutons qui agissent silencieusement sur leur compte PROPRE tout en montrant l'adresse d'un collègue. - être réprimées par un changement que le membre avait en suspens. Dépasser est le point; l'opérateur en est informé à la place, y compris que fixer un l'adresse l'annule. - offrir l'explication du membre "Là quoi votre compte vit". Un opérateur sait Qu'est-ce qu'un compte utilisateur; ce qu'ils ne peuvent pas voir, c'est que cette écriture n'est pas vérifiés et ne restent pas silencieux, on leur dit qu'à la place. Séparément, SecurityProviderOrg signifie maintenant "cette ordonnance est propriétaire du compte derrière le MEMBRE VUE" et provient du serveur. Il était utilisé pour être dérivé dans le un navigateur à partir du compte du READER, ce qui est un fait pour celui qui regarde: un administrateur habilité à fixer le nom légal d'un collègue peut être refusé parce que leur propre compte provenait d'ailleurs, et quelqu'un qui n'avait pas le droit pourrait être proposé à la boîte. Pour un membre sur son propre profil les deux lectures C'est la solution, donc rien dans l'auto-déficie change. La bannière qui dit "votre compte est géré par X" maintient le lecteur-lâtre la réponse, parce que c'est la seule chose ici vraiment à propos du lecteur - et elle maintenant ne rends que sur leur propre profil. Dire à quelqu'un son compte vit ailleurs, alors qu'ils examinent le bilan d'un collègue répond à une question, ils n'a pas demandé. Six tests épingle la porte en tant que limite, la plus pointue étant qu'un administrateur tenant à la fois MANAGE-MEMBERS et MANAGE-MEMBER-SECURITY ne peuvent ni voir ni éditer l'adresse.

  21. · SecurityService

    Laissez un opérateur de divin et l'utilisateur du système fixent l'adresse de quelqu'un

    L'adresse personnelle n'était que pure. C'est aussi l'adresse qu'un administrateur a d'être en mesure de corriger - un membre qui a perdu la boîte aux lettres sur son compte ne peut pas prouver le nouveau, ce qui est exactement le cas sur la voie du membre ne peut pas servir. Qui: un appel à Dieu-ÉliGIBLE, ou l'utilisateur de la plate-forme System. Délibérément PAS MANUERES ou GESTIONNELLES-MÉEMBERS-SÉCURITÉ. Cette adresse est l'une des trois la connexion d'identifiants accepte et le mot de passe auquel est écrit une seule récupération de mot de passe, étant capable de le fixer est en mesure de prendre en compte la même ligne PasswordChangeCharterCuter dessine, pour la même raison. L'éligibilité est lue à travers SessionPlatformFacts plutôt qu'en atteignant le mot «GD», parce que cet analyseur C'est précisément ce qui est de l'éligibilité et qu'une fenêtre OUVERT en mode dieu ne peut être confondue. Le membre cible doit être dans l'organisation de l'appelant, en tant que mot de passe. le critère d’évaluation nécessite. Ce qui NE s'applique PAS, c'est la règle du fournisseur de la sécurité: elle existe pour empêcher un locataire de changer la façon dont quelqu'un signe dans un autre, et un opérateur de divinité et l'utilisateur du système sont des identités de plateforme plutôt que de locataire. Le maintenir laisserait la capacité inutilisable de l'espace de travail un opérateur est effectivement se tenant debout. Pas d'aller-retour de vérification sur cette voie, et l'adresse est indiquée NON VÉTÉ personne ne l'a prouvé, et laisser une adresse écrite hériger la réputation vérifiée de Celui qu'il a remplacé ferait du drapeau un mensonge. Uniqueté au sein du prestataire toujours en suspens, parce qu'il s'agit d'un identifiant de connexion mais qu'il a été écrit. Le l'avis à l'ancienne boîte aux lettres continue, et importe plus ici que sur celui du membre le chemin propre: c'est le cas où le titulaire du compte n'a pas commencé le changement. Tout ce que le membre avait en attente est annulé, donc le lien de confirmation d'hier ne peut pas annuler silencieusement la correction. L'utilisateur du système peut maintenant appeler ce contrôleur et administrer celui d'autres personnes Les comptes sont là. Ce n'est peut-être toujours jamais le TARGET. /context reports isGodEligible et isSystemUser afin que la console puisse décider ce qui à offrir. Ni l'un ni l'autre n'est dérisoire là-bas: le premier doit passer par le commun parser, et la seconde est une colonne en aucune session du tout, donc sans elle L'utilisateur du système ouvrirait un profil et ne se verrait pas montrer la carte à laquelle il a droit utilisation. Les deux élargissent un écran, chaque écriture les re-dérive.

  22. · KlusterServices

    Budget des quatre derniers services pour obtenir une deuxième réplique

    BillingService, EmailService, KamoLOS et SecurityService gèrent maintenant deux pods, chacun ayant mis son les balayages programmés d'effet partagé derrière un bail distribué d'abord. Entre eux, cela couvre les travaux où l'exécution à deux reprises aurait été la plus coûteuse: facturer un client, débiter un compte bancaire, envoyer une campagne et rafraîchir une bourse OAuth.

  23. · SecurityService

    Verrouillez les balayages partagés, et lancez deux gousses

    Seize des dix-sept balayages programmés de SecurityService ont un effet partagé et prennent maintenant un nom. location distribuée avant la mise en circulation. Il n'y a pas de ShedLock nulle part sur cette plate-forme, donc la réplique le fait de les comptabiliser était ce qui les avait corrigés - ce service avait le travail le plus prévu dans la flotte et était C'est donc la plus solidement épinglée à une nacette. Ceux qui valent la peine d'être nommés: - Deux gousses rafraîchissant la même subvention OAuth peuvent invalider le nouveau jeton de l'autre et déconnectent le calendrier BulkExportRunner.pollForWork Deux gousses affirmant que les mêmes rangées en file d'attente exécuteraient le Même exportation de RSE/PHI deux fois DomainVerificationWatcher retourne la propriété, qui décide de l'hôte voies à destination desquelles org DocReminderSweep envoie des rappels de documents aux emprunteurs LeadLockSweeper pourrait libérer une serrure une autre pod qui vient d'être accordée est un composant emboîté à l'intérieur d'une configuration, de sorte qu'il a pris le bail à la main plutôt que par la même édition mécanique que le reste. Quatre tests exercent maintenant le corps verrouillé directement (sweepLocked, reverifyConfirmedLocked, S'ar.f.C.Filu. Ils ont précédemment appelé le point d'entrée programmé, qui demande maintenant une moquerie SingletonTaskRunner pour un bail qu'il n'accorde jamais - donc chaque affirmation qu'il aurait été acceptée contre un corps qui n'a jamais couru. Dans AccessRuleService et OrgObjectStorageSweep le champ injecté est déclaré LAST: ces utilisations Lombok's 'RequiredArgsConstructor's, qui construit sa liste de paramètres dans l'ordre des champs, donc en le mettant où que ce soit, d'autre réordonne silencieusement les arguments existants du constructeur. répliques 1 - 2 Vérifié dans un arbre de travail isolé hors origine/principal parce que cette caisse actuellement transporte le refactor du rafale OrgNetworkRowBuilder d'une session, qui ne compile pas; avec Seuls ces fichiers ont appliqué les builds de service et sa suite est verte à part deux défaillances qui reproduire de manière identique sur l'origine/principale (UnauthenticatedEndpointRatchet flags UserAccountController VérifyByToken, qui ne fait pas partie de ce changement).

  24. · kamolos

    Verrouillez chaque emploi de cron qui déplace de l'argent, et lancez deux gousses

    KamoLOS a fait une nacelle et ses dix millions d'emplois de cron n'étaient corrects qu'en raison de lui. Il n'y a pas de ShedLock n'importe où sur cette plate-forme, donc une deuxième réplique aurait couru chacune deux fois: COMPTES DE BANCIENNES DE BARRETS DE BARRETS DE BARRES InterestAccrualJob cumule des intérêts sur des prêts en garantie du droit - deux fois les intérêts sont facturés deux fois DéclarationGénérationJob 2 déclarations pour une période d'un mandat ReminderDispatchReservages de paiement Deux rappels de paiement YearEndTaxJob deux documents d'inscription par emprunteur plus l'expiration d'une offre, la délinquance, l'avance de réflexion, le calendrier des rappels et la réconciliation Chacune prend maintenant un bail nommé par l'intermédiaire de SingletonTaskRunner avant de faire quoi que ce soit. n'est pas délibérément verrouillée. Il télécharge la liste OFAC SDN et remplace un set tenu dans la propre mémoire de cette pod, donc il doit fonctionner partout - verrouiller, il laisserait chaque pod, mais le locataire sélectionne les demandeurs contre une liste de sanctions à risque, ce qui est pire plutôt que les doubles emplois qu'il éviterait. répliques de 1 à 2.

  25. · EmailService

    Verrouillez les balayages partagés, et lancez deux gousses

    Neuf des dix balayages prévus par EmailService ont un effet partagé et prennent maintenant un bail nommé avant en train de courir. Le plus important est CampaignDispatcher: à deux gousses sans serrure, chaque destinataire de chaque campagne aurait reçu un double emploi. ReminderSchedulerService est le même la forme des rappels de réunion, et - pour les notifications mises en attente de mise en veille. Le dixième, n'est pas délibérément verrouillé. Il marche les boîtes aux lettres regardées par des clients connectés à THIS pod et nulgent ceux que rien ne pousse, donc il doit courir partout - le verrouillerait geler le badge non lu pour chaque membre dont WebSocket a atterri sur une gousse qui n'est pas le bailleur. «Transactionnel est maintenant à la fois sur l'enveloppe programmée et sur le corps verrouillé dans ReminderSchedulerService et SyncService. L'extérieur est ce qui s'applique effectivement (le corps est atteint par un ceci: référence, qui ne passe jamais par le proxy de printemps); l'intérieur est déclaré parce que c'est le Méthode délivrant la requête de la «Modification», qui est ce que l'arc aile enroulant et le cliquet attrapé exactement cela lorsque l'annotation était sur l'emballage. répliques de 1 à 2 590 tests, un échec préexistant sans rapport avec ce changement - échouent de manière identique à l'origine/principal).

  26. · BillingService

    Verrouillez tous les balayages qui se déplaçant d'argent, et lancez deux gousses

    BillingService a présenté une nacelle et ses sept balayages prévus n'étaient corrects qu'en raison de lui. Là-bas n'est pas ShedLock n'importe où sur cette plate-forme, donc une deuxième réplique aurait couru chacun deux fois plus tiques: Soumet l'utilisation mesurée au prestataire de services de paiement soumis deux fois, le client est facturé deux fois DunningSweep réarime les paiements infructueux ET les courriels à leur sujet StorageAutoExpandSweep achète le stockage pour le compte du client et le facture TrialExpirySweep met fin aux procès et déplace les abonnements MailboxBillingReconciler / PbxBillingReconciler fight over the same abonnement StockageSnapshotSweep double compte de chaque org nature d'utiliser la nuit Chacune prend maintenant un bail nommé par l'intermédiaire de SingletonTaskRunner avant de faire quoi que ce soit. StorageSnapshotSweep est la seule exception de forme: son balayage() est ALIMENTé directement StorageUsageCutteur lorsqu'un opérateur demande un instantané maintenant, et retourne le nombre de lignes pour le réponse. Ainsi, l'annotation programmée a été déplacée à un nouveau balayage programmé qui prend le bail, et sweep() lui-même n'est pas touché et toujours directement appelable - la demande explicite d'un opérateur ne devrait pas être silencieusement sauté parce qu'une autre gousse se trouve être en milieu de balayage. répliques 1 - 2

  27. · KlusterServices

    Budget des six services qui viennent d'obtenir une deuxième réplique

    AIService, KBService, ESigService, VOIPService, DocsService et TranslateService exécutent maintenant deux gousses. De sorte qu'un drain de l'un ou l'autre noeud doit les expulser un par un plutôt que les deux à la fois. Les cinq premiers y sont arrivés en mettant leurs balayages programmés à effet partagé derrière une distribution TraductionService n'avait pas besoin du tout d'écluse, car sa méthode unique programmée rafraîchit un cache dans la mémoire de la gousse et est censée courir partout.

  28. · TranslateService

    Exécuter deux gousses

    La seule méthode « Planifie ici, » est populate une carte tenu dans la mémoire de cette gousse. Il est censé courir sur chaque gousse, il n'y a rien de partagé pour un une deuxième réplique à dupliquer, et il n'a délibérément pas de serrure - verrouiller ça laisserait chaque dosette mais le locataire avec une table de langue vide. Rien d'autre dans ce service ne tient d'état entre les demandes.

  29. · DocsService

    Verrouillez les balayages partagés, et lancez deux gousses

    Chaque balayage programmé ici, dont l'effet est partagé, prend maintenant un bail distribué nommé par l'intermédiaire SingletonTaskRunner avant qu'il ne fasse quoi que ce soit, donc il court une fois sur la flotte au lieu d'une fois par jour. pod. C'était la seule chose qui gardait ce service dans une réplique - il n'y a pas de ShedLock n'importe où sur cette plate-forme, donc le nombre de réplique était ce qui rendait les balayages corrects. «Les transactions et les amis restent sur la méthode EXTÉRIEUR lorsqu'elle est présente: le printemps les applique avec un la méthode interne est atteinte par un: référence, qui ne passe jamais par une méthode. Les déplacer vers l'intérieur laisserait le balayage silencieusement non transactionnel. répliques de 1 à 2, avec un PodDisruptionBudget dans KlusterServices afin qu'un drain de nœuds attende.

  30. · VOIPService

    Verrouillez les balayages partagés, et lancez deux gousses

    Chaque balayage programmé ici, dont l'effet est partagé, prend maintenant un bail distribué nommé par l'intermédiaire SingletonTaskRunner avant qu'il ne fasse quoi que ce soit, donc il court une fois sur la flotte au lieu d'une fois par jour. pod. C'était la seule chose qui gardait ce service dans une réplique - il n'y a pas de ShedLock n'importe où sur cette plate-forme, donc le nombre de réplique était ce qui rendait les balayages corrects. «Les transactions et les amis restent sur la méthode EXTÉRIEUR lorsqu'elle est présente: le printemps les applique avec un la méthode interne est atteinte par un: référence, qui ne passe jamais par une méthode. Les déplacer vers l'intérieur laisserait le balayage silencieusement non transactionnel. répliques de 1 à 2, avec un PodDisruptionBudget dans KlusterServices afin qu'un drain de nœuds attende.

Votre univers vous attend.

Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.

Gratuit pour toujours — aucune carte de crédit requise