Partager via


Recherche d’une table de routage distribuée

Pour qu’une application puisse effectuer une recherche dans la table de routage distribuée (DRT), une requête de recherche doit être créée. La valeur de clé souhaitée est spécifiée par l’application lorsque la fonction DrtStartSearch est appelée. Le comportement de la recherche est déterminé par les informations spécifiées par l’application dans la structure DRT_SEARCH_INFO .

En règle générale, un événement d’application est signalé lorsque la recherche découvre les résultats et un autre à la fin de la recherche. Toutefois, si fIterative est défini dans DRT_SEARCH_INFO, un événement d’application peut être signalé lors d’un contact avec chaque nœud en cours de route.

Une fois qu’un événement est signalé, l’application appelle la fonction DrtGetSearchResult pour obtenir les résultats. Si le code retourné est S_OK, les résultats sont pointés vers la structure DRT_SEARCH_RESULT retournée par l’API. Les résultats retournés se situent dans la plage de valeurs spécifiées dans DRT_SEARCH_INFO. Dans le cas où la recherche ne trouve aucune correspondance, seule la valeur DRT_E_NO_MORE sera retournée à la fin des retours de résultat.

Les informations suivantes détaillent comment les membres contenus dans DRT_SEARCH_INFO permettent à une application de dicter spécifiquement le comportement de recherche de l’infrastructure DRT :

fAllowCurrentInstanceMatch

Par défaut, les résultats de la recherche DRT incluent uniquement les correspondances trouvées en dehors du nœud local. La définition de fAllowCurrentInstanceMatch spécifie que les résultats de la recherche incluent également des correspondances trouvées dans le instance DRT local.

cMaxEndpoints

La quantité et la plage des résultats retournés par la recherche sont spécifiées par l’application avec les valeurs cMaxEndpoints (quantité) et pMinimumKey et pMaximumKey (plage), et référencées par DRT_SEARCH_INFO.

Lorsque cMaxEndpoints = 1, l’infrastructure DRT recherche une clé, renvoyant une correspondance dans la plage spécifiée par les valeurs pMinimumKey et pMaximumKey dans DRT_SEARCH_INFO. Cette correspondance peut être une correspondance exacte ou la correspondance la plus proche dans la plage. Si une correspondance est introuvable, DRT_E_NO_MORE est retourné.

Si cMaxEndpoints 1, l’infrastructure DRT retourne des correspondances >dans la plage jusqu’à la valeur de cMaxEndpoints. Les correspondances retournées peuvent contenir une correspondance exacte ou les résultats de correspondance les plus proches dans la plage. En outre, si pMinimumKey et pMaximumKey sont définis sur la même valeur, une recherche est effectuée uniquement pour cette valeur, renvoyant DRT_E_NO_MORE si elle est introuvable.

fAnyMatchInRange

Le membre fAnyMatchInRange indique si la recherche s’arrêtera une fois que la première correspondance se trouve dans la plage spécifiée, ou si la recherche se poursuivra pour la correspondance la plus proche de la clé spécifiée dans l’API DrtStartSearch . Lorsque fAnyMatchInRange est défini, la recherche est effectuée avec cMaxEndpoints = 1 , quelle que soit la valeur spécifiée de cMaxEndpoints dans DRT_SEARCH_INFO.

fIterative

Le membre fIterative spécifie si chaque nœud contacté par l’infrastructure DRT pendant la recherche aura les données de clé/point de terminaison associées à l’application via DRT_SEARCH_RESULT. En définissant fIterative sur TRUE, la valeur de cMaxEndpoints = 1 est forcée. Lorsque fIterative a la valeur TRUE dans une requête de recherche pour la DRT, l’application est rappelée après un contact avec chaque nœud ou « tronçon ». Chaque résultat de tronçon contient une clé indiquant le nœud que la DRT recherchera ensuite. Un résultat de tronçon est retourné via DrtGetSearchResult en tant que résultat DRT_MATCH_INTERMEDIATE .

pMinimumKey et pMaximumKey

Les membres pMinimumKey et pMaximumKey peuvent être utilisés pour rechercher des clés se trouvant dans une plage. Si le membre fAnyMatchInRange a la valeur FALSE, la DRT retourne la ou les clés les plus proches de la cible de recherche (spécifiées à l’aide de l’argument pKey transmis dans la fonction DrtStartSearch ) se trouvant dans la plage. Notez que l’argument pKey passé à DrtStartSearch doit se situer dans la plage définie par pMinimumKey et pMaximumKey. Pour rechercher une clé précise, définissez pMinimumKey, pMaximumKey et pKey sur la même valeur.

Inscription et désinscription de clés

À propos des tables de routage distribué

Informations de référence sur l’API De table de routage distribuée