gitdataai/libs/git/lib.rs
ZhenYi 8fb2436f22 feat(git): add Redis-backed hook worker with per-repo distributed locking
- pool/worker.rs: single-threaded consumer that BLMPOPs from Redis queues
  sequentially. K8s replicas provide HA — each pod runs one worker.
- pool/redis.rs: RedisConsumer with BLMOVE atomic dequeue, ACK/NAK, and
  retry-with-json support.
- pool/types.rs: HookTask, TaskType, PoolConfig (minimal — no pool metrics).
- sync/lock.rs: Redis SET NX EX per-repo lock to prevent concurrent workers
  from processing the same repo. Lock conflicts are handled by requeueing
  without incrementing retry count.
- hook/mod.rs: HookService.start_worker() spawns the background worker.
- ssh/mod.rs / http/mod.rs: ReceiveSyncService RPUSHes to Redis queue.
  Both run_http and run_ssh call start_worker() to launch the consumer.
- Lock conflicts (GitError::Locked) in the worker are requeued without
  incrementing retry_count so another worker can pick them up.
2026-04-17 12:33:58 +08:00

48 lines
1.6 KiB
Rust

pub mod archive;
pub mod blame;
pub mod blob;
pub mod branch;
pub mod commit;
pub mod config;
pub mod description;
pub mod diff;
pub mod domain;
pub mod error;
pub mod hook;
pub mod http;
pub mod lfs;
pub mod merge;
pub(crate) mod ref_utils;
pub mod reference;
pub mod ssh;
pub mod tags;
pub mod tree;
pub use archive::types::{ArchiveEntry, ArchiveFormat, ArchiveOptions, ArchiveSummary};
pub use blame::ops::BlameOptions;
pub use blob::types::{BlobContent, BlobInfo};
pub use branch::types::{BranchDiff, BranchInfo, BranchSummary};
pub use commit::graph::{CommitGraph, CommitGraphLine, CommitGraphOptions};
pub use commit::traverse::CommitWalkOptions;
pub use commit::types::{
CommitBlameHunk, CommitBlameLine, CommitDiffFile, CommitDiffHunk, CommitDiffStats, CommitMeta,
CommitOid, CommitRefInfo, CommitReflogEntry, CommitSignature, CommitSort,
};
pub use config::types::{ConfigEntry, ConfigSnapshot};
pub use diff::ops::diff_to_side_by_side;
pub use diff::types::{
DiffDelta, DiffDeltaStatus, DiffFile, DiffHunk, DiffLine, DiffOptions, DiffResult, DiffStats,
SideBySideChangeType, SideBySideDiffResult, SideBySideFile, SideBySideLine,
};
pub use domain::GitDomain;
pub use error::{GitError, GitResult};
pub use hook::pool::types::{HookTask, TaskType};
pub use hook::pool::PoolConfig;
pub use hook::pool::HookWorker;
pub use hook::sync::HookMetaDataSync;
pub use lfs::types::{LfsConfig, LfsEntry, LfsOid, LfsPointer};
pub use merge::types::{MergeAnalysisResult, MergeOptions, MergePreferenceResult, MergeheadInfo};
pub use reference::types::RefInfo;
pub use tags::types::{TagInfo, TagSummary};
pub use tree::types::{TreeEntry, TreeInfo};