Skip to content

FeatureService: add attachment RPCs + time-filter/having query facets for gRPC GP parity #43

Description

@mikemcdougall

Summary

The honua.v1.FeatureService proto exposes only QueryFeatures,
QueryFeaturesStream, and ApplyEdits. It has no attachment RPCs and the
QueryFeaturesRequest message has no time-filter field and no
grouped-statistics having field
. As a result, the .NET SDK's gRPC client —
the workhorse feature transport — cannot serve media-bearing or
temporal/statistical geoprocessing (GP) operations natively and throws
NotSupportedException for:

  • ListAttachments / DownloadAttachment / AddAttachment /
    UpdateAttachment / DeleteAttachment
  • a provider-neutral time filter on a query
  • a grouped-statistics having clause on a query

GeoServices FeatureServer (REST) supports all of these, so the SDK now ships an
interim fix (honua-sdk-dotnet PR — feat/gp-attachments-grpc-parity): a unified
IHonuaFeatureGateway routes attachments and time/having queries to the
GeoServices client even when features stream over gRPC, plus per-client
FeatureQueryCapabilities flags (SupportsTimeFilter/SupportsHaving/...).
That removes the runtime throw for GP tools but means media + temporal/summary
work falls back to REST rather than going over the gRPC channel.

Long-term fix (this repo — proto source of truth)

To reach native gRPC parity with the GeoServices surface and Esri SDK feature
tools:

  1. Attachment RPCs on FeatureService: ListAttachments,
    DownloadAttachment (server-stream for large media), AddAttachment
    (client-stream), UpdateAttachment, DeleteAttachment, with request/response
    messages mirroring the GeoServices attachment contract
    (parent object id, attachment id, global id, name, content type, size,
    keywords, bytes/stream).
  2. Time filter on QueryFeaturesRequest: a TimeFilter message
    (instant or start/end interval + a time relation) matching arcpy's
    time-aware queries and the SDK's FeatureTimeFilter.
  3. having field on QueryFeaturesRequest for grouped statistics, matching
    the SDK's FeatureQueryRequest.Having and the GeoServices having parameter.

Once the proto lands, the server implements the RPCs/fields and the SDK gRPC
client implements the five attachment methods + the two query facets, flips its
capability flags to true, and the gateway routing becomes a transport
optimization rather than a correctness requirement.

Links

  • SDK assessment gap: ATTACHMENTS + gRPC-query parity for media-bearing and
    temporal/statistical GP.
  • SDK interim PR: honua-sdk-dotnet feat/gp-attachments-grpc-parity.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/grpcProtocol repo, protobuf schema, generated clientsenhancementNew feature or improvementpriority/P2High

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions