# Configuração de Migração

## Arquivo de Configuração

Os parâmetros de configuração da migração do GBDS são definidos em um arquivo de configuração, contendo todos os parâmetros e seus respectivos valores. Os parâmetros omitidos assumem seus valores padrão. Esta seção descreve as propriedades do arquivo de configuração.

### Localização do arquivo

O arquivo de configuração é `/etc/griaule/conf/gbds-migration/gbds-migration.properties`.

### Propriedades do arquivo

O arquivo de configuração deve atender a alguns requisitos para ser interpretado corretamente pelo GBDS. Esses requisitos são:

1. O nome e o local do arquivo devem ser exatamente como mencionados;
2. Deve haver exatamente um parâmetro de configuração por linha;
3. Cada parâmetro de configuração deve estar no formato `<parameter>=<value>`, sem quebras de linha;
4. Cada valor deve ser separado por uma vírgula quando atribuído a um único parâmetro.

## Parâmetros de configuração

Esta seção descreve cada parâmetro de configuração de migração do GBDS que pode ser listado no arquivo de configuração e como eles afetam a operação do sistema.

### Geral

#### **gbscluster.zookeeper.quorum**

Define o nome do host e a porta pelos quais os servidores do Zookeeper podem ser encontrados. Cada valor deve ser separado por vírgulas se houver mais de um disponível.

**Valor padrão:**

> `<hostname>:<port>`

### Conexão RDB

#### gbds.rbd.driverClassName

Define o nome da classe para o banco de dados relacional a ser usado para armazenar latentes não resolvidos.

**Valor padrão:**

> `com.mysql.jdbc.Driver`

#### gbds.rdb.url

Define a URL do banco de dados relacional a ser acessado.

**Valor padrão:**

> `jdbc:mysql://<hostname>:3306/gbds?useSSL=false&allowPublicKeyRetrieval=true`

#### gbds.rdb.username

Define o nome de usuário a ser usado para acessar o banco de dados relacional.

**Valor padrão:**

> `<rdb-username>`

#### **gbds.rdb.password**

Define a senha a ser usada para acessar o banco de dados relacional.

**Valor padrão:**

> `<rdb-base64-password>`

#### gbds.rdb.dialect

Define o dialeto a ser usado no banco de dados relacional.

**Valor padrão:**

> `org.hibernate.dialect.MySQLDialect`

#### gbds.rdb.showSql

Define se as instruções SQL devem ser incluídas nos logs do aplicativo.

**Valor padrão:**

> `false`

**Valores possíveis:**

> * `true`
> * `false`

#### gbds.rdb.maxPoolSize

Número máximo de conexões que um pool manterá a qualquer momento.

**Valor padrão:**

> `100`

#### gbds.rdb.minPoolSize

Número mínimo de conexões que um pool manterá em um determinado momento.

**Valor padrão:**

> `1`

#### gbds.rdb.initialPoolSize

Número de conexões que um pool tentará adquirir na inicialização. Este valor deve estar no intervalo de gbds.rdb.minPoolSize a gbds.rdb.maxPoolSize.

**Valor padrão:**

> `2`

#### gbds.rdb.maxStatments

Define o tamanho do cache global PreparedStatement do c3p0. Se `gbds.rdb.maxStatments`for zero, o cache de instruções não será habilitado.

Este parâmetro controla o número total de instruções armazenadas em cache para todas as conexões. Se definido, deve ser um número bastante grande, pois cada conexão agrupada requer seu próprio conjunto distinto de instruções armazenadas em cache. Como guia, considere quantos PreparedStatements distintos são usados ​​com frequência em sua aplicação e multiplique esse número por `gbds.rdb.maxPoolSize`para chegar a um valor apropriado.

**Valor padrão:**

> `0`

#### gbds.rdb.maxIdleTime

Define, em segundos, o tempo que uma conexão pode permanecer em pool, mas sem uso, antes de ser descartada. Zero significa que conexões ociosas nunca expiram.

**Valor padrão:**

> `1800`

#### gbds.rdb.maxConnectionAge

Define, em segundos, o tempo máximo de vida de uma conexão. Uma conexão com mais de 10 anos `gbds.rdb.maxConnectionAge`será destruída e removida do pool. Isso difere de 10 anos, `gbds.rdb.maxIdleTime`pois se refere à idade absoluta. Mesmo uma conexão que não tenha ficado muito tempo ociosa será removida do pool se exceder 10 anos `gbds.rdb.maxConnectionAge`. Zero significa que não há idade absoluta máxima aplicada.

