gora-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ferdy Galema (Created) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (GORA-105) DataStoreFactory does not properly support multiple stores
Date Thu, 08 Mar 2012 15:15:58 GMT
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

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


View raw message