App crash when saving data (using APC metadata cache)

Hi community,

I have a problem using APC meta-data in my app and trying save a data.

Declaration models meta-data in DI:

$di->set('modelsMetadata', function() use ($di){
    $metaData = new Phalcon\Mvc\Model\MetaData\Apc(array(
        'lifetime' => 86400,
        'prefix' => 'metadata_'
    ));

    return $metaData;
});

Model Sessions:

class Sessions extends Phalcon\Mvc\Model {

    /** @var int ID session auto_increment */
    public $id;

    /** @var int ID user */
    public $id_user;

    /** @var string Session hash */
    public $hash;

    /** @var int User IP */
    public $ip;

    /** @var string Selected language */    
    public $language;

    /** @var string Date activity */
    public $date_activity;


    public function initialize(){
        $this->hasOne('id_user', 'Users', 'id', array('alias' => 'user'));
    }

Saving data using Phalcon\Mvc\Model:

$session = new Sessions();
$session->id_user = $user->id;
$session->hash = $someHash;
$session->ip = ip2long($this->request->getClientAddress());
$session->date_activity = time();
$session->language = Language::getDefault();
$session->save();

Output after saving:

Notice: Undefined index: 1 in phalcon/mvc/model/metadata.zep on line 276 in /var/www/auction-dev/data/www/test-dev/backend/controllers/client/AuthController.php on line 79

Phalcon\Mvc\Model\Exception:The meta-data is invalid or is corrupt
File = phalcon/mvc/model/metadata.zep
Line = 391

0 [internal function]: Phalcon\Mvc\Model\MetaData->getPrimaryKeyAttributes(Object(Sessions))
1 [internal function]: Phalcon\Mvc\Model->_exists(Object(Phalcon\Mvc\Model\MetaData\Apc), Object(Phalcon\Db\Adapter\Pdo\Mysql), 'sessions')
2 /var/www/auction-dev/data/www/test-dev/backend/controllers/client/AuthController.php(79): Phalcon\Mvc\Model->save()
3 [internal function]: AuthController->loginAction()
4 [internal function]: Phalcon\Dispatcher->dispatch()
5 /var/www/auction-dev/data/www/test-dev/index.php(276): Phalcon\Mvc\Application->handle()
6 {main}

What am I doing wrong? Thanks.

UPD

I tried manually get primary attributes and keys of model, but result remains the same:

$session = new Sessions();
echo '<pre>'.print_r($this->modelsMetadata->getAttributes($session), true).'</pre>';
echo '<pre>'.print_r($this->modelsMetadata->getNonPrimaryKeyAttributes($session), true).'</pre>';
echo '<pre>'.print_r($this->modelsMetadata->getPrimaryKeyAttributes($session), true).'</pre>';

Output is:

Array
(
    [0] => id
    [1] => id_user
    [2] => hash
    [3] => ip
    [4] => language
    [5] => date_activity
)

Array
(
    [0] => id_user
    [1] => hash
    [2] => ip
    [3] => language
    [4] => date_activity
)


Notice: Undefined index: 1 in phalcon/mvc/model/metadata.zep on line 276 in /var/www/auction-dev/data/www/test-dev/backend/controllers/client/AuthController.php on line 74

Phalcon\Mvc\Model\Exception:The meta-data is invalid or is corrupt
File = phalcon/mvc/model/metadata.zep
Line = 391

0 /var/www/auction-dev/data/www/test-dev/backend/controllers/client/AuthController.php(74): Phalcon\Mvc\Model\MetaData->getPrimaryKeyAttributes(Object(Sessions))
1 [internal function]: AuthController->loginAction()
2 [internal function]: Phalcon\Dispatcher->dispatch()
3 /var/www/auction-dev/data/www/test-dev/index.php(276): Phalcon\Mvc\Application->handle()
4 {main}


30.7k

Hi,

I think that it could come from your model definition: it has one relation with another object of SessionModel itself. It looks strange to associate the session to another one ! If user_id=15, he is now associated with a session that has id=15 !



488

Hi,

I think that it could come from your model definition: it has one relation with another object of SessionModel itself. It looks strange to associate the session to another one ! If user_id=15, he is now associated with a session that has id=15 !

Sorry, my mistake. Corrected the typo and checked without relations - the same result :(



488
edited Jan '16

I replaced the metadata cache on Phalcon\Mvc\Model\MetaData\Files and app works fine!

It's a bug in Phalcon\Mvc\Model\MetaData\Apc class?



30.7k

Hi,

maybe it is a bug.



709

what do you use , apc or apcu , only support apc currently