Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Here's a start at listing the proposed modules and their dependencies. This is not the current state of these modules because currently there are several cyclical dependencies (eg Persistence dependencies on Regions, regions depend on persistence). Part of the effort here will be to break these cyclic dependencies by replacing hardcoded references to other modules with plugins and callbacks that are part of the well defined API for each module.

 

PlantUML
@startuml

@startuml
title Geode Package Dependency Graph
hide members
hide circle
class WAN
WAN --> CacheServer
WAN --> Client
WAN --> Regions
Regions --> CacheServer
Regions --> Client
Regions-->Persistence
Regions-->Statistics
Advisors-->Messaging
Regions-->Advisors
Querying-->Regions
Regions-->Messaging
FunctionService --> Regions
FunctionService --> Messaging
Messaging --> Serialization
PDX --> Serialization
PDX --> Messaging
Regions--> Serialization
Querying--> Serialization
WAN --> Serialization
WAN --> Messaging
Querying -> Messaging
FunctionService --> Serialization
PDX --> Regions
Regions-->OffHeap
Persistence-->Serialization
Advisors-->Serialization
ResourceManager-->Serialization
ResourceManager-->OffHeap
Regions-->ResourceManager
ResourceManager-->Advisors
WAN --> Advisors
Querying --> Advisors
FunctionService -->Advisors
@enduml

 

 

Below is a high level view of the interfaces for each module and some of the changes that need to be made to get to this point.

...

Messaging

Package:distributed.interna, distributed.internal.advisor

API interfaces/classes: InternalDistributedMember, DM, InternalDistributedSystem, MembershipListener, DistributionAdvisor, DistributionAdvisee

Required Changes: InternalDistributedMember and InternalDistributedSystem should be interfaces, not concrete classes. They should only have the methods that are required by the rest of the system. The concrete classes like DistributionManager, the old InternalDistributedSystem class, etc. should not be referenced outside this package.

TBD - The proposal here is that membership is another module that is hidden behind the messaging layer as far as the rest of the system is concerned. The membership layer has it's own interface that should hide its internals from the messaging layer. Advisors are lumped in here to reduce the complexity of the high level graph.

PlantUML
@startuml
title Messaging Packages
hide members
hide circle
class Messaging
package OtherComponents {
  class Regions
  class WAN
}
Advisors --> Messaging
Messaging --> Membership
OtherComponents --> Advisors
OtherComponents --> Messaging
@enduml
 

Statistics

Package:internal.statistics

...

Required changes: Move into a separate package. Pull the code out of InternalDistributedSystem (it currently implements StatisticsFactory) into a separate class.

Advisors

Package: distributed.internal.advisor

API interfaces/classes: DistributionAdvisor, DistributionAdvisee

Persistence

Package: internal.cache.persistence

...