**Valor padrão:**

> `1800`

#### gbds.rdb.statementCacheNumDeferredCloseThreads

Se definido como um valor maior que 0, o cache de instruções rastreará quando as Conexões estiverem em uso e destruirá as Instruções somente quando suas Conexões pai não estiverem em uso. Embora o fechamento de uma Instrução enquanto a Conexão pai estiver em uso esteja formalmente dentro das especificações, alguns bancos de dados e/ou drivers JDBC, principalmente o Oracle, não lidam bem com esse caso e congelam, levando a deadlocks. Definir este parâmetro como um valor positivo deve eliminar o problema. Este parâmetro só deve ser definido se você observar que as tentativas do c3p0 de fechar() as instruções em cache congelam (geralmente, você verá APPARENT DEADLOCKS nos seus logs). Se definido, este parâmetro quase sempre deve ser definido como 1.

**Valor padrão:**

> `1`

#### gbds.rdb.acquireIncrement

Determina quantas conexões por vez o c3p0 tentará adquirir quando o pool estiver esgotado.

**Valor padrão:**

> `10`

#### gbds.rdb.testConnectionOnCheckout

Se verdadeiro, uma operação será executada em cada verificação de conexão para verificar se a conexão é válida. Testar conexões na verificação é a forma mais simples e confiável de testar conexões, mas para melhor desempenho, considere verificar as conexões periodicamente usando `gbds.rdb.idleConnectionTestPeriod`.

**Valor padrão:**

> `false`

#### gbds.rdb.testConnectionOnCheckin

Se verdadeiro, uma operação será executada de forma assíncrona em cada verificação de conexão para verificar se a conexão é válida. Use em combinação com `gbds.rdb.idleConnectionTestPeriod`para testes de conexão bastante confiáveis ​​e sempre assíncronos.

**Valor padrão:**

> `true`

**Valores possíveis:**

> * `true`
> * `false`

#### **gbds.rdb.acquireRetryAttempts**

Define quantas vezes c3p0 tentará obter uma nova conexão do banco de dados antes de desistir. Se este valor for menor ou igual a zero, c3p0 continuará tentando obter uma conexão indefinidamente.

**Valor padrão:**

> `10`

#### gbds.rdb.idleConnectionTestPeriod

Se este for um número maior que 0, o c3p0 testará todas as conexões ociosas, agrupadas, mas não verificadas, a cada este número de segundos.

**Valor padrão:**

> `30`

## Famílias de colunas HBase <a href="#hbase-column-families" id="hbase-column-families"></a>

### **Família de colunas padrão**

Esses parâmetros são divididos por modalidade biométrica. São famílias de colunas usadas para operações de leitura de modelos.

```
gbds.hbase.templates.fingerprint.cf.name
gbds.hbase.templates.palmprint.cf.name
gbds.hbase.templates.face.cf.name
gbds.hbase.templates.iris.cf.name
gbds.hbase.templates.newborn-palmprint.cf.name
```

O valor padrão para esses parâmetros é `tpts`.

### **Família de colunas de fallback**

Esses parâmetros referem-se à família de colunas usada anteriormente para armazenar os modelos biométricos, separados por modalidade biométrica.

```
gbds.hbase.templates.fallback.fingerprint.cf.name
gbds.hbase.templates.fallback.palmprint.cf.name
gbds.hbase.templates.fallback.face.cf.name
gbds.hbase.templates.fallback.iris.cf.name
gbds.hbase.templates.fallback.newborn-palmprint.cf.name
```

Os valores padrão representam a família de colunas usada antes de alterar esses parâmetros e são, respectivamente: `fingerprints`, `palmprints`, `faces`, `iris`, `newborn-palmprints`.

## Reextrator GBDS

### Geral

#### **gbds.reextract.nodeNumber**

Número de nós executando o Reextrator. Ele determina o intervalo de varredura no HBase com base no total de nós.

**Valor padrão:**

> `1`

**Valor mínimo:**

> `1`

**Valor máximo:**

> Valor de`gbds.reextract.totalNodes`

#### **gbds.reextract.totalNodes**

Total de nós executando o Reextractor.

**Valor padrão:**

> `1`

