Repository navigation
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Result-send failures, cancellation paths, and protocol conversion defects can hang RPCs, crash the performer, or abort capability negotiation.
7 open findings
Close stoppedCh on every batch-loop exit · New Validate pool size is positive before selection · New Invalid transaction protocol version for non-transaction performer · New Propagate cancellation and send errors to stop blocked runners · New Reject empty command lists before modulo-based execution · New Use counter value before incrementing for pool selection · New Prevent uint32 timeout overflow when converting to int32 · New
What changed in this PR
Adds a PHP FIT performer with a Go gRPC proxy, PHP SDK backend, vendored FIT protocol definitions, container packaging, and publishing workflows.
Changes:
- Implements KV, sub-document, replica, range-scan, batching, counter, and stream handling.
- Adds native and Docker build/run tooling.
- Adds performer image publication and cleanup automation.
| File | Description |
|---|---|
.dockerignore |
Excludes build artifacts. |
.gitattributes |
Excludes performer from exports. |
.github/workflows/fit-performer-image.yml |
Publishes performer images. |
.github/workflows/prune-stale-images.yml |
Prunes temporary images. |
.github/workflows/tests.yml |
Skips performer-only changes. |
.github/workflows/versions.yml |
Skips performer-only changes. |
performer/.gitignore |
Ignores generated artifacts. |
performer/Dockerfile |
Builds performer image. |
performer/README.md |
Documents performer usage. |
performer/run-native.sh |
Starts backend and proxy. |
performer/scripts/update-protobuf.sh |
Refreshes protocol definitions. |
performer/backend/src/composer.json |
Configures backend autoloading. |
performer/backend/src/lib/cluster.php |
Maps cluster configuration. |
performer/backend/src/lib/content.php |
Converts content payloads. |
performer/backend/src/lib/errors.php |
Serializes SDK exceptions. |
performer/backend/src/lib/options.php |
Maps operation options. |
performer/backend/src/lib/scan.php |
Implements scan conversion. |
performer/backend/src/lib/subdoc.php |
Implements sub-document conversion. |
performer/backend/src/public/index.php |
Routes backend operations. |
performer/proxy/Makefile |
Generates Go protobuf code. |
performer/proxy/go.mod |
Defines Go dependencies. |
performer/proxy/go.sum |
Locks Go dependencies. |
performer/proxy/main.go |
Starts the gRPC proxy. |
performer/proxy/common/batcher.go |
Batches streamed results. |
performer/proxy/common/bounds.go |
Implements workload bounds. |
performer/proxy/common/horizontalScaleRunner.go |
Runs concurrent workloads. |
performer/proxy/connections/registry.go |
Tracks connections. |
performer/proxy/counter/counter.go |
Implements shared counters. |
performer/proxy/executor/cas.go |
Converts CAS values. |
performer/proxy/executor/clusterconfig.go |
Converts cluster configuration. |
performer/proxy/executor/content.go |
Converts content values. |
performer/proxy/executor/exceptions.go |
Maps SDK exceptions. |
performer/proxy/executor/executor.go |
Dispatches FIT operations. |
performer/proxy/executor/location.go |
Resolves document locations. |
performer/proxy/executor/lookupin.go |
Converts lookup-in operations. |
performer/proxy/executor/mutatein.go |
Converts mutate-in operations. |
performer/proxy/executor/options.go |
Converts KV options. |
performer/proxy/executor/results.go |
Converts SDK results. |
performer/proxy/executor/scan.go |
Converts scan requests/results. |
performer/proxy/executor/stream.go |
Implements stream lifecycle. |
performer/proxy/performer/performer.go |
Implements performer RPCs. |
performer/proxy/phpbackend/client.go |
Calls the PHP backend. |
performer/proxy/phpbackend/contract.go |
Defines the JSON contract. |
performer/proxy/sender/sender.go |
Defines result sending. |
performer/proxy/streams/stream.go |
Defines stream interfaces. |
performer/proxy/streams/streamOwner.go |
Tracks active streams. |
performer/proto/operational/README.md |
Documents FIT schemas. |
performer/proto/operational/hooks.transactions.proto |
Defines transaction hooks. |
performer/proto/operational/meta.workload.proto |
Defines meta workloads. |
performer/proto/operational/metrics.top_level.proto |
Defines metrics results. |
performer/proto/operational/observability.config.proto |
Defines observability configuration. |
performer/proto/operational/observability.top.proto |
Defines observability RPC data. |
performer/proto/operational/performer.caps.proto |
Defines performer capabilities. |
performer/proto/operational/performer.proto |
Defines performer services. |
performer/proto/operational/run.config.proto |
Defines run configuration. |
performer/proto/operational/run.top_level.proto |
Defines run requests/results. |
performer/proto/operational/run.workloads.proto |
Defines workload grouping. |
performer/proto/operational/sdk.bucket.collection_manager.proto |
Defines collection management. |
performer/proto/operational/sdk.caps.proto |
Defines SDK capabilities. |
performer/proto/operational/sdk.circuit_breaker.config.proto |
Defines circuit-breaker configuration. |
performer/proto/operational/sdk.cluster.bucket_manager.proto |
Defines bucket management. |
performer/proto/operational/sdk.cluster.eventing_function_manager.proto |
Defines cluster eventing management. |
performer/proto/operational/sdk.cluster.query.index_manager.proto |
Defines cluster query indexes. |
performer/proto/operational/sdk.cluster.search.index_manager.proto |
Defines cluster search indexes. |
performer/proto/operational/sdk.cluster.wait_until_ready.proto |
Defines readiness requests. |
performer/proto/operational/sdk.collection.query.index_manager.proto |
Defines collection query indexes. |
performer/proto/operational/sdk.kv.binary.commands.proto |
Defines binary KV commands. |
performer/proto/operational/sdk.kv.binary.options.proto |
Defines binary KV options. |
performer/proto/operational/sdk.kv.commands.proto |
Defines KV commands. |
performer/proto/operational/sdk.kv.lookup_in.proto |
Defines lookup-in operations. |
performer/proto/operational/sdk.kv.mutate_in.proto |
Defines mutate-in operations. |
performer/proto/operational/sdk.kv.options.proto |
Defines KV options. |
performer/proto/operational/sdk.kv.rangescan.top_level.proto |
Defines range scans. |
performer/proto/operational/sdk.kv.replicas.proto |
Defines replica selection. |
performer/proto/operational/sdk.query.index_manager.options.proto |
Defines query-index options. |
performer/proto/operational/sdk.query.index_manager.proto |
Defines query-index commands. |
performer/proto/operational/sdk.query.proto |
Defines query operations. |
performer/proto/operational/sdk.scope.eventing_function_manager.proto |
Defines scoped eventing management. |
performer/proto/operational/sdk.scope.search.index_manager.proto |
Defines scoped search indexes. |
performer/proto/operational/sdk.search.index_manager.proto |
Defines shared search indexes. |
performer/proto/operational/sdk.search.proto |
Defines search operations. |
performer/proto/operational/sdk.workload.proto |
Defines SDK workloads. |
performer/proto/operational/shared.basic.proto |
Defines shared primitives. |
performer/proto/operational/shared.bounds.proto |
Defines workload bounds. |
performer/proto/operational/shared.cluster.proto |
Defines cluster configuration. |
performer/proto/operational/shared.collection.proto |
Defines collection locations. |
performer/proto/operational/shared.content.proto |
Defines content representations. |
performer/proto/operational/shared.doc_location.proto |
Defines document selection. |
performer/proto/operational/shared.echo.proto |
Defines echo messages. |
performer/proto/operational/shared.exceptions.proto |
Defines SDK exceptions. |
performer/proto/operational/shared.latch.proto |
Defines transaction latches. |
performer/proto/operational/shared.transaction_config.proto |
Defines transaction configuration. |
performer/proto/operational/shared.transcoders.proto |
Defines transcoders. |
performer/proto/operational/streams.top_level.proto |
Defines stream lifecycle. |
performer/proto/operational/transactions.basic.proto |
Defines transaction primitives. |
performer/proto/operational/transactions.cleanup.proto |
Defines transaction cleanup. |
performer/proto/operational/transactions.client_record.proto |
Defines client records. |
performer/proto/operational/transactions.commands.proto |
Defines transaction commands. |
performer/proto/operational/transactions.extensions.proto |
Defines transaction capabilities. |
performer/proto/operational/transactions.legacy.proto |
Defines legacy transaction APIs. |
performer/proto/operational/transactions.options.proto |
Defines transaction options. |
performer/proto/operational/transactions.performer.proto |
Defines transaction performer APIs. |
performer/proto/operational/transactions.workload.proto |
Defines transaction workloads. |
performer/proto/columnar/columnar.caps.proto |
Defines Columnar capabilities. |
performer/proto/columnar/columnar.cluster_management.proto |
Defines Columnar connections. |
performer/proto/columnar/columnar.errors.proto |
Defines Columnar errors. |
performer/proto/columnar/columnar.execution_context.proto |
Defines execution contexts. |
performer/proto/columnar/columnar.metadata.proto |
Defines response metadata. |
performer/proto/columnar/columnar.query.proto |
Defines Columnar queries. |
performer/proto/columnar/columnar.result.proto |
Defines Columnar results. |
performer/proto/columnar/columnar.serialization.proto |
Defines Columnar serialization. |
performer/proto/columnar/columnar.services.proto |
Defines Columnar services. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🟡 Changes recommended
Persistent cache reuse can bypass requested TLS settings, capabilities are over-advertised, timing is inaccurate, and performer pull requests lack build validation.
4 open findings
7 resolved since last review
Propagate cancellation and send errors to stop blocked runners Invalid transaction protocol version for non-transaction performer Validate pool size is positive before selection Close stoppedCh on every batch-loop exit Prevent uint32 timeout overflow when converting to int32 Use counter value before incrementing for pool selection Reject empty command lists before modulo-based execution
🧠 Review effort: Balanced
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



No description provided.