um carregador (ver loader.h ) As alças de dados são geralmente aceite que é pequena.
A Fonte monitora algum recurso externo (por exemplo, sistema de arquivos, chamadas RPC) para saber mais sobre novas servables e / ou novas versões do servables e / ou a necessidade de descarregar versões veiculáveis. Ele usa a chamada de retorno fornecido para instruir um módulo de destino (por exemplo AspiredVersionsManager ) que versão (s) de um dado que podem ser veiculados para carga. Além disso, dependendo da semântica do módulo de destino, a Fonte instrui implicitamente que aqueles para descarregar omitindo aquelas servables.
Um caso comum é que a Fonte emite versões para exatamente um que possa ser veiculado. Um caso ainda mais simples é que um serviço tem uma versão única e estática para o tempo de vida do servidor.
Uma estrutura de dados somente leitura compartilhada que vários servables usam, para evitar a sobrecarga de tempo e espaço de replicação da estrutura de dados em cada instância servable. O estado compartilhado cujo tempo de inicialização e tamanho é insignificante (por exemplo, pools de thread) pode ser criado avidamente pela fonte, que então incorpora um ponteiro para ele em cada item ServableData emitido. Criação de estado compartilhado caro ou grande deve ser adiada para o primeiro aplicável carregador :: Load () chamada, ou seja regido pelo gerente. Simetricamente, o carregador :: Unload () chamada para o que possa ser veiculado final usando o caro / grande estado compartilhado deve derrubá-lo.
Uma chamada de retorno para uma fonte para a versão de alimentação (s) de um que possa ser veiculado para um alvo, para ser carregado.
Uma única chamada de retorno de chamada pertence a um único fluxo de serviço (fornecido por 'servable_name'). Todas as versões fornecidas em uma chamada devem ser para o servable identificado em 'servable_name'. As invocações em diferentes fluxos de serviço são ortogonais entre si.
Múltiplas invocações podem fornecer objetos de dados de serviço com ids idênticos (ou seja, mesmo nome e versão de serviço). Esses objetos de dados servíveis são tratados como semanticamente equivalentes. O destinatário acabará por reter um e descartar o resto.
Se uma versão servível V for fornecida em uma primeira chamada e, subsequentemente, omitida em uma segunda chamada, a implicação de omitir V depende da semântica do Destino do retorno de chamada. Certos alvos interpretarão a omissão de V como uma instrução implícita para descarregar V. Cada alvo deve documentar sua semântica a esse respeito.