#### **gbds.reextract.totalScanRegions**

Número total de regiões para interromper as varreduras.

**Valor padrão:**

> `256`(regiões 00-FF)

#### **gbds.reextract.scanners.number**

Número de scanners. Um scanner digitaliza a partir do HBase um intervalo baseado em `gbds.reextract.nodeNumber`, `gbds.reextract.totalNodes`, e `gbds.reextract.totalScanRegions`.

**Valor padrão:**

> `5`

#### **gbds.reextract.workers.number**

Número de trabalhadores. Um trabalhador mantém uma extração de modelo de transação.

**Valor padrão:**

> `5`

#### **gbds.reextract.writers.number**

Número de escritores. Um escritor obtém o resultado da extração e grava novamente na transação e nas pessoas, se necessário.

**Valor padrão:**

> `5`

#### **gbds.reextract.range**

Configuração de alcance externo. Limita o alcance automático.

* O intervalo pode ser um hexadecimal de 2 caracteres (como `00`ou `A3`) ou um intervalo hexadecimal de 2 caracteres (como `00-01`ou `4A-50`).
* Sempre 2 caracteres hexadecimais.
* Se ausente, o GBS Reextractor executará a partição automática como de costume.

#### **gbds.reextract.validate.extraction**

Sinalizador para validar modelos reextraídos criados anteriormente.

* Em cada transação:
  * Quando selecionado para extrair, o GBS Reextractor não o validará.
  * Quando ele foi extraído antes, mas não validado, o GBS Reextractor o validará.
  * Quando for extraído e validado, o GBS Reextractor o ignorará.
  * A validação é salva no HBase na coluna `transaction:<cf>-validated`.
* **Para garantir que uma transação seja validada em uma chamada após a extração, lembre-se de apagar o arquivo SQLite ou configurar** `gbds.reextract.sqlite.resetOnStart=true` . **Caso contrário, todo o intervalo ao qual a transação pertence será ignorado.**

Dessa forma, a reextração e a validação podem ser feitas em diferentes chamadas do GBS Reextractor, dando tempo para o HBase gravar e consolidar modelos na `transactions`tabela.

**Valor padrão:**

> `true`

**Valores possíveis:**

> * `true`
> * `false`

### Fila de Pipeline

#### **gbds.reextract.workers.inqueueMaxSize**

Tamanho da fila do scanner para o worker. Quanto maior o tamanho, mais varreduras são realizadas e mantidas nos workers, mas mais memória é alocada.

**Valor padrão:**

> `100`

#### **gbds.reextract.writers.inqueueMaxSize**

Tamanho da fila do trabalhador para o escritor. Quanto maior o tamanho, mais varreduras são realizadas e mantidas nos escritores, mas mais memória é alocada.

**Valor padrão:**

> `100`

### Modalidade para Reextrair Flags

#### **gbds.reextract.modality.finger**

Determina se os dedos devem ser reextraídos.

**Valor padrão:**

> `true`

**Valores possíveis:**

> * `true`
> * `false`

#### **gbds.reextract.modality.face**

Determina se os rostos devem ser reextraídos.

**Valor padrão:**

> `true`

**Valores possíveis:**

> * `true`
> * `false`

#### **gbds.reextract.modality.palm**

Determina se as palmas devem ser reextraídas.

**Valor padrão:**

> `false`

**Valores possíveis:**

> * `true`
> * `false`

#### **gbds.reextract.modality.iris**

Determina se as íris devem ser reextraídas.

**Valor padrão:**

> `false`

**Valores possíveis:**

> * `true`
> * `false`

#### **gbds.reextract.modality.newborn-palm**

Determina se as palmas das mãos dos recém-nascidos devem ser reextraídas.

**Valor padrão:**

> `false`

**Valores possíveis:**

> * `true`
> * `false`

### Microsserviços de extração de modelos

#### **gbds.reextract.msextraction.ginger.number**

Define quantas instâncias de microsserviços de extração de impressão digital, impressão palmar, recém-nascido e modelo de controle de sequência estarão disponíveis. Se esta configuração for definida como `0`, os microsserviços de extração para essas modalidades não serão iniciados.

**Valor padrão:**

> `10`(múltiplos de 10 recomendados)

#### **gbds.reextract.msextraction.face.number**

Define quantas instâncias de microsserviços de extração de modelo facial estarão disponíveis. Se esta configuração estiver definida como `0`, os microsserviços de extração para esta modalidade não serão iniciados.

