A better estimate of the maximum number of open patches we can keep (Unix-only at the moment)

pmeunier
Aug 17, 2021, 5:45 PM
TYAKEAJLABCZQDYAI4YBGIJNQ7HJS4DVULEGPCZOGJPJUYYNR6TAC

Dependencies

  • [2] WW2EOFBB Umask in archives
  • [3] OIOMXESD Better error handling in HTTP
  • [4] FXEDPLRI Resurrecting tests, and type cleanup (no need for Arc<RwLock<…>> anymore)
  • [5] ISCWVXO6 Progress bar for push
  • [6] H72JG6HL Init feature; specific .ignore configs
  • [7] 76PCXGML Pushing to, and pulling from the local repository
  • [8] JL4WKA5P Implement the Sanakirja concurrency model in a cross-process way
  • [9] YN63NUZO Sanakirja 1.0
  • [10] VO5OQW4W Removing anyhow in libpijul
  • [11] I24UEJQL Various post-fire fixes
  • [12] RUBBHYZ7 Removing unnecessary async/await
  • [13] 367UBQ6K Forwarding SSH stderr, and progress bar for push
  • [14] EUZFFJSO Updating Pijul with the latest changes in Libpijul
  • [15] UDHP4ZVB Fixing SSH asynchronicity issues
  • [16] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [17] MU5GSJAW Partial push and pull (WARNING: breaks the existing protocol)
  • [18] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [19] ZBNKSYA6 Fixing a bus error when starting a transaction on a full disk
  • [*] 2K7JLB4Z No pager on Windows
  • [*] QJXNUQFJ Solving conflicts

