Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
75a2bcd
add TwoPhaseCommit class to for Ensemble tandem writes
jtnelson Sep 20, 2021
1d139d4
update
jtnelson Sep 20, 2021
d885be4
Merge branch 'develop' into feature/distributed
jtnelson Aug 13, 2022
8f99e4b
add ensemble dependency
jtnelson Aug 13, 2022
13654c3
implement distributed atomic operation methods
jtnelson Aug 13, 2022
bee4c82
messy WIP
jtnelson Aug 14, 2022
0ff5802
formatting
jtnelson Aug 14, 2022
ef6811c
Merge branch 'develop' into feature/distributed
jtnelson Sep 24, 2022
f02954b
rename doCommit to apply
jtnelson Sep 24, 2022
f27c8d0
Separate out atomic operation 2pc logic into a serparte methods
jtnelson Sep 24, 2022
a9f5643
rename doCommit to apply
jtnelson Sep 24, 2022
a8deef2
Separate out atomic operation 2pc logic into a serparte methods
jtnelson Sep 24, 2022
0f48201
a few changes to atomic operations implicit 2pc
jtnelson Sep 24, 2022
834ecf6
cleanup?
jtnelson Sep 25, 2022
9b18913
sort
jtnelson Sep 25, 2022
22b5907
Merge branch 'feature/atomic-operation-2pc' into feature/distributed
jtnelson Sep 25, 2022
caaf63b
Merge branch 'develop' into feature/distributed
jtnelson Sep 25, 2022
2320ee1
WIP: some shit that probably doesn't work
jtnelson Sep 25, 2022
d27ab95
add annotation
jtnelson Sep 26, 2022
6d06bac
add spec code for initing the cluster when concourse starts. Might no…
jtnelson Sep 26, 2022
0d39f9d
upgrade to accent4j 1.13.1
jtnelson Oct 1, 2022
3f55103
add replication factor to config
jtnelson Oct 5, 2022
7df1f79
check that cluster is not null before trying to replicate the engine
jtnelson Oct 5, 2022
6676da1
Engine can't be final?
jtnelson Oct 5, 2022
ed59942
update config fetcher...
jtnelson Oct 5, 2022
0f9175e
Merge branch 'develop' into feature/distributed
jtnelson Oct 9, 2022
1591361
formatting
jtnelson Oct 9, 2022
2538b4c
improve cluster config reading
jtnelson Oct 9, 2022
4cb30f2
checkpoint
jtnelson Oct 30, 2022
7a8d27c
Merge branch 'develop' into feature/distributed
jtnelson Apr 24, 2023
8f41d46
formatting
jtnelson Apr 24, 2023
6ce7667
update config key
jtnelson Apr 24, 2023
e33bf95
load the Engine for the default environment after the cluster is defined
jtnelson Apr 26, 2023
41f3177
delegate toString for ManagedConcourseServer client
jtnelson Apr 27, 2023
0040d9a
enable remote debugging for the nodes in a ManagedConcourseCluster
jtnelson Apr 27, 2023
2008669
Add logging two TwoPhaseCommit stages
jtnelson Apr 27, 2023
ff9ed05
make Comparators returned from Comparators.java serializable
jtnelson Apr 27, 2023
c8910d4
maybe temp change
jtnelson Apr 27, 2023
8a1fbc1
setup the unit test
jtnelson Apr 27, 2023
f8452e5
fix formatting
jtnelson Apr 27, 2023
1603b49
Intercept Ensemble logging
jtnelson May 2, 2023
2d92b7f
manage TwoPhaseCommit instances separately instead of using LocalProc…
jtnelson May 2, 2023
074eedc
Add test for atomic operations
jtnelson May 3, 2023
4d229b9
checkpoint commit
jtnelson Apr 16, 2024
826b0df
Merge branch 'develop' into feature/distributed
jtnelson Apr 16, 2024
6a39a81
update copyright year to 2024
jtnelson Apr 16, 2024
9b29940
merge develop
jtnelson Feb 18, 2025
c5e4fa3
fix formatting
jtnelson Feb 18, 2025
5652ee6
Merge branch 'develop' into feature/distributed
jtnelson Feb 22, 2025
3bec2d3
remove whitespace
jtnelson Feb 22, 2025
96aabc0
fix bug that caused distributed removes to actually be adds
jtnelson Feb 23, 2025
4db5f4a
random print statements to debug test
jtnelson Feb 23, 2025
bb6384b
Add script to start a local cluster for debugging purposes
jtnelson Feb 23, 2025
a45815a
improve the start cluster script
jtnelson Feb 23, 2025
7de26c9
fix bug when installer directory isn't there
jtnelson Feb 24, 2025
299fca8
Remove manual override of add/remove in TwoPhaseCommit since the Ense…
jtnelson Feb 24, 2025
f59bc0f
display the summary table
jtnelson Feb 24, 2025
f53d3dd
Fix bug where Writes didn't have the same timestamp and had errors on…
jtnelson Feb 24, 2025
dbd80f3
Centralize Ensemble setup in one class and spec out some Gossip
jtnelson Feb 25, 2025
4db1412
fix a config reading bug
jtnelson Feb 25, 2025
6e5b230
Fix some bugs that occurred due to some internal types not being seri…
jtnelson Feb 25, 2025
2f19523
fix formatting
jtnelson Feb 25, 2025
11b5928
add missing class
jtnelson Feb 25, 2025
9273b2c
update changelog
jtnelson Feb 25, 2025
73fa32e
update README
jtnelson Feb 25, 2025
971fc55
enable gossip for an enging starting
jtnelson Feb 27, 2025
0304a17
doc update
jtnelson Feb 27, 2025
5a10000
Setup Distributed time handling and overall time refactors for clarit…
jtnelson Mar 8, 2025
ecc360a
Merge branch 'feature/distributed' of github.com:cinchapi/concourse i…
jtnelson Mar 8, 2025
59d40ea
add isReady checking method to ManagedConcourseServer
jtnelson Mar 8, 2025
c35ca3c
start test cluster and wait until all nodes are ready before proceeding
jtnelson Mar 8, 2025
b287fa0
checkpoint commit
jtnelson Mar 22, 2025
15a3530
fix formatting
jtnelson Mar 22, 2025
db0756c
Merge branch 'develop' into feature/distributed
jtnelson Apr 7, 2025
2c5572a
Merge branch 'develop' into feature/distributed
jtnelson May 4, 2025
f35b9ba
Merge branch 'develop' into feature/distributed
jtnelson May 15, 2025
69e7d0b
add reducer to getAllRecords method
jtnelson Jun 9, 2025
a69f4bc
fix up README
jtnelson Jun 9, 2025
0da2a80
fix typo
jtnelson Jun 9, 2025
6d2925c
fix a bug in the way maps are translated in managed concourse server
jtnelson Jun 9, 2025
87de948
add more unit tests
jtnelson Jun 9, 2025
e7b8509
checkpoint
jtnelson Jun 15, 2025
6b6c05c
fix atomic operations
jtnelson Jun 15, 2025
13e32d2
update javadoc
jtnelson Sep 19, 2025
e114dcb
add some indentation
jtnelson Sep 19, 2025
e08dbf4
add distributed find ccl test
jtnelson Sep 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@

