[
https://issues.apache.org/jira/browse/GORA-105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ferdy Galema updated GORA-105:
------------------------------
Attachment: GORA-105-v2.patch
Done. Annotating the various creator methods was... inspiring. To reduce the
levels of indirection I made sure that all methods directly call the "end
creator method", that is the method that actually creates and initializes the
store. That should help with debugging and maintaining the code.
> DataStoreFactory does not properly support multiple stores
> ----------------------------------------------------------
>
> Key: GORA-105
> URL: https://issues.apache.org/jira/browse/GORA-105
> Project: Apache Gora
> Issue Type: Bug
> Components: schema, storage
> Reporter: Ferdy Galema
> Priority: Blocker
> Fix For: 0.2
>
> Attachments: GORA-105-v2.patch, GORA-105.patch
>
>
> DataStoreFactory has a single, static properties field. This is completely
> unacceptable, because that way when multiple stores are instantiated in the
> same JVM, the last store instance will overwrite the "default.schema"
> property. This causes that all the previous stores will read a misconfigured
> default schema property. Beside this it may cause several other nasty future
> bugs. In my opinion this is a blocker because the methods on DataStoreFactory
> suggest that it can handle multiple stores, when as a matter fact it doesn't.
> I will attach and commit a patch that fixes this problem. It only modifies
> gora-core. All stores directly benefit from this bugfix because of
> DataStoreBase. This patch fixes the following property related problems.
> -It introduces a static method createProps in DataStoreFactory. This is the
> equivalent of Configuration.create(). Everyone can create a new properties
> object and set everything interesting on it and pass it on to whatever stores
> they like, instead of ALL stores.
> -It fixes the method javadoc of DataStoreBase#getSchemaName(String
> mappingSchemaName, Class<?> persistentClass). The previous description was
> simply wrong.
> -It SERIALIZES the properties field of DataStoreBase instead of grabbing the
> static DataStoreFactory.properties field. This has the additional benefit of
> making sure that the store can be used correctly with runtime modified
> properties in a mapreduce context.
> -It removes the caching functionality of DataStoreFactory. Because of the
> dynamic configuration in the Properties and Configuration object, it is very
> difficult to implement a correct key hash for the cache. At the moment it
> only uses the triple {datastoreClass, keyClass,valueClass} as a key hash.
> Multiple stores cannot be properly supported when the factory uses badly
> implemented hash keys. (For example, one might instantiate 2 SqlStores, both
> using the exact same {datastoreClass, keyClass,valueClass} triple, but
> pointing to different databases. When one is about the instantiate the second
> datastore, it will faulty return the first datastore from cache). We can
> always reintroduce caching functionality when we can implement a proper key.
> The patch passes all tests. Will commit when there are no objections.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira