fn add()

in src/entrystore/src/seg/memcache.rs [141:196]


    fn add(&mut self, add: &Add) -> Response {
        if self.data.get_no_freq_incr(add.key()).is_some() {
            return Response::not_stored(add.noreply());
        }

        let ttl = add.ttl().get().unwrap_or(0);

        if ttl < 0 {
            // immediate expire maps to a delete
            self.data.delete(add.key());
            Response::stored(add.noreply())
        } else if let Ok(s) = std::str::from_utf8(add.value()) {
            if let Ok(v) = s.parse::<u64>() {
                if self
                    .data
                    .insert(
                        add.key(),
                        v,
                        Some(&add.flags().to_be_bytes()),
                        Duration::from_secs(ttl as u64),
                    )
                    .is_ok()
                {
                    Response::stored(add.noreply())
                } else {
                    Response::server_error("")
                }
            } else if self
                .data
                .insert(
                    add.key(),
                    add.value(),
                    Some(&add.flags().to_be_bytes()),
                    Duration::from_secs(ttl as u64),
                )
                .is_ok()
            {
                Response::stored(add.noreply())
            } else {
                Response::server_error("")
            }
        } else if self
            .data
            .insert(
                add.key(),
                add.value(),
                Some(&add.flags().to_be_bytes()),
                Duration::from_secs(ttl as u64),
            )
            .is_ok()
        {
            Response::stored(add.noreply())
        } else {
            Response::server_error("")
        }
    }