[keycloak-dev] why doesnt import/expot use reps?

Marek Posolda mposolda at redhat.com
Wed May 28 04:18:50 EDT 2014


I assume that main purpose of export/import is especially migration of 
full DB from one environment to another, so it's a bit different than 
just importing JSON file like testrealm.json with few data related to 
one realm IMO.

My main worry is especially about performance. For example if you have 
realm with million users and want to migrate it, the resulting 
realm.json file will be very big and IMO it would be impossible to 
import it with current approach used in RealmManager.importRealm, which 
is doing whole import in 1 transaction and needs whole 
RealmRepresentation to be read into memory with all the data and all 
million users.

So that's why I used a bit different approach, which is doing import in 
few steps and should scale well even with very big amount of data.

Also some data in representations can't be used as they are because it's 
impossible to retrieve them from DB. For example 
CredentialRepresentation assumes password in plain-text, but DB doesn't 
contain password in plain-text. To workaround, I will need 
CredentialRepresentation to support both plain-text password and also 
hash+salt. Similarly for privateKey (if we ever have an SPI for secure 
store of private key). Is it fine to change CredentialRepresentation 
(and possibly other places) this way? Also I will need to add support 
for "id" into representations as export/import is exporting everything 
including ID of objects, but that's not a big issue though...

Also the stuff inside model/api is not used just by export/import, but 
also by Mongo model. Mongo is storing it's data in JSON like format and 
I am reusing same format for export/import. So we not to maintain more 
things than before. If you want to add new configuration option with 
getter+setter into Realm, you still have "just" 7 places to update :) (I 
count RealmModel, 2xRealmEntity, 2xRealmAdapter, RealmRepresentation and 
ModelToRepresentation)

I have already JIRA opened for investigation of using same format - 
https://issues.jboss.org/browse/KEYCLOAK-487 . I can also investigate 
the possibility to read data in stream instead of everything into memory 
like RealmRepresentation is doing.

Marek

On 22.5.2014 16:33, Bill Burke wrote:
> We now have two different models for dealing with imports and two
> different code paths too.  Why does import/export have its own json
> model under model/api/...entities?  Why weren't the JSON representations
> in keycloak-core/.../representations used?
>
> We already have code that converts between
> keycloak-core/...representations and Models that is updated and
> maintained.  We now have double the work to keep the export/import stuff
> in sync too!
>
>



More information about the keycloak-dev mailing list