#### Version 0.12.0 (TBD)

##### Distributed Concourse (ALPHA)
* **Added support for running Concourse as a distributed cluster.** This ALPHA release allows Concourse to operate across multiple nodes while maintaining strong consistency guarantees.
* Distributed Concourse operates as a CP system with optimistic availability, meaning it prioritizes data consistency while maximizing availability when possible.
* Each node in the cluster operates as a peer - there is no single leader, allowing clients to connect to any node to perform operations.
* Distributed deployment can be enabled by configuring the new `cluster` settings in your configuration file:
* `cluster.nodes`: A list of `host:port` entries for each node in the cluster
* `cluster.replication_factor`: Specifies the minimum number of nodes that should receive a copy of each piece of data (defaults to n/2 + 1, where n is the number of nodes)
* **IMPORTANT**: This is an ALPHA release with several limitations:
* Cannot convert an existing single-node deployment with data into a distributed cluster
* Cannot have nodes with different configurations within the same cluster
* Cannot have nodes running different Concourse versions
* Cannot add or remove nodes from an existing cluster dynamically
* Not recommended for production systems or mission-critical data
* The focus of this initial implementation is on core correctness of the distributed system protocol, data routing, and consistency - consider it a proof of concept at this stage.

##### Batch Transporter for Improved Automatic Indexing

We've introduced a new mechanism to control how Concourse Server transports data from the Buffer to the Database, significantly improving system throughput and responsiveness:
Expand Down
35 changes: 32 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,13 @@ select(keys=["name", "team"], criteria="age bw 22 29")
###### You can even query data from the past without doing any extra work.
```groovy
// Return data from 04/2009 from records that match now
get(key="age", record=durant, time=time("04/2009"))
get(key="age", record=durant, time=time("04/2009"))

// Return records that matched in 2011
find("team = Chicago Bulls at 2011")
find("team = Chicago Bulls at 2011")

// Return data from two years ago from records that match now
select(criteria="age > 25 and team != Chicago Bulls", time=time("two years ago"))
select(criteria="age > 25 and team != Chicago Bulls", time=time("two years ago"))
```
###### It is very easy to analyze how data has changed over time and revert to previous states.
```groovy
Expand All @@ -133,6 +133,35 @@ stage({
```
You can find more examples in the [examples](examples) directory. More information is also available in the [Concourse Guide](https://docs.cinchapi.com/concourse).

## Distributed Concourse

Concourse can operate as a distributed system, allowing you to run a cluster of Concourse nodes that work together to provide improved fault tolerance and reliability.

### Key Features

* **Peer-to-peer architecture**: Every node in a Concourse cluster is a peer - there is no designated leader. Clients can connect to any node to perform operations.
* **Strong consistency**: Distributed Concourse is a CP system that prioritizes data consistency while maximizing availability when possible through optimistic availability techniques.
* **Simple configuration**: Enable distribution by providing cluster information in your configuration:
```yaml
cluster:
nodes:
- host1:1717
- host2:1717
- host3:1717
replication_factor: 2 # Defaults to n/2+1 if not specified
```

### Developer Utilities

For development and testing, you can use the included utility script to quickly spin up a local cluster:

```bash
# Start a 3-node cluster running on ports 1717, 1718, and 1719
./utils/start-cluster.sh -n 1717 -n 1718 -n 1719
```

This creates a fully functional Concourse cluster on your local machine, perfect for testing distributed features or simulating various cluster scenarios during development.

## Motivation
Whether you use SQL or NoSQL, it's hard to get real-time insight into your mission critical data because most systems are only optimized for either transactions or analytics, not both. As a result, end-to-end data management requires complex data pipelining, which slows down development, complicates infrastructure and increases costs.

Expand Down
Loading