fn reseedable()

in elasticsearch/src/http/transport.rs [919:943]


    fn reseedable(&self) -> bool {
        let inner = self.inner.read();
        let reseed_frequency = match self.reseed_frequency {
            Some(wait) => wait,
            None => return false,
        };
        let last_update_is_stale = inner
            .last_update
            .as_ref()
            .map(|last_update| last_update.elapsed() > reseed_frequency);
        let reseedable = last_update_is_stale.unwrap_or(true);

        if !reseedable {
            false
        } else {
            // Check if refreshing is false if so, sets to true atomically and returns old value (false) meaning refreshable is true
            // If refreshing is set to true, do nothing and return true, meaning refreshable is false
            !self
                .reseeding
                .compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
                // This can be replaced with `.into_ok_or_err` once stable.
                // https://doc.rust-lang.org/std/result/enum.Result.html#method.into_ok_or_err
                .unwrap_or(true)
        }
    }