...
Here's a start at listing the proposed modules and their dependencies. These are proposed dependencies, their ; there currently there many cyclical dependencies. Part of the effort here will be to break required changes will breaking some of these cyclic dependencies by replacing hard coded references to other modules with plugins and callbacks that are part of the well defined API for each module.
PlantUML |
---|
@startuml
title Geode Package Dependency Graph
hide members
hide circle
@startuml
title Geode Package Dependency Graph
hide members
hide circle
package Core {
}
Extensions-->Core
Rest-->Management
Gfsh-->Management
Management-->Core
Core-->BasePackages
class Management
package Extensions {
class Redis
class MemcacheD
class SpringDataGemfire
class HttpSession
class Hibernate
class Spark
class Lucene
}
package BasePackages {
class Statistics
class Logging
class Serialization
class Events
class DUnit
}
@enduml
|
PlantUML |
---|
@startuml title Geode Core Package Dependency Graph hide members hide circle class WAN CacheServer-->Messaging Client-->Locator ClientSubscriptions-->Regions ClientSubscriptions-->CacheServer ClientSubscriptions-->Client DLock-->Messaging FunctionService-->Messaging FunctionService-->Regions PDX-->Messaging PDX-->Regions Persistence-->Versioning Querying -> Messaging Querying-->Regions Querying-->Indexing Messaging-->Locator Regions-->CacheServer Regions-->Client Regions-->DLock Regions-->Messaging Regions-->OffHeap Regions-->Persistence Regions-->ResourceManager Regions-->Eviction Regions-->Versioning Snapshots-->Regions Snapshots-->FunctionService ResourceManager-->OffHeap WAN-->CacheServer WAN-->Client WAN-->Messaging WAN-->Regions WAN-->Locator @enduml |
...
API interface/classes: InternalDistributedLockService (new interface)
Required changes: ?
Dunit
Package:dunit
API interface/classes: DistributedTestCase,CacheTestCase
Required changes: This code should be moved into it's own gradle module.
Events
Package: internal.cache.event (new package)
...
This is still the big ball of string that needs to get untangled further. We need to split out expiration, conflict detection, GII, transactions, partitioning, etc.
ResourceManager
Package: internal.cache.control
...
Probably not every package list here should be it's own gradle module. How will will enforce the dependencies and the use of the package interfaces.?
Package naming scheme
We still have a mix of two different conventions for where to put internal classes. Some things are in gemfire.internal.cache, and some things are in packages like cache.asyncqueue.internal. We should settle on one convention.
...