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. 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)

...

API interface/classes: ?

Required changes: ?

Logging

Package: internal.logging

API interface/classes: ?

Required changes: ?

Locator

Package: distributed.internal.tcpserver

...

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

...

Required changes: ? Move rebalancing related classes to the region package?

Serialization

Package:internal.serialization (new package)

API interfaces/classes: InternalDataSerializer (interface?), DataSerializableFixedID

Required Changes: ?

Server

Package:internal.cache.tier.sockets (change this?)

...

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.

...