Skip to content

PCBC-1073: Create PHP FIT Performer - #261

Open
Matt-Woz wants to merge 1 commit into
couchbase:mainfrom
Matt-Woz:PCBC-1073
Open

Matt-Woz wants to merge 1 commit into
couchbase:mainfrom
Matt-Woz:PCBC-1073

Conversation

@Matt-Woz

@Matt-Woz Matt-Woz commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

No description provided.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Result-send failures, cancellation paths, and protocol conversion defects can hang RPCs, crash the performer, or abort capability negotiation.

7 open findings
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.

Comment thread performer/proxy/common/batcher.go
Comment thread performer/proxy/executor/location.go
Comment thread performer/proxy/performer/performer.go Outdated
Comment thread performer/proxy/performer/performer.go
Comment thread performer/proxy/common/horizontalScaleRunner.go
Comment thread performer/proxy/counter/counter.go
Comment thread performer/proxy/executor/lookupin.go

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread performer/proxy/executor/clusterconfig.go
Comment thread .github/workflows/fit-performer-image.yml
Comment thread performer/backend/src/public/index.php Outdated
Comment thread performer/proxy/performer/performer.go

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The new cross-language execution, streaming, and container pipeline need end-to-end FIT validation and final human review.

2 open findings
4 resolved since last review

🧠 Review effort: Balanced

Comment thread performer/README.md Outdated
Comment thread performer/README.md

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The Go–PHP execution bridge, stream lifecycle, and container startup need end-to-end FIT validation and final human review.

0 open findings

2 resolved since last review

🧠 Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants