Mettre à jour les index d'un TosDJ existant
Sur cette page
Les index d’un annuaire TosDJ sont créés par le setup, à partir du profil choisi. Quand une version de TOSIAM ajoute un index à un profil, seules les nouvelles installations le reçoivent : remplacer les binaires d’un annuaire existant ne modifie pas sa configuration. Cette page décrit comment ajouter les index manquants à un annuaire déjà installé, serveur en marche.
Quand appliquer la procédure#
| Version | Index ajouté | Profils | Ce qu’il accélère |
|---|---|---|---|
| 3.38.0 | coreTokenType (égalité) | cts, config | Liste des sessions d’un royaume dans la console et par l’API /api/realms/{realm}/sessions |
Sans l’index coreTokenType, la liste des sessions parcourt tous les jetons du Core Token Store : sur un CTS de 87 000 jetons, elle répond en 620 ms au lieu de 13 ms. Le reste de TOSIAM fonctionne sans cet index.
La procédure est sans risque à rejouer : elle ajoute ce qui manque et ignore ce qui existe déjà. Elle s’applique donc telle quelle à chaque montée de version, sans avoir à savoir quels index ont changé.
1. Préparer les fichiers d’index#
Les définitions d’index sont livrées dans lib/tst-ldif.jar de la distribution TosDJ. Prenez le fichier de la nouvelle version :
INSTALL_DIR=~/tosdj/install
unzip -p "$INSTALL_DIR"/lib/tst-ldif.jar ldif/sfha/cts-indices.ldif \
| sed 's/@DB_NAME@/userRoot/g' > index-cts.ldif
unzip -p "$INSTALL_DIR"/lib/tst-ldif.jar ldif/opendj/opendj_user_index.ldif \
| sed 's/@DB_NAME@/userRoot/g' > index-user.ldifuserRoot est le nom du backend créé par le setup. Les fichiers à appliquer dépendent du profil du serveur :
| Profil | Fichiers |
|---|---|
cts | index-cts.ldif |
config | index-user.ldif puis index-cts.ldif |
user | index-user.ldif |
2. Créer les index manquants#
Appliquez chaque fichier séparément : index-cts.ldif ne se termine pas par une ligne vide, et le contenu d’un fichier concaténé à sa suite serait rattaché à sa dernière entrée.
for f in index-cts.ldif; do # fichiers du profil, voir le tableau
"$INSTALL_DIR"/bin/ldapmodify -h "$(hostname -f)" -p 1389 \
-D "cn=Directory Manager" -j ~/tosdj/pwd.txt \
--defaultAdd --continueOnError -f "$f"
done~/tosdj/pwd.txt est un fichier qui contient le mot de passe de cn=Directory Manager ; supprimez-le après la procédure. --continueOnError passe les index déjà présents : chacun produit un message Entry Already Exists, sans conséquence. Seuls les index manquants sont créés.
3. Reconstruire les index#
Un index ajouté à un serveur en marche est dégradé : il existe, mais n’est pas utilisé tant qu’il n’a pas été reconstruit. La reconstruction s’exécute comme une tâche, sans arrêter le serveur, et ne traite que les index dégradés :
"$INSTALL_DIR"/bin/rebuild-index --hostname "$(hostname -f)" --port 4444 \
--bindDN "cn=Directory Manager" --bindPasswordFile ~/tosdj/pwd.txt --trustAll \
--baseDN dc=tosit,dc=org --rebuildDegradedLa commande rend la main quand la tâche est terminée :
Rebuild Index task 20261003185131273 scheduled to start immediately
Rebuild Index task 20261003185131273 has been successfully completedSa durée dépend du nombre d’entrées. Sur un CTS de plusieurs millions de jetons, lancez-la hors période de charge. Jusqu’à la fin de la tâche, les recherches concernées restent non indexées, comme avant la procédure.
4. Vérifier#
L’attribut debugsearchindex demande à TosDJ comment il traiterait une recherche, sans l’exécuter :
"$INSTALL_DIR"/bin/ldapsearch -h "$(hostname -f)" -p 1389 \
-D "cn=Directory Manager" -j ~/tosdj/pwd.txt \
-b "ou=famrecords,ou=openam-session,ou=tokens,dc=tosit,dc=org" \
"(coreTokenType=SAML2)" debugsearchindex| Réponse | Signification |
|---|---|
[INDEX:coreTokenType.equality][COUNT:0] | Index utilisé |
[INDEX:coreTokenType.equality][NOT-INDEXED] | Index créé mais pas encore reconstruit : refaire l’étape 3 |
[NOT-INDEXED] seul | Index absent : refaire l’étape 2 |
Limite d’un index d’égalité sur un attribut peu varié#
Un index TosDJ cesse de suivre une valeur quand plus de 4 000 entrées la portent (index-entry-limit). La recherche sur cette valeur redevient alors non indexée, et la réponse de debugsearchindex contient [LIMIT-EXCEEDED].
coreTokenType ne prend que quelques valeurs (SESSION, OAUTH, SAML2…). Au-delà de 4 000 sessions ouvertes, la liste des sessions sans filtre parcourt donc de nouveau tout le CTS. La liste filtrée par utilisateur, que la console utilise dès qu’on saisit un nom, s’appuie sur un autre index et reste rapide quel que soit le nombre de sessions.
Conteneurs et Kubernetes#
La procédure est la même, exécutée dans le conteneur. Les images n’ont pas unzip : extrayez les fichiers sur le poste d’administration après avoir copié tst-ldif.jar hors de l’image (docker cp ou kubectl cp), puis envoyez chaque fichier sur l’entrée standard :
kubectl exec -i tosdj-cts-0 -- sh -c 'cat > /tmp/f.ldif; ldapmodify -h localhost -p 1389 \
-D "cn=Directory Manager" -j /run/secrets/tosdj/root-password \
--defaultAdd --continueOnError -f /tmp/f.ldif; rm -f /tmp/f.ldif' < index-cts.ldifAvec Docker, remplacez kubectl exec -i <pod> -- par docker exec -i <conteneur>.
Pour aller plus loin#
- Installer TosDJ : profils,
setupet reconstruction initiale des index. - Scalabilité & haute disponibilité : réplication des annuaires et Core Token Store.
- Sessions & Tokens : ce que contient le Core Token Store.
Mis à jour le