Sync Orchestrator

Aperta
#29 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
rails, ruby
Ambito
backend, database

Direzione di ricerca

Inizia dai punti di ingresso SyncOrchestrator e ContentSyncJob mostrati nell’issue, quindi segui le implementazioni esistenti della sincronizzazione di manifest, provider, topic e file. Definisci come devono comportarsi la pianificazione, i controlli di rete, il blocco delle esecuzioni concorrenti, il rollback delle transazioni e le modifiche al manifest prima di apportare modifiche. Il lavoro è completato quando esiste un flusso di sincronizzazione automatizzato e sicuro con copertura dei casi di errore, ritentativo ed esecuzione concorrente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

cross-app sync

Coordinate full sync flow with transaction safety

  class SyncOrchestrator
    def perform
      report_status(:syncing)

      manifest = fetch_manifest

      ActiveRecord::Base.transaction do
        sync_tags(manifest["tags"])
        sync_providers_with_content(manifest["providers"])
        cleanup_orphans(manifest)
        update_device_config(manifest)
      end

      report_status(:synced)
    rescue ManifestChangedError    <----- this may be redundant
      # Manifest changed during sync, restart
      retry
    rescue => e
      report_status(:error, error_message: e.message)
      raise
    end

    private

    def sync_providers_with_content(providers)
      providers.each_with_index do |provider_data, idx|
        provider = provider_sync.sync(provider_data)

        provider_data["topics"].each do |topic_data|
          # Check manifest hasn't changed every 5 files
          check_manifest_unchanged! if should_check_manifest?(idx)

          topic = topic_sync.sync(topic_data, provider)

          topic_data["files"].each do |file_data|
            topic_file_sync.sync(file_data, topic)
          end
        end
      end
    end
  end

Run sync process automatically

  class ContentSyncJob < ApplicationJob
    queue_as :default

    def perform
      return unless network_available?
      return if sync_in_progress?

      SyncOrchestrator.new.perform
    end
  end
  • Schedule periodic checks (e.g., hourly via cron or whenever gem)
  • Detect network connectivity before attempting
  • Prevent concurrent sync attempts with advisory lock
Lingua principale
HTML
Stelle
4
Fork
0
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di rubyforgood/skillrx-beacon

Tutte le issue di rubyforgood/skillrx-beacon

Issue simili

Altre issue su Backend & API Design

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.