**Valor padrão:**

> `1`(10 vezes menos do que `gbds.reextract.msextraction.ginger.number`o recomendado)

#### **gbds.reextract.msextraction.initialPort**

Este parâmetro define o número da porta inicial para os microsserviços de extração de modelo.

Cada instância de microsserviço aumentará seu número de porta em 1. Por exemplo, considerando a porta padrão `6000`, a primeira instância usará a porta `6000`, a segunda usará a porta `6001`, a terceira, `6002`e assim por diante.

{% hint style="info" %}
Não entre em conflito com portas de microsserviços de extração de modelo de API (mais de 30.000), portas de microsserviços de extração de qualidade (31.000) e portas de microsserviços de correspondência GBDS (32.000).
{% endhint %}

{% hint style="info" %}
Certifique-se de permitir as portas de firewall que o microsserviço usará.
{% endhint %}

**Valor padrão:**

> `6000`

#### **gbds.reextract.msextraction.maxTries**

Define o número máximo de tentativas de extração que o GBDS realizará em uma única característica biométrica antes de retornar um erro.

**Valor padrão:**

> `3`

#### **gbds.reextract.msextraction.linkLibSegfault**

Liga/desliga o depurador de biblioteca de falhas de segmentação no microsserviço de extração

**Valor padrão:**

> `true`

#### **gbds.reextract.msextraction.checkTimeoutSecs**

Tempo limite em segundos para verificar se o microsserviço de extração de modelo está ativo.

**Valor padrão:**

> `30`

#### **gbds.reextract.msextraction.logLevel**

Nível de log do microsserviço de extração de modelo.

**Valor padrão:**

> `INFO`

**Valores possíveis:**

> * `INFO`
> * `TIME`
> * `DEBUG`

#### **gbds.reextract.msextraction.timeout**

Tempo limite em segundos para chamada única ao microsserviço de extração de modelo.

**Valor padrão:**

> `60`

#### **gbds.reextract.msextraction.fingerprints.extractor.type**

Este parâmetro define o tipo de predefinição do extrator ginger a ser usado pela Migração GBDS no modo `--reextract`, também conhecido como Reextrator GBDS. O Reextrator salvará no HBase e no RDB o tipo de extrator ginger que foi usado da mesma forma que a API faz, na `transactions`coluna HBase `<cf>:ginger-extractor-type`e na `transactions`coluna RDB `ginger_extractor_type`.

**Valor padrão:**

> `GRIAULE_2024`

**Valores possíveis:**

> * `GRIAULE_FAST`: uma versão mais simples e rápida do GRIAULE\_BASIC (nunca usada na API).
> * `GRIAULE_BASIC`: extração padrão para Verify.
> * `GRIAULE_2020`: extração padrão antiga para Inscrever, Atualizar.
> * `GRIAULE_2024`: nova extração padrão para Inscrever, Atualizar.
> * `GRIAULE_2018`: use GRIAULE\_2018 (mais lento).

### Famílias de colunas HBase de reextração

#### **gbds.reextract.cf.finger**

Nome da família da coluna de dedos para receber o modelo extraído em transações e pessoas.

**Valor padrão:**

> `fingerprint-reextract-1`

#### **gbds.reextract.cf.palm**

Nome da família da coluna Palm para receber o modelo extraído em transações e pessoas.

**Valor padrão:**

> `palmprint-write`

#### **gbds.reextract.cf.face**

Nome da família da coluna de rosto para receber o modelo extraído em transações e pessoas.

**Valor padrão:**

> `face-reextract-1`

#### **gbds.reextract.cf.iris**

Nome da família da coluna Iris para receber o modelo extraído em transações e pessoas.

**Valor padrão:**

> `iris-write`

#### **gbds.reextract.cf.newborn-palm**

Nome de família de coluna de palmeira de recém-nascido para receber modelo extraído em transações e pessoas.

**Valor padrão:**

> `newborn-palmprint-write`

### SQLite

#### **gbds.reextract.sqlite.filePath**

Caminho do arquivo para o banco de dados local SQLite.

**Valor padrão:**

> `/home/<username>/reextract.db`

#### **gbds.reextract.sqlite.resetOnStart**

Sinalizador para redefinir o SQLite na inicialização.

**Valor padrão:**

> `false`

**Valores possíveis:**

