// there is already another process calling the backend
// May we serve a stale response?
if($this->mayServeStaleWhileRevalidate($entry)){ $this->record($request, 'stale-while-revalidate');
return true; }
// wait for the lock to be released
if($this->waitForLock($request)){ // replace the current entry with the fresh one
$new = $this->lookup($request); $entry->headers = $new->headers; $entry->setContent($new->getContent()); $entry->setStatusCode($new->getStatusCode()); $entry->setProtocolVersion($new->getProtocolVersion()); foreach($new->headers->getCookies()as$cookie){ $entry->headers->setCookie($cookie); } }else{ // backend is slow as hell, send a 503 response (to avoid the dog pile effect)
// there is already another process calling the backend
// May we serve a stale response?
if($this->mayServeStaleWhileRevalidate($entry)){ $this->record($request, 'stale-while-revalidate');
return true; }
// wait for the lock to be released
if($this->waitForLock($request)){ // replace the current entry with the fresh one
$new = $this->lookup($request); $entry->headers = $new->headers; $entry->setContent($new->getContent()); $entry->setStatusCode($new->getStatusCode()); $entry->setProtocolVersion($new->getProtocolVersion()); foreach($new->headers->getCookies()as$cookie){ $entry->headers->setCookie($cookie); } }else{ // backend is slow as hell, send a 503 response (to avoid the dog pile effect)