MerginMaps / MerginMaps/python-api-client

MerginProject may not get cleaned up properly

Aberta
#149 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

bug
Linguagem predominante
Python
Estrelas
23
Forks
12
Merge médio
2d 13h
PRs com merge (30d)
7

Descrição

When MerginProject is created, it creates geodiff object and assigns an internal logger to geodiff. This creates a cyclic reference (pygeodiff refs MerginProject, and MerginProject refs pygeodiff) that may keep resources held, which may be a problem if MerginProject object is created many times. See also fix for this in db-sync: https://github.com/MerginMaps/mergin-db-sync/pull/79

Also somehow related: https://github.com/MerginMaps/geodiff/issues/190

Code snippet to replicate the cleanup issue:

import pygeodiff

class MerginProjectX:

    def __init__(self, directory):

        def _logger_callback(level, text_bytes):
            self.x()   # not a real function, but refs this object...

        self.geodiff = pygeodiff.GeoDiff()
        self.geodiff.set_logger_callback(_logger_callback)

# this will keep consuming more and more resources
for i in range(50000):
    print(i)
    mp = MerginProjectX("x")
    #mp.geodiff = None    # this helps to break ref cycle
    time.sleep(0.005)

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece localizando a criação de GeoDiff do pygeodiff de MerginProject e a configuração do callback do logger; em seguida, compare a correção de limpeza em mergin-db-sync PR 79 com o geodiff issue 190 relacionado. Considera-se concluído quando a criação repetida de MerginProject não retém mais as referências cíclicas nem faz os recursos crescerem, usando o loop de reprodução para verificar a limpeza.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
api
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.