> * `true`
> * `false`

## Exemplo de arquivo de Configuração

{% hint style="info" %}
Substitua `<hostname>`, `<rdb-username>`, `<rdb-base64-password>`e `<username>`pelos valores corretos. Além disso, se `zookeeper`e `mysql`estiverem sendo executados em portas diferentes das padrão, substitua os números das portas.
{% endhint %}

```
# GENERAL
gbscluster.zookeeper.quorum=<hostname>:2181

# RDB CONNECTION
gbds.rdb.driverClassName=com.mysql.jdbc.Driver
gbds.rdb.url=jdbc:mysql://<hostname>:3306/gbds?useSSL=false&allowPublicKeyRetrieval=true
gbds.rdb.username=<rdb-username>
gbds.rdb.password=<rdb-base64-password>
gbds.rdb.dialect=org.hibernate.dialect.MySQLDialect
gbds.rdb.showSql=false
gbds.rdb.maxPoolSize=100
gbds.rdb.minPoolSize=1
gbds.rdb.initialPoolSize=2
gbds.rdb.maxStatments=0
gbds.rdb.maxIdleTime=1800
gbds.rdb.maxConnectionAge=1800
gbds.rdb.statementCacheNumDeferredCloseThreads=1
gbds.rdb.acquireIncrement=10
gbds.rdb.testConnectionOnCheckout=false
gbds.rdb.testConnectionOnCheckin=true
gbds.rdb.acquireRetryAttempts=10
gbds.rdb.idleConnectionTestPeriod=30

# HBASE COLUMN FAMILIES - STANDARD
gbds.hbase.templates.fingerprint.cf.name=tpts
gbds.hbase.templates.palmprint.cf.name=tpts
gbds.hbase.templates.face.cf.name=tpts
gbds.hbase.templates.iris.cf.name=tpts
gbds.hbase.templates.newborn-palmprint.cf.name=tpts

# HBASE COLUMN FAMILIES - FALLBACK
gbds.hbase.templates.fallback.fingerprint.cf.name=fingerprints
gbds.hbase.templates.fallback.palmprint.cf.name=palmprints
gbds.hbase.templates.fallback.face.cf.name=faces
gbds.hbase.templates.fallback.iris.cf.name=iris
gbds.hbase.templates.fallback.newborn-palmprint.cf.name=newborn-palmprints

# REEXTRACTOR - GENERAL
gbds.reextract.nodeNumber=1
gbds.reextract.totalNodes=1
gbds.reextract.totalScanRegions=256
gbds.reextract.scanners.number=5
gbds.reextract.workers.number=5
gbds.reextract.writers.number=5
gbds.reextract.validate.extraction=false

# REEXTRACTOR - PIPELINE QUEUE
gbds.reextract.workers.inqueueMaxSize=100
gbds.reextract.writers.inqueueMaxSize=100

# REEXTRACTOR - MODALITY TO REEXTRACT FLAGS
gbds.reextract.modality.finger=true
gbds.reextract.modality.face=true
gbds.reextract.modality.palm=false
gbds.reextract.modality.iris=false
gbds.reextract.modality.newborn-palm=false

# REEXTRACTOR - TEMPLATE EXTRACTION MICROSERVICE
gbds.reextract.msextraction.ginger.number=10
gbds.reextract.msextraction.face.number=1
gbds.reextract.msextraction.initialPort=6000
gbds.reextract.msextraction.maxTries=3
gbds.reextract.msextraction.linkLibSegfault=true
gbds.reextract.msextraction.checkTimeoutSecs=30
gbds.reextract.msextraction.logLevel=INFO
gbds.reextract.msextraction.timeout=60
gbds.reextract.msextraction.fingerprints.extractor.type=GRIAULE_2024

# REEXTRACTOR - REEXTRACTION HBASE COLUMN FAMILIES
gbds.reextract.cf.finger=fingerprint-reextract-1
gbds.reextract.cf.palm=palmprint-write
gbds.reextract.cf.face=face-reextract-1
gbds.reextract.cf.iris=iris-write
gbds.reextract.cf.newborn-palm=newborn-palmprint-write

# REEXTRACTOR - SQLITE
gbds.reextract.sqlite.filePath=/home/<username>/reextract.db
gbds.reextract.sqlite.resetOnStart=false
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/configuracao-do-gbds/configuracao-de-migracao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
