Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
13 KiB
| layout | title | parent |
|---|---|---|
| default | Especificação Técnica: Consolidação da Configuração do Cassandra | Portuguese (Beta) |
Especificação Técnica: Consolidação da Configuração do Cassandra
Beta Translation: This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Status: Rascunho Autor: Assistente Data: 2024-09-03
Visão Geral
Esta especificação aborda os padrões de nomenclatura e configuração inconsistentes para os parâmetros de conexão do Cassandra em todo o código-fonte do TrustGraph. Atualmente, existem dois esquemas de nomenclatura de parâmetros diferentes (cassandra_* vs graph_*), o que leva à confusão e à complexidade da manutenção.
Declaração do Problema
O código-fonte atualmente usa dois conjuntos distintos de parâmetros de configuração do Cassandra:
-
Módulos Knowledge/Config/Library usam:
cassandra_host(lista de hosts)cassandra_usercassandra_password -
Módulos Graph/Storage usam:
graph_host(um único host, às vezes convertido em lista)graph_usernamegraph_password -
Exposição inconsistente na linha de comando: Alguns processadores (por exemplo,
kg-store) não expõem as configurações do Cassandra como argumentos de linha de comando Outros processadores os expõem com nomes e formatos diferentes O texto de ajuda não reflete os valores padrão das variáveis de ambiente
Ambos os conjuntos de parâmetros se conectam ao mesmo cluster Cassandra, mas com convenções de nomenclatura diferentes, causando: Confusão na configuração para os usuários Aumento da carga de manutenção Documentação inconsistente Potencial para configuração incorreta Impossibilidade de substituir as configurações via linha de comando em alguns processadores
Solução Proposta
1. Padronização dos Nomes dos Parâmetros
Todos os módulos usarão nomes de parâmetros cassandra_* consistentes:
cassandra_host - Lista de hosts (armazenada internamente como lista)
cassandra_username - Nome de usuário para autenticação
cassandra_password - Senha para autenticação
2. Argumentos da Linha de Comando
Todos os processadores DEVEM expor a configuração do Cassandra por meio de argumentos de linha de comando:
--cassandra-host - Lista separada por vírgulas de hosts
--cassandra-username - Nome de usuário para autenticação
--cassandra-password - Senha para autenticação
3. Fallback de Variáveis de Ambiente
Se os parâmetros da linha de comando não forem fornecidos explicitamente, o sistema verificará as variáveis de ambiente:
CASSANDRA_HOST - Lista separada por vírgulas de hosts
CASSANDRA_USERNAME - Nome de usuário para autenticação
CASSANDRA_PASSWORD - Senha para autenticação
4. Valores Padrão
Se nem os parâmetros da linha de comando nem as variáveis de ambiente forem especificados:
cassandra_host tem como padrão ["cassandra"]
cassandra_username tem como padrão None (sem autenticação)
cassandra_password tem como padrão None (sem autenticação)
5. Requisitos do Texto de Ajuda
A saída --help deve:
Mostrar os valores das variáveis de ambiente como padrões quando definidos
Nunca exibir valores de senha (exibir **** ou <set> em vez disso)
Indicar claramente a ordem de resolução no texto de ajuda
Exemplo de saída de ajuda:
--cassandra-host HOST
Cassandra host list, comma-separated (default: prod-cluster-1,prod-cluster-2)
[from CASSANDRA_HOST environment variable]
--cassandra-username USERNAME
Cassandra username (default: cassandra_user)
[from CASSANDRA_USERNAME environment variable]
--cassandra-password PASSWORD
Cassandra password (default: <set from environment>)
Detalhes de Implementação
Ordem de Resolução de Parâmetros
Para cada parâmetro do Cassandra, a ordem de resolução será:
- Valor do argumento de linha de comando
- Variável de ambiente (
CASSANDRA_*) - Valor padrão
Tratamento de Parâmetros de Host
O parâmetro cassandra_host:
A linha de comando aceita uma string separada por vírgulas: --cassandra-host "host1,host2,host3"
A variável de ambiente aceita uma string separada por vírgulas: CASSANDRA_HOST="host1,host2,host3"
Internamente sempre armazenado como uma lista: ["host1", "host2", "host3"]
Host único: "localhost" → convertido para ["localhost"]
Já é uma lista: ["host1", "host2"] → usado como está
Lógica de Autenticação
A autenticação será usada quando tanto cassandra_username quanto cassandra_password forem fornecidos:
if cassandra_username and cassandra_password:
# Use SSL context and PlainTextAuthProvider
else:
# Connect without authentication
Arquivos a serem modificados
Módulos que utilizam parâmetros graph_* (a serem alterados):
trustgraph-flow/trustgraph/storage/triples/cassandra/write.py
trustgraph-flow/trustgraph/storage/objects/cassandra/write.py
trustgraph-flow/trustgraph/storage/rows/cassandra/write.py
trustgraph-flow/trustgraph/query/triples/cassandra/service.py
Módulos que utilizam parâmetros cassandra_* (a serem atualizados com fallback do ambiente):
trustgraph-flow/trustgraph/tables/config.py
trustgraph-flow/trustgraph/tables/knowledge.py
trustgraph-flow/trustgraph/tables/library.py
trustgraph-flow/trustgraph/storage/knowledge/store.py
trustgraph-flow/trustgraph/cores/knowledge.py
trustgraph-flow/trustgraph/librarian/librarian.py
trustgraph-flow/trustgraph/librarian/service.py
trustgraph-flow/trustgraph/config/service/service.py
trustgraph-flow/trustgraph/cores/service.py
Arquivos de teste a serem atualizados:
tests/unit/test_cores/test_knowledge_manager.py
tests/unit/test_storage/test_triples_cassandra_storage.py
tests/unit/test_query/test_triples_cassandra_query.py
tests/integration/test_objects_cassandra_integration.py
Estratégia de implementação
Fase 1: Criar um utilitário de configuração comum
Crie funções utilitárias para padronizar a configuração do Cassandra em todos os processadores:
import os
import argparse
def get_cassandra_defaults():
"""Get default values from environment variables or fallback."""
return {
'host': os.getenv('CASSANDRA_HOST', 'cassandra'),
'username': os.getenv('CASSANDRA_USERNAME'),
'password': os.getenv('CASSANDRA_PASSWORD')
}
def add_cassandra_args(parser: argparse.ArgumentParser):
"""
Add standardized Cassandra arguments to an argument parser.
Shows environment variable values in help text.
"""
defaults = get_cassandra_defaults()
# Format help text with env var indication
host_help = f"Cassandra host list, comma-separated (default: {defaults['host']})"
if 'CASSANDRA_HOST' in os.environ:
host_help += " [from CASSANDRA_HOST]"
username_help = f"Cassandra username"
if defaults['username']:
username_help += f" (default: {defaults['username']})"
if 'CASSANDRA_USERNAME' in os.environ:
username_help += " [from CASSANDRA_USERNAME]"
password_help = "Cassandra password"
if defaults['password']:
password_help += " (default: <set>)"
if 'CASSANDRA_PASSWORD' in os.environ:
password_help += " [from CASSANDRA_PASSWORD]"
parser.add_argument(
'--cassandra-host',
default=defaults['host'],
help=host_help
)
parser.add_argument(
'--cassandra-username',
default=defaults['username'],
help=username_help
)
parser.add_argument(
'--cassandra-password',
default=defaults['password'],
help=password_help
)
def resolve_cassandra_config(args) -> tuple[list[str], str|None, str|None]:
"""
Convert argparse args to Cassandra configuration.
Returns:
tuple: (hosts_list, username, password)
"""
# Convert host string to list
if isinstance(args.cassandra_host, str):
hosts = [h.strip() for h in args.cassandra_host.split(',')]
else:
hosts = args.cassandra_host
return hosts, args.cassandra_username, args.cassandra_password
Fase 2: Atualizar Módulos Usando Parâmetros graph_*
- Alterar os nomes dos parâmetros de
graph_*paracassandra_* - Substituir os métodos personalizados
add_args()por métodos padronizadosadd_cassandra_args() - Usar as funções auxiliares de configuração comuns
- Atualizar as strings de documentação
Exemplo de transformação:
# OLD CODE
@staticmethod
def add_args(parser):
parser.add_argument(
'-g', '--graph-host',
default="localhost",
help=f'Graph host (default: localhost)'
)
parser.add_argument(
'--graph-username',
default=None,
help=f'Cassandra username'
)
# NEW CODE
@staticmethod
def add_args(parser):
FlowProcessor.add_args(parser)
add_cassandra_args(parser) # Use standard helper
Fase 3: Atualizar Módulos Usando Parâmetros cassandra_*
- Adicionar suporte para argumentos de linha de comando onde estiver faltando (por exemplo,
kg-store) - Substituir as definições de argumentos existentes por
add_cassandra_args() - Usar
resolve_cassandra_config()para resolução consistente - Garantir o tratamento consistente da lista de hosts
Fase 4: Atualizar Testes e Documentação
- Atualizar todos os arquivos de teste para usar os novos nomes de parâmetros
- Atualizar a documentação da CLI
- Atualizar a documentação da API
- Adicionar documentação de variáveis de ambiente
Compatibilidade com Versões Anteriores
Para manter a compatibilidade com versões anteriores durante a transição:
- Avisos de descontinuação para parâmetros
graph_* - Aliasing de parâmetros - aceitar tanto os nomes antigos quanto os novos inicialmente
- Implementação gradual ao longo de várias versões
- Atualizações na documentação com um guia de migração
Exemplo de código de compatibilidade com versões anteriores:
def __init__(self, **params):
# Handle deprecated graph_* parameters
if 'graph_host' in params:
warnings.warn("graph_host is deprecated, use cassandra_host", DeprecationWarning)
params.setdefault('cassandra_host', params.pop('graph_host'))
if 'graph_username' in params:
warnings.warn("graph_username is deprecated, use cassandra_username", DeprecationWarning)
params.setdefault('cassandra_username', params.pop('graph_username'))
# ... continue with standard resolution
Estratégia de Testes
- Testes unitários para a lógica de resolução de configuração
- Testes de integração com várias combinações de configuração
- Testes de variáveis de ambiente
- Testes de compatibilidade retroativa com parâmetros obsoletos
- Testes do Docker Compose com variáveis de ambiente
Atualizações da Documentação
- Atualizar toda a documentação dos comandos da linha de comando
- Atualizar a documentação da API
- Criar um guia de migração
- Atualizar os exemplos do Docker Compose
- Atualizar a documentação de referência de configuração
Riscos e Mitigações
| Risco | Impacto | Mitigação |
|---|---|---|
| Mudanças que podem afetar os usuários | Alto | Implementar um período de compatibilidade retroativa |
| Confusão na configuração durante a transição | Médio | Documentação clara e avisos de descontinuação |
| Falhas nos testes | Médio | Atualizações abrangentes nos testes |
| Problemas de implantação do Docker | Alto | Atualizar todos os exemplos do Docker Compose |
Critérios de Sucesso
[ ] Todos os módulos usam nomes de parâmetros cassandra_* consistentes
[ ] Todos os processadores expõem as configurações do Cassandra por meio de argumentos da linha de comando
[ ] O texto de ajuda da linha de comando mostra os valores padrão das variáveis de ambiente
[ ] Os valores de senha nunca são exibidos no texto de ajuda
[ ] O fallback de variáveis de ambiente funciona corretamente
[ ] cassandra_host é tratado de forma consistente como uma lista internamente
[ ] A compatibilidade retroativa é mantida por pelo menos 2 versões
[ ] Todos os testes passam com o novo sistema de configuração
[ ] A documentação está totalmente atualizada
[ ] Os exemplos do Docker Compose funcionam com variáveis de ambiente
Cronograma
Semana 1: Implementar o utilitário de configuração comum e atualizar os módulos graph_*
Semana 2: Adicionar suporte a variáveis de ambiente aos módulos cassandra_* existentes
Semana 3: Atualizar testes e documentação
Semana 4: Testes de integração e correção de bugs
Considerações Futuras
Considerar a extensão desse padrão para outras configurações de banco de dados (por exemplo, Elasticsearch) Implementar validação de configuração e melhores mensagens de erro Adicionar suporte para configuração de pool de conexões do Cassandra Considerar a adição de suporte para arquivos de configuração (.env)