PDA

View Full Version : [FIXED] Store.destroy() doesn't remove store from stores's cache (Ext.StoreManager.map)



natb
29 May 2012, 12:12 AM
REQUIRED INFORMATION
Ext version tested:

Sencha 2.0.1
Browser versions tested against:

Chrome 19.0
Description:

When a store is created it is added to Ext.StoreManager.map by storeId as a key.
However store.destroy() doesn't remove it from the store's cache. So, the longer the application is used, the more memory is consumed as none of stores is actually released.
Calling Ext.StoreManager.unregister(store.getStoreId()) explicitly removes store reference from the cache. However I suppose that this should be done in destroy() method as even DataView relies on it when updating store to new (DataView.updateStore()) or am I missing anything?
Steps to reproduce the problem:

Create a store
Check Ext.StoreManager.map -> store is added
Call store.destroy()
Check Ext.StoreManager.map -> store is still there, only isDestroyed flag is set to true
Test Case:

Ext.define('User', { extend: 'Ext.data.Model',
config: {
fields: [
{name: 'firstName', type: 'string'},
{name: 'lastName', type: 'string'},
{name: 'age', type: 'int'},
{name: 'eyeColor', type: 'string'}
]
}
});


var data = [
{firstName: 'Ed', lastName: 'Spencer'},
{firstName: 'Tommy', lastName: 'Maintz'},
{firstName: 'Aaron', lastName: 'Conran'},
{firstName: 'Jamie', lastName: 'Avins'}
];

var store1 = Ext.create('Ext.data.Store', {
model: 'User',
storeId: 'test-store-1',
data : data
});


Ext.StoreManager.map // 'test-store-1' is added to cache
store1.destroy()
Ext.StoreManager.map // 'test-store-1' is still in cache


////

var store2 = Ext.create('Ext.data.Store', {
model: 'User',
storeId: 'test-store-2',
data : data
});
store2.autoDestroy = true;


var touchTeam = Ext.create('Ext.DataView', {
fullscreen: true,
store: store2,
itemTpl: '{name} is {age} years old'
});


Ext.StoreManager.map // 'test-store-2' is in cache


var store3 = Ext.create('Ext.data.Store', {
model: 'User',
autoDestroy: true,
storeId: 'test-store-3',
data : data
});


touchTeam.setStore(store3)


Ext.StoreManager.map // 'test-store-2' is still in cache though shouldn't, as expected to be destroyed
Thank you in advance,

Regards

mitchellsimoens
29 May 2012, 6:23 AM
Thanks for the report.

natb
8 Jun 2012, 1:50 AM
Hi,

Do you have any plans on when this issue will be fixed?

Regards,

TommyMaintz
14 Jun 2012, 7:28 AM
This has been fixed and will be part of the next release. Thanks for the report.

Geoh
2 Jul 2012, 2:02 AM
Is there any hotfix or override for this bug?

BTW, when 2.0.2 will be released? It is important to know 'cause we're in production and we can't still continue by searching for bugs and fixes of ST2 (we already update to ST2.0.1.1).

Thanks,

Matteo

natb
5 Jul 2012, 12:29 AM
Hi,

We're using the following override for now (it just calls 'unregister' method of StoreManager to release store on destroy):

Ext.define('MyApp.override.Store', {
override: 'Ext.data.Store',

destroy: function () {
this.callParent();

Ext.StoreManager.unregister(this);
}
});

Regards

Geoh
5 Jul 2012, 1:52 AM
Thank's Natb, we will try it.

Any news from Sencha team about 2.0.2?


Hi,

We're using the following override for now (it just calls 'unregister' method of StoreManager to release store on destroy):

Ext.define('MyApp.override.Store', {
override: 'Ext.data.Store',

destroy: function () {
this.callParent();

Ext.StoreManager.unregister(this);
}
});

Regards