Repository navigation
feat(sync): o motor versão 2 das cópias (U3 de O Sync de qualquer conector) - #978
Draft
leandrotcawork wants to merge 4 commits into
Draft
leandrotcawork wants to merge 4 commits into
leandrotcawork wants to merge 4 commits into
Conversation
…m como paginam, e o dublê pagina (U2b, sem gravações) O Sync de qualquer conector, U2, a parte de código, pela decisão do firstmate de 2026-11-11 (a U3 prova o motor pelo dublê do Mercado Livre): pedidos declara OFFSET (offset, limit, 50, sem teto) e o filtro do que mudou (changedFrom, date_last_updated); anuncios e perguntas declaram CURSOR (scrollId, limit, 100 e 50, a primeira página com scan, 5 minutos); reclamacoes e periodosDeFaturamento, OFFSET; mensagensDoPacote não declara. O dublê tem 120 pedidos com a data de alteração e o filtro, 1.300 anúncios e a varredura com scroll_id em anúncios e perguntas. A skill deixa de dizer que não há como passar de mil. As quatro respostas gravadas (critério 11, T29) entram quando a gravação chegar; se divergirem do dublê, o dublê muda.
…a, a fila por conector e o Desligar que apaga na hora (U3) Uma cópia lê uma ou mais conexões, cada uma com a sua conta, a sua posição, a sua passada e a sua espera (copies.copy_source, com a migração que dá a cada cópia de hoje a sua fonte). A rodada lê a leitura de lista do conector por readThrough; o 429 termina PARTIAL WAIT; o cursor vencido recomeça a passada da fonte; o teto termina COPY_SOURCE_CEILING; quem conta o limite pelo aplicativo tem uma chamada de cópia por vez. No banco da empresa, json, chave de texto, _account e _account_name, o fim de passada por conta e as descrições como COMMENT ON. O Desligar tira na hora as linhas da conta e encerra, com a tabela, a cópia de que a conexão era a última fonte (#953); listConnectionCopies diz antes o que some. Critérios 12 a 24, 39 e 40.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que é
A U3 de O Sync de qualquer conector: o motor versão 2 das cópias. Uma cópia passa a ler uma ou mais conexões, cada uma com a sua conta, a sua posição, a sua passada e a sua espera (
copies.copy_source). A rodada lê uma leitura de lista do conector porreadThrough; um 429 terminaPARTIALWAIT; um cursor vencido recomeça a passada da fonte; o teto da leitura terminaCOPY_SOURCE_CEILING; os conectores que contam o limite pelo aplicativo têm uma chamada de cópia por vez. O Desligar tira na hora as linhas da conta e encerra, com a tabela, a cópia de que a conexão era a última fonte (#953).listConnectionCopiesdiz antes o que o Desligar apaga.Este pull request fica em rascunho. A lista de permissões das fontes (#977, data D11) já está no
main;origin/mainentrou nesta branch por merge.Commits
9df1bbce: a declaração de paginação das cinco leituras de lista do Mercado Livre (U2b, sem as gravações), num commit próprio, como o Firstmate decidiu (opção A).Critérios
run-v2.test.ts"a passada de uma leitura de lista"run-v2.test.ts"o fornecedor pede para esperar" e os dois casos (aplicativo, conta)run-v2.test.ts"o cursor vencido recomeça"run-v2.test.ts"o teto da leitura"run-v2.test.ts"duas contas numa tabela"run-v2.test.ts"o nome da conta segue a conexão"copy-lane.test.ts"uma chamada de cópia por vez por conector" e dois casoscopy-port.ts(medido)copy-sql.test.ts"json, chave de texto e descrições" e três casosrun-v2.test.tserun.test.ts"a primeira passada sem filtro"run.test.tssem mudar o que vê;migrate-copy-source.test.ts;copy.test.ts"as duas versões"run-v2.test.ts"a conta desligada"run-v2.test.ts"o registro não leva dado"copy-list.test.tsx"a rodada que esperou"unlink-copies.test.ts"desligar tira as linhas e a leitura do app" e três casosconnection-copies.test.ts"as cópias que o Desligar apaga" e a conexão sem cópiaO que rodei
hub/copies,hub/connectors,builder/copy-clockehub/apps/copy-data.test.tsno PostgreSQL local: 248 passaram, 0 falharam. Depois das últimas mudanças rodei de novo os arquivos que elas tocaram, e passaram 50 de 50.packages/connectors(copy.test.ts,operations.test.ts,operations-list.test.ts,copy-read.test.ts): 30 passaram.packages/hub-api: 8 passaram.apps/websrc/hub/copiesesrc/hub/connectorsno vitest: 107 passaram. Os dublês do Desligar agora respondem comtablesLeft.tscdo servidor, do web, deconnectorse dehub-api,biome check(só os avisos que já estão nomain),npm run deps,npm run docs, emigrations,method-freezeeapprovalcom--base origin/main: tudo limpo.Desvios declarados (delivery L7)
packages/connectors/src/index.ts(exportaCopyDefinitionV1eRows, que o servidor lê);packages/connectors/src/kernel/definition.tsesankhya/copies.ts(os modelos de hoje validados porCopyDefinitionV1, já queCopyDefinitionvirou a união);packages/hub-api/src/connection-copies.tseindex.ts(listConnectionCopieseCopyOfConnectionnum arquivo próprio: emconnectors.tsfariam ciclo comcopies.ts, ecopies.tspassaria de 300 linhas);hub/identity/test-hub.ts,platform/test-app-ports.ts,platform/copy-sql.test.ts,apps/web/src/hub/copies/copy-list.test.tsx,apps/web/src/hub/connectors/test-hub.tsxeintegrations-states.test.tsx(dublês e testes);packages/connectors/src/mercado-livre/operations-list.test.ts(os testes de lista do U2b saíram deoperations.test.ts, que passava de 300 linhas).CopyReadtem umSTALEque o cartão não nomeia: o cursor vencido sai da porta sem chamar, e a rodada recomeça a passada.shown.queryvazio até a U4 darshown.source; a lista segue mostrandocopy.connectionIdcomo a conexão da cópia.DELETE … RETURNINGna mesma transação doDROP TABLE(o papel do Hub não temUPDATEemcopy_table_leftpara travar a linha), e volta se o banco da empresa calar.tuning.catalog) vale no caminho da cópia, na validação deconnectorAppse no revoke; os testes usam o Mercado Livre com o mesmo id declaradoACCOUNTou com teto 100.MISFITeUNREADABLEda página de lista viramCOPY_SOURCE_UNREADABLE; o mesmo vale para uma resposta que não éRows.COPIES_LEFTda rota não é visto pelas linhas do Hub de teste e não é afirmado.NO_MORE_SIGNALvem do U2b: uma varredura semscroll_ide sem deslocamento não diz quando acaba.O que não provei
WAITna lista das cópias, provada porcopy-list.test.tsx.npm run quality(Stryker) ficam para o CI e para a revisão.