Change contents

  • edit in pijul/src/repository.rs at line 28
    [6.346]
    [7.21994]
    #[cfg(unix)]
    pub fn max_files() -> usize {
    let n = if let Ok((n, _)) = rlimit::getrlimit(rlimit::Resource::NOFILE) {
    (n as usize / (2 * num_cpus::get())).max(1)
    } else {
    256
    };
    debug!("max_files = {:?}", n);
    n
    }
    #[cfg(not(unix))]
    pub fn max_files() -> usize {
    1
    }
  • replacement in pijul/src/repository.rs at line 99
    [7.172][7.24102:24200](),[7.358][7.24102:24200](),[7.24102][7.24102:24200]()
    changes: libpijul::changestore::filesystem::FileSystem::from_root(&working_copy_dir),
    [7.172]
    [7.24200]
    changes: libpijul::changestore::filesystem::FileSystem::from_root(
    &working_copy_dir,
    crate::repository::max_files(),
    ),
  • replacement in pijul/src/repository.rs at line 136
    [7.268][7.25068:25157](),[7.503][7.25068:25157](),[7.25068][7.25068:25157]()
    changes: libpijul::changestore::filesystem::FileSystem::from_root(&cur),
    [7.268]
    [7.25157]
    changes: libpijul::changestore::filesystem::FileSystem::from_root(
    &cur,
    max_files(),
    ),
  • replacement in pijul/src/remote/mod.rs at line 789
    [7.61025][7.61025:61122]()
    let changes = libpijul::changestore::filesystem::FileSystem::from_root(&l.root);
    [7.61025]
    [2.21]
    let changes = libpijul::changestore::filesystem::FileSystem::from_root(
    &l.root,
    crate::repository::max_files(),
    );
  • replacement in pijul/src/remote/mod.rs at line 865
    [7.2569][7.2569:2665]()
    let store = libpijul::changestore::filesystem::FileSystem::from_changes(local);
    [7.2569]
    [5.685]
    let store = libpijul::changestore::filesystem::FileSystem::from_changes(
    local,
    crate::repository::max_files(),
    );
  • replacement in pijul/src/remote/local.rs at line 62
    [7.4367][7.80806:80896](),[7.80806][7.80806:80896]()
    let store = libpijul::changestore::filesystem::FileSystem::from_root(&self.root);
    [7.4367]
    [7.80896]
    let store = libpijul::changestore::filesystem::FileSystem::from_root(
    &self.root,
    crate::repository::max_files(),
    );
  • replacement in pijul/src/remote/local.rs at line 124
    [7.82268][7.82268:82358]()
    let store = libpijul::changestore::filesystem::FileSystem::from_root(&self.root);
    [7.82268]
    [7.1180]
    let store = libpijul::changestore::filesystem::FileSystem::from_root(
    &self.root,
    crate::repository::max_files(),
    );
  • edit in pijul/Cargo.toml at line 92
    [3.1493]
    [21.309]
    rlimit = "0.6"
  • replacement in libpijul/src/changestore/filesystem.rs at line 4
    [7.824179][4.104729:104753]()
    use parking_lot::Mutex;
    [7.824179]
    [7.824179]
    use std::cell::RefCell;
  • edit in libpijul/src/changestore/filesystem.rs at line 6
    [7.824211][4.104754:104774]()
    use std::sync::Arc;
  • edit in libpijul/src/changestore/filesystem.rs at line 7
    [7.824253][7.824253:824292]()
    const CHANGE_CACHE_SIZE: usize = 100;
  • replacement in libpijul/src/changestore/filesystem.rs at line 9
    [7.87463][4.104775:104857]()
    change_cache: Arc<Mutex<lru_cache::LruCache<ChangeId, ChangeFile<'static>>>>,
    [7.87463]
    [7.824493]
    change_cache: RefCell<lru_cache::LruCache<ChangeId, ChangeFile<'static>>>,
  • edit in libpijul/src/changestore/filesystem.rs at line 15
    [7.87604]
    [7.87604]
    let len = self.change_cache.borrow().capacity();
  • replacement in libpijul/src/changestore/filesystem.rs at line 18
    [7.87676][4.104858:104951]()
    change_cache: Arc::new(Mutex::new(lru_cache::LruCache::new(CHANGE_CACHE_SIZE))),
    [7.87676]
    [7.87761]
    change_cache: RefCell::new(lru_cache::LruCache::new(len)),
  • replacement in libpijul/src/changestore/filesystem.rs at line 61
    [7.825268][7.825268:825324]()
    pub fn from_root<P: AsRef<Path>>(root: P) -> Self {
    [7.825268]
    [7.825324]
    pub fn from_root<P: AsRef<Path>>(root: P, cap: usize) -> Self {
  • replacement in libpijul/src/changestore/filesystem.rs at line 64
    [7.825437][7.825437:825477]()
    Self::from_changes(changes_dir)
    [7.825437]
    [7.825477]
    Self::from_changes(changes_dir, cap)
  • replacement in libpijul/src/changestore/filesystem.rs at line 69
    [7.825612][7.825612:825668]()
    pub fn from_changes(changes_dir: PathBuf) -> Self {
    [7.825612]
    [7.825668]
    pub fn from_changes(changes_dir: PathBuf, cap: usize) -> Self {
  • replacement in libpijul/src/changestore/filesystem.rs at line 73
    [7.825791][4.104952:105045]()
    change_cache: Arc::new(Mutex::new(lru_cache::LruCache::new(CHANGE_CACHE_SIZE))),
    [7.825791]
    [7.87935]
    change_cache: RefCell::new(lru_cache::LruCache::new(cap)),
  • replacement in libpijul/src/changestore/filesystem.rs at line 82
    [7.826014][4.105046:105186]()
    parking_lot::MutexGuard<
    lru_cache::LruCache<crate::pristine::ChangeId, crate::change::ChangeFile<'static>>,
    >,
    [7.826014]
    [7.35450]
    std::cell::RefMut<lru_cache::LruCache<ChangeId, ChangeFile<'static>>>,
  • replacement in libpijul/src/changestore/filesystem.rs at line 85
    [7.826129][4.105187:105244]()
    let mut change_cache = self.change_cache.lock();
    [7.826129]
    [7.88078]
    let mut change_cache = self.change_cache.borrow_mut();
  • replacement in libpijul/src/changestore/filesystem.rs at line 122
    [7.827293][4.105245:105301]()
    self.change_cache.lock().remove(change_id);
    [7.827293]
    [7.827395]
    self.change_cache.borrow_mut().remove(change_id);
  • replacement in libpijul/src/changestore/filesystem.rs at line 132
    [7.827590][4.105302:105377]()
    if let Some(l) = self.change_cache.lock().get_mut(change_id) {
    [7.827590]
    [7.88498]
    if let Some(l) = self.change_cache.borrow_mut().get_mut(change_id) {
  • edit in Cargo.lock at line 1512
    [22.33884]
    [22.33884]
    "rlimit",
  • edit in Cargo.lock at line 1776
    [22.41056]
    [22.41056]
    ]
    [[package]]
    name = "rlimit"
    version = "0.6.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cc0bf25554376fd362f54332b8410a625c71f15445bca32ffdfdf4ec9ac91726"
    dependencies = [
    "libc",