blob: 71076d3c210267fa53983e121c025cf1fb9e1789 [file] [view]
Most of the functionality of Geode is implemented in the subproject gemfire-core.
There, under com/gemstone/gemfire you will find an array of packages that
hold the public API and also the implementation of those APIs.
Here are the main architectural components:
- storage (in memory and on disk)
- distribution engine (peer to peer messaging)
- replication messages and algorithms
- clustering service
- query engine
- transaction service
- distributed lock service
- function execution service
- client/server communication and subscriptions
Here are some good starting areas for each component:
* **Storage: Region implementation**: `internal/cache`
Notable classes are `GemFireCacheImpl`, `LocalRegion`, `DistributedRegion`,
`AbstractRegionMap`, and `AbstractRegionEntry`.
For partitioned regions start with `PartitionRegion`, `BucketRegion`,
`PartitionedRegionDataStore` and `PartitionedRegionHelper`.
* **Storage: Persistence**: `internal/cache` and `internal/cache/persistence`
Start with `DiskStoreImpl` and `Oplog`.
* **Replication Messages**: `internal/cache`
Replication is primarly implemented in messaging classes in this
package. There are lots of messaging classes here, such as
`DistributedCacheOperation` & subclasses,
`RemoteOperationMessage` & subclasses, `PartitionMessage` & subclasses,
`SearchLoadAndWriteProcessor`, `GetInitialImageOperation`
and `StateFlushOperation`.
Also look in `CacheDistributionAdvisor` and `RegionAdvisor`. These hold
profiles of peers and are used to determine who should receive replication
messages.
* **Clustering Service**: `distributed/internal`
Notable classes in these packages for message distribution are
`InternalDistributedSystem`, `DistribuitonManager`, `DistributionMessage`,
`ReplyProcessor21`, `JGroupMembershipManager`. All peer-to-peer messages
are implemented as subclasses of `DistributionMessage`.
* **Query Engine**: `cache/internal/query`
Start with `DefaultQueryService`.
* **Transaction Service**: `internal/cache`
The primary classes are `TXState` and `TXCommitMessage`.
* **Distributed Lock Service**: `distributed/internal/locks`
`DLockService` and `DLockGrantor` are good classes to begin with.
* **Function Execution Engine**: `cache/execute/internal`
Start with `FunctionServiceManager` and the subclasses of `AbstractExecution`.
* **Client/Server**: `cache/client/internal` and `internal/cache/tier/sockets`
`cache/client/internal` contains the client-side code. Look at `ServerRegionProxy`,
which hooks into `LocalRegion` (in the `internal/cache` package) to turn it
into a client-side `Region`. Classes ending with `Op` perform the actual
messaging interaction with servers using the class `OpExecutorImpl`.
Subscription feeds are received and handled by `CacheClientUpdater`.
On the server side the classes in `internal/cache/tier/sockets` come into
play. `AcceptorImpl` accepts connections from clients and `ServerConnection`
threads handle individual requests. `CacheClientProxy` sends subscription
messages to clients. `CacheClientNotifier` receives events from the `Cache`
and hands them to the appropriate proxies.