GitHub Issue - SDC data-server Bug
Repository: https://github.com/sdcio/data-server/issues
Title
gNMI sync fails with Arista cEOS - "invalid message type: *gnmi.SubscribeRequest"
Labels
bug, gnmi, arista, data-server
Issue Body
Description
SDC data-server fails to sync with Arista cEOS using gNMI Subscribe Request. The error occurs with both 4.33.0F and 4.34.1F versions, and with both JSON_IETF and JSON encodings.
RunningConfig remains empty despite Target showing READY=True.
Error Message
{
"time": "2026-01-08T17:18:54Z",
"level": "ERROR",
"msg": "failed to sync target",
"datastore-name": "sdc.spine-1",
"logger": "datastore/sync/Sync",
"err": "option DataType: invalid message type: *gnmi.SubscribeRequest",
"mode": "once"
}
The error repeats every 2-3 seconds, indicating continuous retry attempts.
Environment
SDC Version:
- config-server: v0.0.54
- data-server: v0.0.66
- schema-server: integrated
Target Device:
- Vendor: Arista Networks
- OS: cEOS (containerized EOS)
- Version 1: 4.34.1F (tested)
- Version 2: 4.33.0F (tested)
- Platform: x86_64-kvm_x86_64-r0
- Image: ceos:4.33.0F and ceos:4.34.1F
Deployment:
- Kubernetes: KinD v1.32.0
- Containerlab: v0.71.1
- Network: Docker bridge (172.20.20.0/24)
Configuration
TargetConnectionProfile:
apiVersion: inv.sdcio.dev/v1alpha1
kind: TargetConnectionProfile
metadata:
name: gnmi-eos
namespace: sdc
spec:
protocol: gnmi
port: 6030
encoding: JSON_IETF
insecure: true
skipVerify: true
timeout: 30s
connectRetry: 30s
commitCandidate: candidate
includeNS: false
operationWithNS: false
preferredNetconfVersion: "1.0"
useOperationRemove: false
TargetSyncProfile:
apiVersion: inv.sdcio.dev/v1alpha1
kind: TargetSyncProfile
metadata:
name: gnmi-sync
namespace: sdc
spec:
sync:
- mode: once
paths:
- "/"
protocol: gnmi
port: 6030
buffer: 0
workers: 2
validate: true
Target Status:
$ kubectl get target spine-1 -n sdc
NAME READY REASON PROVIDER VERSION ADDRESS
spine-1 True eos.arista.sdcio.dev 4.33.0F 172.20.20.11
RunningConfig Status:
$ kubectl get runningconfig spine-1 -n sdc -o jsonpath='{.status.value}'
{} # ← Empty
Evidence: gnmic Native Test (CRITICAL)
To isolate whether the issue was in SDC or Arista, we tested gNMI Subscribe directly using gnmic v0.37.0 (OpenConfig official tool).
Test Setup:
- Tool: gnmic v0.37.0
- Target: Same Arista cEOS switch (172.20.20.11:6030)
- Credentials: admin/admin
- Subscribe mode: once (same as SDC)
- Subscribe path: "/" (same as SDC)
Results:
| Encoding |
gnmic (native) |
SDC data-server |
| JSON_IETF |
✅ SUCCESS |
❌ FAILS |
| JSON |
✅ SUCCESS |
❌ FAILS |
| PROTO |
✅ SUCCESS |
❌ N/A |
Commands Executed:
# JSON_IETF - SUCCESS
gnmic -a 172.20.20.11:6030 \
-u admin -p admin \
--insecure \
--encoding json_ietf \
subscribe --path "/" --mode once
# JSON - SUCCESS
gnmic -a 172.20.20.11:6030 \
-u admin -p admin \
--insecure \
--encoding json \
subscribe --path "/" --mode once
# PROTO - SUCCESS
gnmic -a 172.20.20.11:6030 \
-u admin -p admin \
--insecure \
--encoding proto \
subscribe --path "/" --mode once
Sample Data Received (truncated):
{
"source": "172.20.20.11:6030",
"subscription-name": "default-1767893168",
"timestamp": 1767892423366941952,
"time": "2026-01-08T17:13:43.366941952Z",
"prefix": "system/messages",
"updates": [
{
"Path": "config/severity",
"values": {
"config/severity": "DEBUG"
}
}
]
}
Paths Successfully Retrieved:
system/messages
system/ssh-server/state/counters
system/console/state/counters
arista/redundancy/management-active
system/aaa/authentication/users/user[username=admin]/state
- Hundreds of other paths (truncated for brevity)
Conclusion
This proves the issue is in SDC data-server, NOT in Arista EOS:
✅ Arista cEOS gNMI implementation works perfectly
✅ All encodings supported (JSON_IETF, JSON, PROTO)
✅ Subscribe mode "once" works correctly
✅ Path "/" returns complete data
❌ SDC data-server constructs gNMI SubscribeRequest incorrectly
❌ Error mentions "option DataType: invalid message type"
❌ gnmic does NOT send this "DataType" option and works fine
Hypothesis
The error message "option DataType: invalid message type: *gnmi.SubscribeRequest" suggests that:
- SDC is adding a custom option called "DataType" to the gNMI SubscribeRequest
- Arista EOS validates this option and rejects it as invalid
- gnmic does NOT send this option (or sends it correctly) and succeeds
gNMI Specification Reference:
According to the gNMI proto spec, SubscribeRequest should use Encoding field in SubscriptionList, not a custom "DataType" option:
message SubscriptionList {
repeated Subscription subscription = 1;
// ...
Encoding encoding = 4; // ← Standard field
}
Steps to Reproduce
- Deploy Arista cEOS 4.33.0F or 4.34.1F using containerlab
- Enable gNMI on port 6030 with admin/admin credentials
- Install SDC v0.0.54+ in Kubernetes cluster
- Create TargetConnectionProfile with encoding=JSON_IETF
- Create TargetSyncProfile with mode=once, paths=["/"]
- Create Target pointing to Arista switch
- Observe logs:
kubectl logs -n sdc config-server-XXX -c data-server
Expected Behavior:
- RunningConfig should be populated with switch state
- No errors in data-server logs
Actual Behavior:
- RunningConfig remains empty:
{}
- Error repeats every 2-3s:
"option DataType: invalid message type"
Workaround
Use gnmic directly for testing/validation:
gnmic -a <switch-ip>:6030 \
-u admin -p admin \
--insecure \
--encoding json_ietf \
subscribe --path "/" --mode once
For production, consider using Ansible with arista.eos collection until this bug is fixed.
Impact
Severity: HIGH
- ❌ Blocks ConfigSets (Phase 3) - cannot apply declarative configurations
- ❌ Blocks GitOps workflows
- ❌ RunningConfig always empty
- ❌ Affects ALL Arista cEOS versions tested (4.33.0F, 4.34.1F)
- ❌ Affects multiple encodings (JSON_IETF, JSON)
Affected Users:
- Anyone using SDC with Arista cEOS
- Anyone using SDC with Arista hardware switches (potentially)
Additional Information
Tests Performed:
- ✅ Encoding change (JSON_IETF → JSON): Did NOT resolve
- ✅ EOS version downgrade (4.34.1F → 4.33.0F): Did NOT resolve
- ✅ Schema update (using official 4.33.0F schema): Did NOT resolve
- ✅ gnmic native test: RESOLVED - proves bug is in SDC
Time Invested:
- ~12 hours of systematic troubleshooting
- Multiple hypotheses tested and ruled out
- Root cause definitively isolated to SDC data-server
Documentation:
- Complete troubleshooting process documented
- All configurations tested and validated
- Evidence collected for easy reproduction
Logs
SDC data-server Error (repeating):
{"time":"2026-01-08T17:18:54Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"}
{"time":"2026-01-08T17:18:57Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"}
{"time":"2026-01-08T17:19:00Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"}
gnmic Success (sample):
$ gnmic -a 172.20.20.11:6030 -u admin -p admin --insecure \
--encoding json_ietf subscribe --path "/" --mode once
{
"source": "172.20.20.11:6030",
"subscription-name": "default-1767893168",
"timestamp": 1767892423366941952,
"time": "2026-01-08T17:13:43.366941952Z",
"prefix": "system/messages",
"updates": [
{
"Path": "config/severity",
"values": {
"config/severity": "DEBUG"
}
}
]
}
[... hundreds more paths successfully received ...]
Suggested Fix
Investigation needed in data-server code:
- Search for where gNMI
SubscribeRequest is constructed
- Check if a custom "DataType" option is being added
- Compare with gnmic implementation (which works)
- Remove or fix the "DataType" option to match gNMI spec
Code locations to check:
# In data-server repository
grep -r "DataType" --include="*.go"
grep -r "SubscribeRequest" --include="*.go"
grep -r "SubscriptionList" --include="*.go"
Related Issues
- (Search for similar Arista/gNMI issues in sdcio repos)
References
Attachments
(When creating the actual issue, attach these files):
data-server-logs.txt - Complete logs showing repeated errors
gnmic-success-output.txt - Full gnmic output showing success
target-config.yaml - Complete Target/Profile configurations
target-status.yaml - kubectl get target -o yaml output
Contact
Available for:
- Providing additional logs/configs
- Testing patches
- Validating fixes
- Contributing PR if pointed to the right code location
Thank you for maintaining SDC! This is a great project and we're eager to see Arista support working properly.
GitHub Issue - SDC data-server Bug
Repository: https://github.com/sdcio/data-server/issues
Title
Labels
bug,gnmi,arista,data-serverIssue Body
Description
SDC data-server fails to sync with Arista cEOS using gNMI Subscribe Request. The error occurs with both 4.33.0F and 4.34.1F versions, and with both JSON_IETF and JSON encodings.
RunningConfig remains empty despite Target showing READY=True.
Error Message
{ "time": "2026-01-08T17:18:54Z", "level": "ERROR", "msg": "failed to sync target", "datastore-name": "sdc.spine-1", "logger": "datastore/sync/Sync", "err": "option DataType: invalid message type: *gnmi.SubscribeRequest", "mode": "once" }The error repeats every 2-3 seconds, indicating continuous retry attempts.
Environment
SDC Version:
Target Device:
Deployment:
Configuration
TargetConnectionProfile:
TargetSyncProfile:
Target Status:
RunningConfig Status:
Evidence: gnmic Native Test (CRITICAL)
To isolate whether the issue was in SDC or Arista, we tested gNMI Subscribe directly using gnmic v0.37.0 (OpenConfig official tool).
Test Setup:
Results:
Commands Executed:
Sample Data Received (truncated):
{ "source": "172.20.20.11:6030", "subscription-name": "default-1767893168", "timestamp": 1767892423366941952, "time": "2026-01-08T17:13:43.366941952Z", "prefix": "system/messages", "updates": [ { "Path": "config/severity", "values": { "config/severity": "DEBUG" } } ] }Paths Successfully Retrieved:
system/messagessystem/ssh-server/state/counterssystem/console/state/countersarista/redundancy/management-activesystem/aaa/authentication/users/user[username=admin]/stateConclusion
This proves the issue is in SDC data-server, NOT in Arista EOS:
✅ Arista cEOS gNMI implementation works perfectly
✅ All encodings supported (JSON_IETF, JSON, PROTO)
✅ Subscribe mode "once" works correctly
✅ Path "/" returns complete data
❌ SDC data-server constructs gNMI SubscribeRequest incorrectly
❌ Error mentions "option DataType: invalid message type"
❌ gnmic does NOT send this "DataType" option and works fine
Hypothesis
The error message
"option DataType: invalid message type: *gnmi.SubscribeRequest"suggests that:gNMI Specification Reference:
According to the gNMI proto spec, SubscribeRequest should use
Encodingfield inSubscriptionList, not a custom "DataType" option:Steps to Reproduce
kubectl logs -n sdc config-server-XXX -c data-serverExpected Behavior:
Actual Behavior:
{}"option DataType: invalid message type"Workaround
Use gnmic directly for testing/validation:
For production, consider using Ansible with
arista.eoscollection until this bug is fixed.Impact
Severity: HIGH
Affected Users:
Additional Information
Tests Performed:
Time Invested:
Documentation:
Logs
SDC data-server Error (repeating):
{"time":"2026-01-08T17:18:54Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"} {"time":"2026-01-08T17:18:57Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"} {"time":"2026-01-08T17:19:00Z","level":"ERROR","msg":"failed to sync target","datastore-name":"sdc.spine-1","logger":"datastore/sync/Sync","err":"option DataType: invalid message type: *gnmi.SubscribeRequest","mode":"once"}gnmic Success (sample):
$ gnmic -a 172.20.20.11:6030 -u admin -p admin --insecure \ --encoding json_ietf subscribe --path "/" --mode once { "source": "172.20.20.11:6030", "subscription-name": "default-1767893168", "timestamp": 1767892423366941952, "time": "2026-01-08T17:13:43.366941952Z", "prefix": "system/messages", "updates": [ { "Path": "config/severity", "values": { "config/severity": "DEBUG" } } ] } [... hundreds more paths successfully received ...]Suggested Fix
Investigation needed in data-server code:
SubscribeRequestis constructedCode locations to check:
Related Issues
References
Attachments
(When creating the actual issue, attach these files):
data-server-logs.txt- Complete logs showing repeated errorsgnmic-success-output.txt- Full gnmic output showing successtarget-config.yaml- Complete Target/Profile configurationstarget-status.yaml- kubectl get target -o yaml outputContact
Available for:
Thank you for maintaining SDC! This is a great project and we're eager to see Arista support working properly.