pingora icon indicating copy to clipboard operation
pingora copied to clipboard

rwlock is locked in lb

Open hubertshelley opened this issue 10 months ago • 2 comments

What is the problem your feature solves, or the need it fulfills?

 Rwlock is locked in lb, and I not sure it's a bug or designed. 

Describe the solution you'd like

 Rwlock is free in request_filter. 

Additional context



pub(crate) struct LB {
    pub(crate) service_book: Arc<RwLock<ServiceBook>>,
}

#[async_trait]
impl ProxyHttp for LB {
    type CTX = LBContext;

    fn new_ctx(&self) -> Self::CTX {
        Default::default()
    }

    ...

    async fn request_filter(
        &self,
        session: &mut Session,
        ctx: &mut Self::CTX,
    ) -> pingora::Result<bool>
    where
        Self::CTX: Send + Sync,
    {
        let path = session.req_header().uri.path().to_string();
        // self.service_book.read().await is locked
        match self.service_book.read().await.choose_service(path) {
            None => {
                println!("service not found");
                return Ok(false);
            }
            Some(service) => {
                service.url_rewrite(session.req_header_mut());
                ctx.service_addr = Some(service.get_url());
                Ok(true)
            }
        }
    }
}



hubertshelley avatar Apr 30 '24 08:04 hubertshelley

Is it really necessary to use rwlock? My project supports find a HttpPeer and rewrite the request path without lock.

https://github.com/vicanso/pingap/blob/main/src/proxy/server.rs#L375

vicanso avatar May 01 '24 05:05 vicanso

I'm not sure if this is relevant to the Pingora framework. This is a user defined lock. Only you can lock it. Where is write() called for the lock?

eaufavor avatar May 01 '24 17:05 eaufavor

This question has been stale for a week. It will be closed in an additional day if not updated.

github-actions[bot] avatar May 09 '24 01:05 github-actions[bot]

This issue has been closed because it has been stalled with no activity.

github-actions[bot] avatar May 10 '24 01:05 github-actions[bot]