_job_start_time records the populating host's local time, with no zone
Mantenedores costumam responder em até 1 dia
@dimitri-yatsenko já está trabalhando nisso.
Desde 12/10/2026.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
populate() stores _job_start_time as naive local time on whichever host runs it: start_time = time.time() (autopopulate.py:665), then written as datetime.datetime.fromtimestamp(start_time) (autopopulate.py:742). Two hosts in different time zones write different values for the same instant, and nothing in the row records which zone applies. A populate() run from a laptop in US Central and one from a worker in UTC leave start times five hours apart for computations that ran at the same moment.
The other timestamps the framework writes use a known clock:
_prov.timeis UTC:datetime.datetime.now(datetime.timezone.utc).isoformat()(provenance.py:103).- The job table's
completed_timeis the server'sCURRENT_TIMESTAMP(jobs.py:499,529).
A reader cannot place _job_start_time on either of those scales unless every host that populates the schema runs in the same zone.
Proposal
- Take
_job_start_timefrom the server's clock, as the job table already does forcompleted_time(jobs.py:498-499) andscheduled_time(jobs.py:388). Compute it in theUPDATEthat already writes the hidden columns (autopopulate.py:874), as the server's current time minus_job_duration. That adds no round trip, and every host that populates the schema then writes on one clock, whatever zone the host runs in. - The server expression must be statement time, not transaction time:
NOW(3)on MySQL, andstatement_timestamp()on PostgreSQL, whereCURRENT_TIMESTAMPis the start of the transaction. It belongs in the adapter, besidecurrent_user_expr(). - Keep measuring
_job_durationon the worker. It is a difference of two readings on one clock, so neither zone nor skew affects it. TheUPDATEruns after the commit that_job_durationalready includes, so the derived start is late by the one-way latency of that statement, which is the same error a separateSELECTat start would carry. - State in
job-metadata.md(datajoint-docs) that_job_start_timeuses the server's clock from the release that ships the change, and that rows written earlier carry the populating host's local time. Those rows cannot be corrected after the fact, because the zone was never recorded.
- Linguagem predominante
- Python
- Estrelas
- 197
- Forks
- 98
- Merge médio
- 15h 31min
- PRs com merge (30d)
- 9
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de datajoint/datajoint-python
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
datajoint/datajoint-python#1581 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
datajoint/datajoint-python#1539 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
database.name should namespace schema names on MySQL, as it does on PostgreSQLTalvez já em andamento @dimitri-yatsenko assumiu há 4 dias. Abertafeature
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 15/100
datajoint/datajoint-python#1582 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 40/100
datajoint/datajoint-python#1580 ·
Mantenedores costumam responder em até 1 dia
-
A column copied by a foreign key loses the parent's core type (int32 becomes int)Talvez já em andamento @dimitri-yatsenko assumiu há 4 dias. Aberta
Dificuldade 3/5 Meio dia Facilidade para iniciantes 25/100
datajoint/datajoint-python#1578 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de datajoint/datajoint-python
Issues semelhantes
-
python triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
microsoft/semantic-kernel#14590 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
pinterest/pymemcache#662 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 Meio dia Facilidade para iniciantes 62/100
gnocchixyz/gnocchi#1527 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 64/100
tenstorrent/tt-model-manager#181 ·
Mantenedores costumam responder em até 1 dia