Spanner/src/Session/CacheSessionPool.php
private function waitForNextAvailableSession()
    {
        $elapsedCycles = 0;

        while (true) {
            $session = $this->config['lock']->synchronize(function () use ($elapsedCycles) {
                $item = $this->cacheItemPool->getItem($this->cacheKey);
                $data = $item->get();
                $session = $this->getSession($data);

                if ($session) {
                    $this->cacheItemPool->save($item->set($data));
                    return $session;
                }

                if ($this->config['maxCyclesToWaitForSession'] <= $elapsedCycles) {
                    $this->cacheItemPool->save($item->set($data));

                    throw new \RuntimeException(
                        'A session did not become available in the allotted number of attempts.'
                    );
                }
            });

            if ($session && $this->handleSession($session)) {
                return $session;
            }

            $elapsedCycles++;
            usleep($this->config['sleepIntervalSeconds'] * 1000000);
        }
    }
private function waitForNextAvailableSession()
    {
        $elapsedCycles = 0;

        while (true) {
            $session = $this->config['lock']->synchronize(function () use ($elapsedCycles) {
                $item = $this->cacheItemPool->getItem($this->cacheKey);
                $data = $item->get();
                $session = $this->getSession($data);

                if ($session) {
                    $this->cacheItemPool->save($item->set($data));
                    return $session;
                }

                if ($this->config['maxCyclesToWaitForSession'] <= $elapsedCycles) {
                    $this->cacheItemPool->save($item->set($data));

                    throw new \RuntimeException(
                        'A session did not become available in the allotted number of attempts.'
                    );
                }
            });

            if ($session && $this->handleSession($session)) {
                return $session;
            }

            $elapsedCycles++;
            usleep($this->config['sleepIntervalSeconds'] * 1000000);
        }
    }
private function waitForNextAvailableSession ( ) { $ elapsedCycles = 0 ; while ( true ) { $ session = $ this -> config [ 'lock' ] -> synchronize ( function ( ) use ( $ elapsedCycles ) { $ item = $ this -> cacheItemPool -> getItem ( $ this -> cacheKey ) ; $ data = $ item -> get ( ) ; $ session = $ this -> getSession ( $ data ) ; if ( $ session ) { $ this -> cacheItemPool -> save ( $ item -> set ( $ data ) ) ; return $ session ; } if ( $ this -> config [ 'maxCyclesToWaitForSession' ] <= $ elapsedCycles ) { $ this -> cacheItemPool -> save ( $ item -> set ( $ data ) ) ; throw new \ RuntimeException ( 'A session did not become available in the allotted number of attempts.' ) ; } } ) ; if ( $ session && $ this -> handleSession ( $ session ) ) { return $ session ; } $ elapsedCycles ++ ; usleep ( $ this -> config [ 'sleepIntervalSeconds' ] * 1000000 ) ; } }
Blocks until a session becomes available.

@return array
@throws \RuntimeException
Blocks until a session becomes available .