Jinwoo Hwang created GEODE-10558:
------------------------------------
Summary: Compatibility Research: Apache Geode Native Client with
Apache Geode 2.0
Key: GEODE-10558
URL: https://issues.apache.org/jira/browse/GEODE-10558
Project: Geode
Issue Type: Improvement
Reporter: Jinwoo Hwang
h2. Summary
Research and validate compatibility between Apache Geode Native Client and
Apache Geode Server 2.0.0 to ensure proper client-server communication,
protocol compatibility, and API functionality.
h2. Description
Apache Geode 2.0 represents a major version release with potential breaking
changes. This research task aims to:
* Verify protocol compatibility between native clients and Geode 2.0 servers
* Identify any breaking changes affecting native client functionality
* Document supported version combinations
* Provide migration guidance for users upgrading to Geode 2.0
h2. Acceptance Criteria
* [ ] Compatibility matrix created for Geode Native versions vs Geode 2.0
* [ ] All critical APIs tested with Geode 2.0 server
* [ ] Wire protocol compatibility verified
* [ ] Performance benchmarks completed
* [ ] Documentation updated with compatibility information
* [ ] Migration guide created (if needed)
h2. Research Scope
h3. 1. Version Analysis
* Analyze Geode Native Client versions: 1.15.x, 2.0.0
* Compare with Geode Server 2.0.0 release notes
* Identify deprecated/removed features affecting native clients
* Review wire protocol changes
h3. 2. Build & Configuration Testing
* Download official Geode 2.0.0 release
* Download Geode Native Client releases (1.15.x, 2.0.0)
* Verify CMake configuration with Geode 2.0
* Test build process on multiple platforms:
** macOS (11.0+)
** Linux (Ubuntu 20.04, RHEL 8)
** Windows (Server 2019)
h3. 3. Functional Testing
Test the following client operations against Geode 2.0:
*Cache Operations:*
* Cache creation and configuration
* Region creation (PROXY, CACHING_PROXY, LOCAL)
* Connection pool management
* Multi-region operations
*CRUD Operations:*
* put(), get(), remove()
* putAll(), getAll(), removeAll()
* Atomic operations (replace, compareAndSwap)
* Entry TTL and expiration
*Query & Search:*
* OQL queries
* Continuous queries (CQ)
* Indexes
* Query result handling
*Advanced Features:*
* Function execution
* Transactions
* Event handling and listeners
* PDX serialization
* Security (authentication/authorization)
* SSL/TLS connections
h3. 4. Performance & Stability
* Benchmark throughput vs Geode 1.15.x
* Memory consumption analysis
* Connection stability under load
* Failover and high availability scenarios
h3. 5. Integration Testing
* Test with various Geode 2.0 topologies:
** Single server
** Locator + multiple servers
** WAN replication
** Security enabled
* Network configurations (IPv4, IPv6)
* SNI (Server Name Indication) support
h2. Technical Environment
h3. Server Component
{code:java}
Component: Apache Geode Server
Version: 2.0.0
Source: https://github.com/apache/geode/releases/tag/rel%2Fv2.0.0
Platform: Linux/macOS/Windows
{code}
h3. Client Components
{code:java}
Component: Apache Geode Native Client
Versions to Test:
- 1.15.0, 1.15.1, 1.15.2
- 2.0.0
Source: https://github.com/apache/geode-native/releases
Languages: C++, .NET Framework
{code}
h3. Build Requirements
* CMake 3.18+
* C++11 compiler
* OpenSSL
* Java 11+ JDK (for server)
* Docker (for containerized testing)
h2. Test Scenarios
h3. Scenario 1: Version Detection
{code:bash}
# Verify CMake can detect Geode 2.0
export GEODE_HOME=/path/to/geode-2.0.0
cmake .. -DGEODE_ROOT=$GEODE_HOME
Expected: "Found Geode: ... (found suitable version "2.0.0")"
{code}
h3. Scenario 2: Basic Connectivity
{code:cpp}
// Test basic client-server connection
auto cache = CacheFactory()
.set("log-level", "info")
.create();
auto poolFactory = cache.getPoolManager().createFactory();
poolFactory.addLocator("localhost", 10334);
auto pool = poolFactory.create("myPool");
// Expected: Successful connection to Geode 2.0 server
{code}
h3. Scenario 3: Region Operations
{code:cpp}
// Test CRUD operations on regions
auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
auto region = regionFactory.setPoolName("myPool")
.create("testRegion");
region->put("key1", "value1");
auto result = region->get("key1");
region->remove("key1");
// Expected: All operations succeed with Geode 2.0
{code}
h3. Scenario 4: Query Execution
{code:cpp}
// Test OQL queries
auto queryService = cache.getQueryService();
auto query = queryService->newQuery("SELECT * FROM /testRegion WHERE id > 100");
auto results = query->execute();
// Expected: Query results returned successfully
{code}
h3. Scenario 5: Security Integration
{code:cpp}
// Test authentication with Geode 2.0
auto cacheFactory = CacheFactory();
cacheFactory.set("security-username", "user");
cacheFactory.set("security-password", "pass");
auto secureCache = cacheFactory.create();
// Expected: Authentication succeeds
{code}
h2. Known Issues & Risks
{panel:title=Potential Risks|borderColor=#cccccc|titleBGColor=#f7d6c1}
* *Wire Protocol Changes:* Geode 2.0 may have protocol changes requiring
native client updates
* *API Deprecations:* Some APIs may be deprecated/removed in Geode 2.0
* *Build Dependencies:* Boost/OpenSSL version compatibility on newer systems
* *Performance Regressions:* New protocol overhead or server-side changes
* *Security Changes:* Updated authentication/authorization mechanisms{panel}
h2. Timeline
{code:java}
Phase 1: Setup & Initial Testing (Week 1-2)
- Download and install components
- Verify build configuration
- Basic connectivity tests
Phase 2: Functional Testing (Week 3-5)
- CRUD operations testing
- Query functionality
- Advanced features
Phase 3: Performance & Stability (Week 6-8)
- Benchmark execution
- Load testing
- Failover scenarios
Phase 4: Documentation & Reporting (Week 9-12)
- Create compatibility matrix
- Write migration guide
- Finalize test reports
{code}
h2. Success Metrics
* *API compatibility* - All major APIs work with Geode 2.0
* *Zero critical bugs* - No blocking issues for production use
* *Performance parity* - Within 5% of Geode 1.15.x performance
* *Clear documentation* - Users can easily determine compatibility and migrate
h2. Related Resources
* [Apache Geode 2.0 Release
Notes|https://github.com/apache/geode/releases/tag/rel%2Fv2.0.0]
* [Geode Native 2.0 Release
Notes|https://github.com/apache/geode-native/releases/tag/rel%2Fv2.0.0]
* [Geode Wire Protocol Specification|https://geode.apache.org/docs/]
* [Geode Native Documentation|https://geode.apache.org/docs/native/]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)