spring-projects / spring-data-geode Goto Github PK
View Code? Open in Web Editor NEWSpring Data support for Apache Geode
License: Apache License 2.0
Spring Data support for Apache Geode
License: Apache License 2.0
John Blum opened DATAGEODE-14 and commented
PROBLEM DESCRIPTION
Currently, there is a race condition / bug in Apache Geode where an Index creation can be in a "pending" state for a particular Geode peer member node in the cluster having a PARTITION
Region on which the Index will be created.
This Apache Geode race condition is negatively impacting Spring Data Geode's (SDG) IndexFactoryBean
when a peer member joining this cluster, configured with SDG, defines the same PARTITION
Region and the same, associated Index.
This Apache Geode race condition affects SDG's IndexFactoryBean
because the "check" for an "existing" (already defined/created) Index (by "name") occurs before the actual Index creation logic (i.e. using Geode's QueryService.createIndex(..)
method calls) in SDG's IndexFactoryBean
.
Essentially, Geode's QueryService.getIndexes()
used by SDG's IndexFactoryBean
to check for an "existing" Index returns "nothing" (!), even when the Index is in a "pending" state.
An Index will be in a "pending" state (represented as a FutureTask
internally by Geode) when the Index has already been created by another peer member node in the same cluster having the same PARTITION
Region (PR) and the same Index definition. It is likely that this "other' peer member node in the cluster was started first. Additionally, all PR Index definitions are "distributed" to other peer nodes in the same cluster hosting the same PR. When this happens, these other nodes will represent the "pending" Index definition as a FutureTask
. And, while the QueryService.getIndexes()
is not a completely blocking call (i.e. does not wait on the "pending" (FutureTask
based) Indexes), the QueryService.createIndex(..)
does! Therefore, it is possible that this Apache Geode induced race condition can negatively impact SDG's IndexFactoryBean
as already stated.
CHANGES
So, the purpose of this JIRA "improvement" will be to make SDG's IndexFactoryBean
impervious to any ill Geode behavior involving Indexes, PRs or not.
Additionally, I will maintain SDG's "fail fast" behavior with the added option to either "override" existing Indexes when Geode's IndexExistsException
is thrown, or "ignore" the Index that would be created by SDG's IndexFactoryBean
when Geode's IndexNameConflictException
is thrown.
Finally, SDG will strive to provide the developer with more informative Exception handling, even instructing the developer on the proper course of action
Attachments:
Referenced from: commits spring-projects/spring-data-gemfire@0db6601
John Blum opened DATAGEODE-8 and commented
Currently, when a developer uses the SDG XML namespace to configure a GemFire cache client Pool
with the <gfe:pool>
element and locators
or servers
attribute, for example...
<gfe:pool subscription-enabled="true" locators="${app.gemfire.pool.locators}"/>
Where the value of the property placeholder ($\{app.gemfire.pool.locators\
}) may be host1[port1], host2[port2], ..., hostN[portN]
.
It is possible that the values for the attributes (mutually exclusive, i.e. 1 or the other may be used but both locators
and servers
cannot both be set at the same time), will not be picked up when the PoolFactoryBean
class constructs and initialized the declared, configured GemFire Pool
.
Referenced from: commits dbba298
John Blum opened DATAGEODE-22 and commented
This improvement adds a new Annotation (e.g. @EnableGemFireCaching
) to SDG's Annotation config model to configure both Spring's Cache Abstraction (using the @EnableCaching
annotation) along with SDG's GemfireCacheManager as a convenience to the user
No further details from DATAGEODE-22
John Blum opened DATAGEODE-9 and commented
The Apache Geode org.apache.geode.cache.client.Pool
interface added the getOnlineLocators()
method, which caused the Nightly Spring Data Geode build to fail
Referenced from: commits d198676
John Blum opened DATAGEODE-41 and commented
The o.s.d.g.search.lucene.LuceneOperationsIntegrationTests
test suite class failed in the Spring Bamboo CI server during the SDG nightly and release build runs.
The cause of the failure was indicated as...
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'luceneTemplate' defined in org.springframework.data.gemfire.search.lucene.LuceneOperationsIntegrationTests$LuceneOperationsIntegrationTestConfiguration: Unsatisfied dependency expressed through method 'luceneTemplate' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.geode.cache.lucene.LuceneIndex' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.geode.cache.lucene.LuceneIndex' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Affects: 2.0 RC3 (Kay)
John Blum opened DATAGEODE-44 and commented
This enhancement changes SDG^2's logic for resolving an Apache Geode Pool
for PROXY
or CACHING_PROXY
client Region
beans registered in the Spring container to fallback on Geode's DEFAULT
Pool
Affects: 2.0 RC3 (Kay)
John Blum opened DATAGEODE-3 and commented
The Spring Data Commons SimpleTypeHolder
class definition and API changed making the default constructor protected
. This caused a complication error in GemfireSimpleTypeHolderTest
Referenced from: commits 2f34d88
John Blum opened DATAGEODE-2 and commented
This improvement involves changing the GemfireOperations
and GemfireTemplate
to return Optional
values where null
otherwise might be returned and to refactor the codebase to use the Java 8 Streams API to implement and streamline the functionality for maintainability
No further details from DATAGEODE-2
John Blum opened DATAGEODE-40 and commented
The o.s.d.g.client.PoolsConfiguredWithLocatorsAndServersExpressionsIntegrationTests
class tests recently failed in both the Spring's Bamboo CI server, SDG nightly and release builds.
The underlying cause of the failures is not apparent from...
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.data.gemfire.client.PoolsConfiguredWithLocatorsAndServersExpressionsIntegrationTests': Unsatisfied dependency expressed through field 'locatorPool';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.geode.cache.client.Pool' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=locatorPool)}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.geode.cache.client.Pool' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=locatorPool)}
Affects: 2.0 RC3 (Kay)
John Blum opened DATAGEODE-32 and commented
Move the custom Asciidoctor Maven (build) plugin configuration to a build profile and restore the original, default Asciidoctor Maven plugin configuration required by the SD build infrastructure
Reference URL: https://jira.spring.io/browse/SGF-655
Backported to: 2.0 RC2 (Kay)
John Blum opened DATAGEODE-45 and commented
Upgrades Spring Data Geode 2.0 (Kay) to Apache Geode 1.2.1
No further details from DATAGEODE-45
Whats is the relationship between Spring Data Geode vs Spring Data Gemfire? Are they completely standalone with independent lifecyles?
Mark Paluch opened DATAGEODE-42 and commented
Issue Links:
John Blum opened DATAGEODE-35 and commented
The SDG o.s.d.g.CacheFactoryBean
is missing ResourceManager properties for critical-off-heap-percentage
and eviction-off-heap-percentage
.
Additionally, the SDG XML namespace (spring-geode-2.0.xsd
) is miss corresponding critical-off-heap-percentage
and eviction-off-heap-percentage
attributes on the <gfe:cache/>
element
Affects: 2.0 RC2 (Kay)
John Blum opened DATAGEODE-1 and commented
Remove the support for Apache Geode's Dynamic Region creation using the DynamicRegionFactory class, which has been deprecated
Reference URL: https://jira.spring.io/browse/SGF-615
Referenced from: pull request #29, and commits ca2a402, 1a012c9
John Blum opened DATAGEODE-36 and commented
Apache Geode significantly lacks in asynchronous and/or Reactive Function execution support as well as result streaming/handling.
Spring Data Geode combined with the Spring Framework's Async handling features and Reactive support is in a perfect position to make this behavior first class in SDG's Function annotation model.
This JIRA is meant to capture this intended behavior and extend SDG's already robust Function annotation and POJO programming model.
See this example test class for more details
No further details from DATAGEODE-36
John Blum opened DATAGEODE-10 and commented
The org.apache.geode.cache.lucene.LuceneQueryFactory
class, setResultLimit(:int)
was renamed to setLimit(:int)
.
Referenced from: commits spring-projects/spring-data-gemfire@23d1528
John Blum opened DATAGEODE-33 and commented
Add a new SDG Annotation, @EnableCachingDefinedRegions
to define and create Apache Geode cache Regions based on Spring's Cache Abstraction annoation (e.g. @Cacheable
).
This annotation will compliment the already existing @EnableEntityDefinedRegions
which defines and creates Apache Geode cache Regions based on @Region
annotated application domain object entities
Reference URL: https://jira.spring.io/browse/SGF-656
John Blum opened DATAGEODE-19 and commented
Introduce a new @UsesGemFireProperties
meta-annotation to annotate Spring Data Geode's Annotation config-based Annotations (e.g. @EnableManager
) to indicate that SDG's Annotation config is back by Geode properties
Referenced from: commits f85f15f
John Blum opened DATAGEODE-47 and commented
SDG Reference Guide documentation for the new Annotation-based configuration model
John Blum opened DATAGEODE-37 and commented
Refactor the o.s.d.g.listener.ContinousQueryListenerContainer
and supporting SDG CQ infrastructure and framework class by applying Java 8 typing and functionality to simplify the code
Affects: 2.0 RC2 (Kay)
This happens with 1.0.0.INCUBATING-RELEASE
Googling around I found this similar issue darrachequesne/spring-data-jpa-datatables#50
See my demo app. You can run it against a local server and create region --name employee --type REPLICATE. Switch to boot 1.5.1.RELEASE or later to reproduce the issue.
John Blum opened DATAGEODE-23 and commented
Add a new Annotation (e.g. @EnableGemfireCacheTransactions
to the SDG Annotation config model that enables Spring's Transaction Management infrastructure (using @EnableTransactionManagement
) along with declaring and registering the SDG GemfireCacheTransactionmanager in the Spring application context
No further details from DATAGEODE-23
John Blum opened DATAGEODE-7 and commented
Javadoc is no longer distributed as part of the distribution build. Javadocs are expected in $project.baseDir/target/static-resources/api
. Reference docs are built and distributed correctly
Reference URL: https://jira.spring.io/browse/SGF-626
Referenced from: commits ea4670a
John Blum opened DATAGEODE-5 and commented
Task to review and edit the Spring Data Geode Reference Guide, to remove all Spring Data GemFire and Pivotal GemFire references and URLs
No further details from DATAGEODE-5
John Blum opened DATAGEODE-38 and commented
After building an example (CQ with JavaConfig) in the Spring GemFire Examples project showing how to configure SDG's Continuous Queries infrastructure support in JavaConfig, I realized that I could add additional support in thew new Annotation configuration model to simplify the setup and configuration of registers CQs and Listeners/callbacks that process CQ events.
Essentially, I will introduce 2 new Annotations, @EnableContinuousQueries
to enable the SDG CQ infrastructure along with @ContinuousQuery
.
@ContinuousQuery
will be a POJO method-level annotation meant to defined the CQ query and handler method that should be called back upon receiving a CQ event for that particular query.
For example...
class MyApplicationContinuousQueriesAndHandlers {
@ContinuousQuery(query = "SELECT * FROM /Orders o WHERE o.total > 1000")
public void handleExpensiveOrders(CqEvent event) {
...
}
The user can enable CQ using the @EnableContinuousQueries
annotation, as stated above, like so...
@Configuration
@EnableContinuousQueries
class ApplicationConfiguration {
...
}
This will be very similar to the core Spring Framework's "Annotation driven listener endpoints"
No further details from DATAGEODE-38
John Blum opened DATAGEODE-34 and commented
This feature adds the @EnableClusterConfiguration
annotation to the new Spring Data Geode Annotation based configuration model.
The feature and Annotation name (i.e. @EnableClusterConfiguration
) should not be confused with Apache Geode's own Cluster Configuration Service, which records schema-like changes initiated from Gfsh or other JMX clients affecting the entire cluster and ensuring a consistent configuration when new nodes are brought online and added to the cluster.
However, this feature will have a similar effect. The schema changes introduced by using SD's Repository abstraction and specifically the mapping infrastructure with @EnableEntityDefinedRegions
or Spring's Cache Abstraction with @EnableCachingDefinedRegions
along with @EnableIndexing
will determine the configuration cluster-side driven from a cache client application client-side (or technically, even a peer cache application)
No further details from DATAGEODE-34
John Blum opened DATAGEODE-6 and commented
Task to refactor and cleanup the InvalidRegionExpirationAttributesNamespaceTest
as well as to make the LuceneOperationsIntegrationTests
more reliable by calling LuceneIndex.waitUntilFlushed(..) which is required to update the Lucene Index when data is written to the Region, which Geode does asynchronously
Referenced from: commits 7362d75
Oliver Drotbohm opened DATAGEODE-28 and commented
Referenced from: commits 6dee0f6, 84e2f0d, d164e62, b5e7c53, d5e3e47
John Blum opened DATAGEODE-30 and commented
The Spring Data Geode Reference Guide formatting is all messed up as the Maven Asciidoctor plugin did not and could not render the Asciidoc document(s) correctly.
This also caused an increase in the build time when generating the docs in different formats (e.g. PDF, etc)
Affects: 2.0 RC2 (Kay)
Reference URL: https://docs.spring.io/spring-data/geode/docs/2.0.0.RC2/reference/html/
Referenced from: commits 61257ce
Mark Paluch opened DATAGEODE-17 and commented
Adopt code to changes related to Optional
removal in mapping and convert packages in Spring Data Commons
Issue Links:
John Blum opened DATAGEODE-18 and commented
Adds new Unit test infrastructure for mocking Geode objects
Referenced from: commits 5ce738c
John Blum opened DATAGEODE-15 and commented
Spring Data Commons commit fce40e9 for DATACMNS-1098 changed the constructor of SDC's RepositoryConfigurationSourceSupport
class to now require Spring's BeanDefinitionRegistry
in order to expose the registry in the SDC's RepositoryComponentScanner
.
This change caused the SDG GemfireRepositoryConfigurationExtentionTest
to fail!TODO
Affects: 2.0 RC1 (Kay)
Reference URL: https://jira.spring.io/browse/DATACMNS-1098
Referenced from: commits 1d5597a
John Blum opened DATAGEODE-4 and commented
Adapt to changes in the Repository interfaces and infrastructure in Spring Data Commons
John Blum opened DATAGEODE-11 and commented
The getSerializer(:Class)
method in org.apache.geode.internal.InternalDataSerializer
class was changed to private
scope causing a compilation failure in Spring Data Geode and subsequently a build failure
No further details from DATAGEODE-11
John Blum opened DATAGEODE-25 and commented
Add a new Annotation (@EnableBeanFactoryLocator
) to the SDG Annotation based configuration model to enable SDG's GemfireBeanFactoryLocator
, which is used to configure GemFire/Geode objects declared and configured with GemFire/Geode native config (e.g. XML and properties)
John Blum opened DATAGEODE-12 and commented
Adds ability to easily and flexibly alter configuration of Spring Data GemFire applications when using the new Annotation configuration based model using the Spring Configurer convention
Reference URL: https://jira.spring.io/browse/SGF-586
John Blum opened DATAGEODE-16 and commented
When Pivotal GemFire is used inside a JTA/CMT Transaction running in a "managed" environment (i.e. Java EE Application Server, e.g. WebSphere Application Server (WAS)) and the application coordinates GemFire with another XA resource (e.g. JMS Message Broker), then GemFire must be configured and used as the "Last Resource" in the JTA Transaction since GemFire is not XA-compliant.
This is described in GemFire's User Guide here.
The setup and configuration a user must following, both when configuring GemFire in "managed" environment as well as steps to code their GemFire cache application, is here.
An example of what the developer must do in code is here.
NOTE: you must also configure and deploy GemFire's JCA Resource Adapter in your Java EE AS of choice.
The task of this JIRA "improvement" is to simplify the configuration of a Spring GemFire cache client application when using Spring's Transaction Management infrastructure to properly coordinate with the JTA Transaction using the GemFire JCA ResourceAdapter in order to position GemFire as the "Last Resource".
This "improvement" will include a new SDG Annotation (part of the new Annotation-based configuration model) and a couple of Spring Aspects to support the proper sequence and coordination in the Spring "managed" CMT/JTA Transaction.
See attached source files for preview of the addition.
Reference URL: https://jira.spring.io/browse/SGF-636
Referenced from: commits 70eea5f
Oliver Drotbohm opened DATAGEODE-31 and commented
It currently uses spring-data-commons.version
which causes the release infrastructure not being able to properly fix the dependency version to the Spring Data Commons release
Referenced from: commits 7eee3ee
Oliver Drotbohm opened DATAGEODE-48 and commented
Referenced from: commits 26d1c7b, e956084, 05fa29d, 3c4c834, f4170a5, 696d805
John Blum opened DATAGEODE-24 and commented
This is an "improvement" to the existing @EnableSecurity
annotation in SDG's Annotation-based configuration model to auto-configure an instance of Apache Geode's AuthInitialize interface.
In Geode's client/server topology, the AuthInitialize
interface must be implemented by any (Spring (Boot)) Geode cache client application when the Geode cluster has Security enabled (i.e. a SecurityManager
has been configured), which requires the client to be authenticated when connecting.
No further details from DATAGEODE-24
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.