• Renato Figueiro Maia's avatar
    [OPENBUS-2304] (Lua) Permitir fazer chamadas dentro de cadeias (join)... · 76e326e5
    Renato Figueiro Maia authored
    [OPENBUS-2304] (Lua) Permitir fazer chamadas dentro de cadeias (join) recebidas com um login diferente, mas da mesma entidade
    - Campo 'CallChain.target' passa a conter o 'EntityName' ao invés do 'LoginId'.
    - A operação 'AccessControl:signChainFor(target)' passa a receber o 'EntityName'
      ao invés do 'LoginId', mas continua sem validar o valor do parâmetro 'target',
      simplesmente colocando o valor no campo 'CallChain.target' da cadeia gerada.
      Isso é necessário pra permitir assinar cadeias pra entidades deslogadas, que
      é importante pra permitir que um processo possa receber chamadas de entidades
      conhecidas (autenticadas previamente) mesmo sem ter acesso ao ACS. 
    - Campo 'CredentialReset.login' passar a conter o 'EntityName' ao invés do
      'LoginId'. Esse campo também é renomeado pra 'CredentialReset.target' pra
      melhor clareza.
      - As sessões de saída não podem mais ter indexadas pelo 'LoginId' do destino
        (target), exatamente porque tal informação não vem mais no
        'CredentialReset'. Também não é razoável indexá-las pelo 'EntityName' pois
        potencialmente há multiplas instâncias da biblioteca de acesso (OpenBusLib)
        mantendo diferentes sessões com o mesmo 'EntityName' (assumiamos que o mesmo
        não acontecia com 'LoginId'), portanto quando uma instância da biblioteca
        conversasse com duas outras instâncias que usem o mesmo 'EntityName' a
        sessão de uma sobreporia a da outra concorrentemente degradando o desempenho
        podendo inclusive levar a uma situação de starvation em casos extremos.
        - A solução adotada foi indexar as sessões diretamente pelo
          'IOR.profile_data' do objeto sendo acessado. Antes fazíamos essa indexação
          de forma indireta através de dois mapas: um que mapeava 'IOR.profile_data'
          pra 'LoginId' e outro de 'LoginId' pra sessão. O intuito disso era
          diminuir o número de sessões a serem mantidas no cache.
    - A forma de identificar se uma chamada está sendo feita a um objeto residente
      no núcleo do barramento (core) é feito comparando o 'CredentialReset.target'
      com o 'BusEntity' (nome da entidade que representa o núcleo do barramento).
    	- Com isso, não é mais necessário padronizar o 'BusLogin' (login ID utilizado
    		pelo núcleo do barramento). Inclusive o login ID utilizado pode ser o mesmo
        bus ID utilizado para diferenciar duas instâncias do barramento OpenBus.
    
    git-svn-id: https://subversion.tecgraf.puc-rio.br/engdist/openbus/sdk/lua/branches/02_00_00@142237 ae0415b3-e90b-0410-900d-d0be9363c56b
    76e326e5