Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
46c69d8
ci: disable CI workflow during MVP
May 8, 2026
d56c3a2
docs: add CONTRIBUTING.md (develop-centric workflow)
May 8, 2026
c65c231
docs: translate CLAUDE.md and README.md to English
May 8, 2026
314e19b
chore: unblock local build for MVP development
May 8, 2026
3d9a0e4
chore: organise solution with src / test / sample folders
May 8, 2026
5fba637
feat(phase-1): frame-codec primitives and TcrPart record
May 8, 2026
1fc3942
feat(phase-1): TcrMessage + frame-codec tests; drop FluentAssertions
May 8, 2026
757349b
Merge pull request #7 from TomiCheng/feat/phase-1-frame-codec
TomiCheng May 8, 2026
3f8b4b6
feat(phase-2): implement BCL-defined primitives on big-endian reader/…
May 8, 2026
03b2204
feat(phase-2): TcrConnection transport + handshake walking skeleton
May 9, 2026
7f480e1
chore(test): add Xunit.DependencyInjection package
May 9, 2026
def5098
feat(phase-2): wire ConflateEvents from options into handshake step 7
May 9, 2026
e834cdb
feat(phase-2): handshake fixes + PingAsync operation + DI extension
May 9, 2026
f117dd0
test(phase-2): integration test against Testcontainers Geode
May 9, 2026
cefaebd
chore(phase-2): use RandomNumberGenerator for membership uniqueTag
May 9, 2026
45e4a3a
test(phase-2): structural tests for ClientProxyMembershipIdBuilder
May 9, 2026
ecb46dc
Merge pull request #8 from TomiCheng/feat/phase-2-ping
TomiCheng May 9, 2026
52951ee
refactor(phase-3): inject IBufferWriter<byte> into BigEndianBinaryWriter
May 9, 2026
8626f1b
feat(phase-3): scaffold BuildPut + widen TcrPart.IsObject to byte
May 9, 2026
b93aa9f
refactor(phase-3): extract Protocol/DSCode.cs
May 9, 2026
7542a1a
refactor(phase-3): consolidate Build* into TcrMessageBuilder + TcrPar…
May 9, 2026
fbfd4d7
test(phase-3): TcrMessageBuilder.Put unit tests + split into partial …
May 9, 2026
07fa341
feat(phase-3): TcrMessageBuilder.Get + unit tests
May 9, 2026
24e7eef
feat(phase-3): integration test scaffold + ReadArrayLen / ReadBytes
May 9, 2026
1db1c73
Merge branch 'feat/phase-3-put-get' into develop
May 9, 2026
c471325
feat(options): mirror full cppcache SystemProperties surface
May 9, 2026
4b4a649
docs(claude.md): drop 12-phase roadmap; add top-down principle
May 9, 2026
a9d501c
feat(options): mirror cache.xml schema as CacheXmlOptions tree
May 9, 2026
d021aaf
feat(di): add Action<Options> + parameterless AddGeodeClient overloads
May 9, 2026
fcf3ef0
docs: add Scope.md cppcache header audit + reference from CLAUDE.md
May 9, 2026
6af9fca
feat(di): IGeodeCache(Factory) + multi-cluster AddGeodeClient overloads
May 9, 2026
2f52ec4
test(di): unit tests for AddGeodeClient registration matrix
May 9, 2026
ba9169c
docs: reference clicache as .NET API-shape source
May 9, 2026
23e077b
feat(cache): lazy init via IGeodeCache.EnsureInitializedAsync
May 9, 2026
5ef1027
feat(cache): factory disposal + per-cache DI scope
May 9, 2026
9bc8a90
feat(api): add IRegion / IQueryService / IQuery interface shells
May 10, 2026
9954ebb
docs(claude.md): rewrite — phase plan + naming + English
May 10, 2026
54a11ce
docs: add PROGRESS.md as living implementation tracker
May 10, 2026
5158e37
docs(options): adopt "mirror then prune" config policy + cppcache notes
May 10, 2026
7b0fb00
refactor(options): split CacheXml nested types into one-type-per-file
May 10, 2026
853e2ba
docs(porting): add PORTING.md class mapping + three-bucket triage rul…
May 10, 2026
233a460
chore(sln): VS auto-update — register Scope.md + add SolutionGuid
May 10, 2026
1570ea8
refactor(api): mirror cppcache three-tier RegionService → GeodeCache …
May 10, 2026
f702133
feat(cache): mirror cppcache CacheImpl members + DI-injected PoolManager
May 10, 2026
6dd124a
feat(internal): TcrEndpoint + ThinClientBaseDM shells, refocus Phase …
May 10, 2026
7131ce2
refactor(cache): swap Lazy<Task>(EAP) for SemaphoreSlim-gated init
May 11, 2026
20a53fc
feat(cache): InitializeCoreAsync wires steps 1-5; ThinClientPoolDM ct…
May 11, 2026
ec9809d
feat(pool): ThinClientPoolDM lifecycle wired — init / conn-management…
May 11, 2026
6051f62
feat(pool): Phase 1.1 connect + handshake walking skeleton runs end-t…
May 11, 2026
843d52b
refactor(di): stop registering TcrConnection as a service; add MinCon…
May 11, 2026
07820de
feat(pool): wire ping loop end-to-end (PoolDM + TcrEndpoint)
May 11, 2026
bc6b909
test(pool): integration test for end-to-end ping loop
May 11, 2026
721c211
feat(pool): polite shutdown — send CloseConnection(18) on destroy
May 11, 2026
5cf15af
feat(di): options validation + per-cache scope context (Phase 1.1 close)
May 11, 2026
74968c2
feat(region): GetRegion entry points + ThinClientRegion skeleton (Pha…
May 11, 2026
c830494
feat(region): InitializeCoreAsync builds regions from CacheXml + refi…
May 11, 2026
8aeb30a
feat(serialization): ContainsKey walking-skeleton + SerializationRegi…
May 11, 2026
23f9f73
feat(region): ContainsKey end-to-end wire path (Phase 1.2)
May 11, 2026
c29a5f1
fix(pool): align ConnManageLoop / PingLoop initial delays with cppcac…
May 11, 2026
9765acc
feat(region): Put / Get / Destroy end-to-end (Phase 1.2)
May 12, 2026
442f33b
fix(membership): per-cache uniqueTag (cppcache scope parity)
May 12, 2026
7d9471f
test(region): int32 KV CRUD integration tests + Phase 1.2 progress
May 12, 2026
009cf5d
feat(serialization): Tier A scalar converters + multi-DSCode API (Pha…
May 12, 2026
02d2c9c
feat(serialization): StringDataConverter — four-DSCode dispatch (Phas…
May 12, 2026
d75dcea
feat(serialization): BytesDataConverter + fix ReadArrayLen unsigned b…
May 12, 2026
be7ccf1
feat(region): Clear + Invalidate region ops (Phase 1.3.a)
May 12, 2026
5ee9d39
feat(region): RemoveAll wire path + chunked-reply infrastructure (Pha…
May 12, 2026
d8a88f6
feat(region): Phase 1.3.b complete — RemoveAll wire path end-to-end
May 12, 2026
2854ce4
test: add server-side type verification via gfsh (B-route)
May 13, 2026
ab1d030
docs: relocate reference content from CLAUDE.md to PORTING.md / PROGR…
May 13, 2026
feff1ef
feat: add Tier B-1 primitive array converters (DSCodes 26/27/47-51/64)
May 13, 2026
d13b052
docs: log Tier B-1 primitive arrays + B-route verification + doc reor…
May 13, 2026
0671ae1
feat: add ObjectArray converter (DSCode 52)
May 13, 2026
9235ffa
feat: add ListDataConverter (DSCode 65) + TypedResultAdapter for ILis…
May 13, 2026
937b70a
docs: log IList<T> serialization landing in PROGRESS.md
May 13, 2026
db8756a
feat: add HashSet/HashMap/LinkedList/Stack converters (DSCodes 66/67/…
May 13, 2026
620cbcd
docs: mark Tier B-2 collection set done (minus Vector / LinkedHashSet)
May 13, 2026
c096ff5
docs: add DSCode coverage catalogue to PORTING.md
May 13, 2026
fadf7de
feat(security): MaxDepth limit on SerializationRegistry recursive dis…
May 13, 2026
8470c83
feat(security): MaxArrayLength / MaxBytesLength / MaxStringLength limits
May 13, 2026
f54657e
feat: Phase 1.3.c — PutAll(56) + GetAll70(100) + chunked reply decoders
May 13, 2026
669fe76
feat(di): redesign IGeodeCacheFactory + AddGeodeClient/AddGeodeFactor…
May 13, 2026
bed72d0
feat(query): Phase 1.4 介面層 + RemoteQueryService 完整 / RemoteQuery 殼
May 14, 2026
7205a07
feat(query): Phase 1.4 RemoteQuery.ExecuteCoreAsync B1-B11 + ADO.NET-…
May 15, 2026
cd9074c
feat(query): Phase 1.4 OQL end-to-end — decoder / Struct / extensions…
May 15, 2026
c3842a9
ci: revive CI with push (unit) + PR (unit + integration) gates
May 15, 2026
87c32ec
feat(query): Phase 1.4 region OQL convenience — ExistsValueAsync / Se…
May 16, 2026
2a1956c
chore: normalize line endings to CRLF on 32 sources
May 16, 2026
3d26626
refactor(options): switch options classes from DeepClone() to IClonea…
May 16, 2026
718e8cd
chore: move project notes into local .claude/, support per-user .slnx
May 16, 2026
b1324cb
chore(client): trim unused stubs + tighten IGeodeCache xmldoc
May 16, 2026
61ca0a1
refactor(options): drop CacheXml prefix + remove dead CacheFile property
May 16, 2026
0284b1a
feat(options): top-level Endpoints + default-pool synthesis
May 16, 2026
bf3f5d4
feat(locator): Phase 1.5 locator helper end-to-end (Step A-E)
May 16, 2026
d1465dd
feat(stats): PoolStatistics scaffold + locatorRequests counter
May 16, 2026
1a6ebec
feat(stats): split PoolStatistics by wire RPC; add ActivitySource
May 16, 2026
b839448
feat(stats): add PoolConnections ObservableGauge (m_poolSize)
May 16, 2026
373eb30
feat(pool): CleanStaleConnectionsAsync end-to-end
May 16, 2026
3addb74
test(pool): CleanStaleConnectionsAsync idle + load-cond paths
May 16, 2026
3232cd0
feat(pool): failover retry + recycle + cap-slot in CreatePoolConnecti…
May 17, 2026
f5aeeaa
docs: add PROGRESS.md and PORTING.md at repo root
May 17, 2026
f176263
refactor(pool): swap _opConnections from Channel<T> to LinkedList<T> …
May 17, 2026
daecac8
feat(pool): cppcache parity wave for ThinClientPoolDM lifecycle
May 17, 2026
da09217
feat(pool): endpoint cleanup + ping counters via Meter
May 18, 2026
18a162f
feat(pool): subclass split + lifecycle hardening + stats catalogue +3
May 18, 2026
2088a29
feat(pool): DM retry frame Steps A-G + send-overload merges + Phase 3…
May 18, 2026
ae69b87
chore(options): delete LogOptions + StatisticsOptions (first prune sl…
May 18, 2026
d690b99
feat(pool): per-endpoint connection cap (ConnectionPoolSize) + PROGRE…
May 18, 2026
d7f1b3d
fix(locator) + test(fixture): ordinal width + 2-locator + 3-server cl…
May 18, 2026
809daa4
refactor(layout): Internal = plain classes, Services = DI-registered
May 18, 2026
72380e3
docs(progress): refresh failover + connection-pool-cap entries
May 18, 2026
57e8c48
test(failover): kill-srv1 mid-session integration test + locator host…
May 18, 2026
ac1826b
commit
May 18, 2026
0a9124e
refactor(stats): PingTicks/PingSuccesses Counters -> Histograms
May 18, 2026
2063ea4
feat(stats): Locators + Servers ObservableGauges (catalogue #0 + #1)
May 18, 2026
2cd62c4
feat(stats): endpoint health monitoring + ConnectedServers gauge
May 18, 2026
92b0909
feat(stats): conn-queue trio (catalogue #12 ObservableGauge + #13/#14…
May 19, 2026
814c276
feat(stats): clientOps quintet (catalogue #15 + #16/#17 Histogram + #…
May 19, 2026
2fe3b67
feat(stats): ReceivedBytes Counter (catalogue #20) + revive _poolDM m…
May 19, 2026
7be777c
chore(internal): introduce empty TcrPoolEndPoint skeleton (cppcache p…
May 19, 2026
198f21a
docs(progress): split PROGRESS.md by phase; Phase 1 closed out
May 19, 2026
705fa21
feat(pdx): Phase 2.1 walking skeleton — ITypeRegistry + IPdxSerializa…
May 20, 2026
30ed75d
feat(pdx): step 2-4 — PdxLocalWriter, PdxTypeRegistry, TryWritePdx wi…
May 20, 2026
9f2430c
chore(internal): ThinClientRegion reorganization
May 20, 2026
7e396cd
refactor(wire): replace BigEndianBinaryWriter with DataOutput throughout
May 20, 2026
1d849e6
feat(pdx): async-first serialization + Step A skeleton
May 20, 2026
3b222bd
refactor(pdx): drop sync WriteObject + flesh out PdxType / registry
May 21, 2026
177f08f
feat(pdx): wire GetPdxIdForType async path with NIE leaves
May 22, 2026
26879a2
feat(pdx): wire PdxType/PdxField ToData + consolidate DecodeException…
May 22, 2026
688666e
refactor: comment out src/ and tests/ to restart implementation
May 23, 2026
fb04f96
feat(cache): walking skeleton for IGeodeCacheFactory + IGeodeCache
May 23, 2026
db311e3
feat(pool): PoolFactory + PoolAttributes builder, mirrored from cppcache
May 23, 2026
5ee729f
feat(pool): wire GeodeCache → PoolManager → PoolFactory back-pointer …
May 23, 2026
8958b78
feat(cache): lifecycle cascade — GeodeCache.DisposeAsync → PoolManage…
May 23, 2026
c7c0805
refactor(proto): rename BigEndianBinaryReader → DataInput; partial Tc…
May 23, 2026
bb320cc
feat(api): factory.Create → CreateAsync; TcrMessageBuilder + TcrPartB…
May 23, 2026
bfce25c
feat(integration): wire-level smoke + ping + locator update against r…
May 23, 2026
b587145
feat(cache): GeodeCache.GetRegion + unwrap region/query/pdx interface…
May 23, 2026
537be58
feat(region): RegionFactory + RegionShortcut API-first shells
May 23, 2026
526a59d
feat(region): RegionFactory.CreateAsync orchestration + region hierar…
May 24, 2026
18720d8
feat(serialization): unwrap DataConverter family + 29 test files
May 24, 2026
6a3bdc0
feat(region): Put / Get / ContainsKey wire ops + 25 unit + 6 integrat…
May 24, 2026
82b0403
refactor(wire): ctor-inject back-refs on TcrEndpoint + TcrConnection
May 24, 2026
1e5bb2f
feat(region): Clear / Invalidate / Remove wire ops + 24 unit + 4 inte…
May 24, 2026
8cf5256
feat(region): PutAll / RemoveAll / GetAll bulk ops + 31 unit + 4 inte…
May 24, 2026
4b91baf
feat(query): ThinClientRegion.QueryAsync + ExistsValue / SelectValue …
May 24, 2026
e2aeac4
chore(tests): prune wrapped dead tests + migrate Collection / Scalar …
May 24, 2026
2f5f4af
refactor(layout): Services/ keeps only DI-registered types
May 24, 2026
9b84756
feat(options): GeodeClientOptions callback on CreateAsync + bridge to…
May 24, 2026
f3ed727
Merge branch 'refactor' into develop
May 24, 2026
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
20 changes: 20 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Default: every text file stored and checked out as LF.
# Matches dotnet/runtime, dotnet/sdk convention.
* text=auto eol=lf

# Windows scripts that genuinely break under LF (cmd.exe parser).
*.cmd text eol=crlf
*.bat text eol=crlf

# Common binary extensions — never normalize, never diff as text.
*.dll binary
*.exe binary
*.pdb binary
*.snk binary
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.nupkg binary
*.snupkg binary
45 changes: 39 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@ name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

# Cancel superseded runs on the same ref to save runner time when
# commits land back-to-back on a branch / PR.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build-test:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -25,15 +29,44 @@ jobs:
run: dotnet build --no-restore -c Release

- name: Unit tests
run: dotnet test tests/Geode.Client.Tests/Geode.Client.Tests.csproj --no-build -c Release --logger trx --collect:"XPlat Code Coverage"
run: dotnet test tests/Geode.Client.Tests/Geode.Client.Tests.csproj --no-build -c Release --logger trx

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: unit-test-results
path: '**/*.trx'

integration-tests:
# PR-only gate. Integration tests boot a real Geode container via
# Testcontainers and are too slow to run on every push.
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Restore
run: dotnet restore

- name: Build
run: dotnet build --no-restore -c Release

- name: Integration tests
# Testcontainers boots a real Geode container; runs on Linux runner with Docker.
# GitHub-hosted Ubuntu runner ships with native Docker; Testcontainers
# works out of the box. RYUK_DISABLED is only needed for Podman on
# local dev machines — do NOT set it here.
run: dotnet test tests/Geode.Client.IntegrationTests/Geode.Client.IntegrationTests.csproj --no-build -c Release --logger trx

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
name: integration-test-results
path: '**/*.trx'
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,9 @@ Thumbs.db

## Claude Code (per-machine settings, transcripts, etc.)
.claude/

## Per-user Visual Studio solution files (mirrors geode-dotnet.sln plus personal solution items)
*.local.slnx

## Visual Studio extension cache (per-user, e.g. CodeRush / similar)
.cr/
273 changes: 0 additions & 273 deletions CLAUDE.md

This file was deleted.

Loading
Loading