Compartilhar via


Pesquisando uma tabela de roteamento distribuído

Antes que um aplicativo possa pesquisar a DRT (Tabela de Roteamento Distribuído), uma consulta de pesquisa deve ser criada. O valor de chave desejado é especificado pelo aplicativo quando a função DrtStartSearch é chamada. O comportamento da pesquisa é determinado por informações especificadas pelo aplicativo na estrutura DRT_SEARCH_INFO .

Normalmente, um evento de aplicativo é sinalizado quando a pesquisa descobre os resultados e outro na conclusão da pesquisa. No entanto, se fIterative for definido em DRT_SEARCH_INFO, um evento de aplicativo poderá ser sinalizado quando o contato for feito com cada nó ao longo do caminho.

Depois que um evento é sinalizado, o aplicativo chama a função DrtGetSearchResult para os resultados. Se o código retornado for S_OK, os resultados serão apontados na estrutura DRT_SEARCH_RESULT retornada pela API. Os resultados retornados se enquadram no intervalo de valores especificados em DRT_SEARCH_INFO. Caso a pesquisa não encontre correspondências, somente o valor DRT_E_NO_MORE será retornado na conclusão do resultado.

As informações a seguir detalham como os membros contidos no DRT_SEARCH_INFO permitem que um aplicativo determine especificamente o comportamento de pesquisa da infraestrutura drt:

fAllowCurrentInstanceMatch

Por padrão, os resultados da pesquisa DRT incluem apenas correspondências encontradas fora do nó local. Definir fAllowCurrentInstanceMatch especifica que os resultados da pesquisa também incluem correspondências encontradas na instância drt local.

cMaxEndpoints

A quantidade e o intervalo dos resultados retornados pela pesquisa são especificados pelo aplicativo com os valores cMaxEndpoints (quantidade) e pMinimumKey e pMaximumKey (intervalo) e referenciados por DRT_SEARCH_INFO.

Quando cMaxEndpoints = 1, a infraestrutura drt procura uma chave, retornando uma correspondência dentro do intervalo especificado pelos valores pMinimumKey e pMaximumKey em DRT_SEARCH_INFO. Essa correspondência pode ser uma correspondência exata ou a correspondência mais próxima dentro do intervalo. Se uma correspondência não for encontrada, DRT_E_NO_MORE será retornado.

Se cMaxEndpoints > 1, a infraestrutura drt retornará correspondências dentro do intervalo até o valor de cMaxEndpoints. As correspondências retornadas podem conter uma correspondência exata ou os resultados de correspondência mais próximos dentro do intervalo. Além disso, se pMinimumKey e pMaximumKey forem definidos com o mesmo valor, uma pesquisa será realizada somente para esse valor, retornando DRT_E_NO_MORE se ele não for encontrado.

fAnyMatchInRange

O membro fAnyMatchInRange indica se a pesquisa será interrompida depois que a primeira correspondência estiver localizada dentro do intervalo especificado ou se a pesquisa continuará para a correspondência mais próxima à chave especificada na API DrtStartSearch . Quando fAnyMatchInRange é definido, a pesquisa é realizada com cMaxEndpoints = 1 , independentemente do valor especificado de cMaxEndpoints no DRT_SEARCH_INFO.

fIterative

O membro fIterative especifica se cada nó contatado pela infraestrutura drt durante a pesquisa terá os dados de chave/ponto de extremidade associados a ele disponibilizados para o aplicativo por meio de DRT_SEARCH_RESULT. Ao definir fIterative como TRUE, o valor de cMaxEndpoints = 1 será forçado. Quando fIterative é definido como TRUE em uma consulta de pesquisa para o DRT, o aplicativo é chamado novamente após contato com cada nó ou "salto". Cada resultado de salto contém uma chave que indica qual nó o DRT pesquisará em seguida. Um resultado de salto é retornado por meio de DrtGetSearchResult como resultado DRT_MATCH_INTERMEDIATE .

pMinimumKey e pMaximumKey

Os membros pMinimumKey e pMaximumKey podem ser usados para pesquisar chaves que estejam dentro de um intervalo. Se o membro fAnyMatchInRange estiver definido como FALSE, o DRT retornará as chaves mais próximas para o destino de pesquisa (especificado usando o argumento pKey passado na função DrtStartSearch ) caindo dentro do intervalo. Observe que o argumento pKey passado para DrtStartSearch deve estar dentro do intervalo definido por pMinimumKey e pMaximumKey. Para pesquisar uma chave precisa, defina pMinimumKey, pMaximumKey e pKey com o mesmo valor.

Registrando e desregistrando chaves

Sobre tabelas de roteamento distribuído

Referência da API de Tabela de Roteamento Distribuído