[
https://issues.apache.org/jira/browse/GORA-105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13225373#comment-13225373
]
Lewis John McGibbney commented on GORA-105:
-------------------------------------------
This arguement you've created here in this issue is about flexibility and
usability and is a real great catch at this late stage in the day so to speak.
I've followed your commentary as above and only have the following comments:
* Would be great to see the new static createProps() annotated with something
along the lines of "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. ", this provides a neat justification for the change.
* Can you please expand on what you mean by {bq} We can always reintroduce
caching functionality when we can implement a proper key. {bq}?
Does this require us to log the issue just now and act on it at a later stage?
All in all I'm very happy with the issue and of course the proposed solution.
It's a real nice catch and can only get better once it's implemented and tested
more.
> 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.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