{"record":{"id":"2bee94b757a0e837","repo":"dgraph-io/dgraph","slug":"failed-to-receive-response-for-group-id-v-from","errorCode":null,"errorMessage":"failed to receive response for group ID [%v] from the server: %w","messagePattern":"failed to receive response for group ID \\[(.+?)\\] from the server: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"dgraph/cmd/dgraphimport/import_client.go","lineNumber":199,"sourceCode":"\tps, err := badger.OpenManaged(opt)\n\tif err != nil {\n\t\tglog.Errorf(\"failed to open BadgerDB at [%s]: %v\", pdir, err)\n\t\treturn fmt.Errorf(\"failed to open BadgerDB at [%v]: %v\", pdir, err)\n\t}\n\tdefer func() {\n\t\tif err := ps.Close(); err != nil {\n\t\t\tglog.Warningf(\"[import] Error closing BadgerDB: %v\", err)\n\t\t}\n\t}()\n\n\t// Send group ID as the first message in the stream\n\tglog.Infof(\"[import] Sending request for streaming external snapshot for group ID [%v]\", groupId)\n\tgroupReq := &api.StreamExtSnapshotRequest{GroupId: groupId}\n\tif err := out.Send(groupReq); err != nil {\n\t\treturn fmt.Errorf(\"failed to send request for group ID [%v] to the server: %w\", groupId, err)\n\t}\n\tif _, err := out.Recv(); err != nil {\n\t\treturn fmt.Errorf(\"failed to receive response for group ID [%v] from the server: %w\", groupId, err)\n\t}\n\n\tglog.Infof(\"[import] Group [%v]: Received ACK for sending group request\", groupId)\n\n\t// Configure and start the BadgerDB stream\n\tglog.Infof(\"[import] Starting BadgerDB stream for group [%v]\", groupId)\n\tif err := streamBadger(ctx, ps, out, groupId); err != nil {\n\t\treturn fmt.Errorf(\"badger streaming failed for group [%v]: %v\", groupId, err)\n\t}\n\treturn nil\n}\n\n// streamBadger runs a BadgerDB stream to send key-value pairs to the specified group.\n// It creates a new stream at the maximum sequence number and sends the data to the specified group.\n// It also sends a final 'done' signal to mark completion.\nfunc streamBadger(ctx context.Context, ps *badger.DB, out api.Dgraph_StreamExtSnapshotClient, groupId uint32) error {\n\tstream := ps.NewStreamAt(math.MaxUint64)\n\tstream.LogPrefix = \"[import] Sending external snapshot to group [\" + fmt.Sprintf(\"%d\", groupId) + \"]\"","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/dgraph-io/dgraph/blob/759e242be62c91f8d084da06ad0c8d21256d9c07/dgraph/cmd/dgraphimport/import_client.go#L181-L217","documentation":"Returned when out.Recv fails after sending the group-ID handshake message, i.e. the server did not send its ACK. This usually mirrors a server-side error while preparing to receive the snapshot (bad group, internal error) or a dropped stream.","triggerScenarios":"Server returns a non-OK status in place of the ACK (unknown group ID, server not ready, internal error); stream breaks before the ACK (network reset, server crash); context deadline exceeded while waiting.","commonSituations":"Importing against a cluster whose group IDs changed after scaling; Alpha logs show snapshot-handshake errors; import run through a proxy with short idle timeouts; very slow server startup.","solutions":["Read the wrapped status message — a server-side error (e.g. InvalidArgument/Internal) explains the missing ACK.","Check Alpha logs at the time of import for the server-side counterpart error.","Verify group ID validity and that all Alphas of that group are online.","Increase context timeout and re-run; the handshake is retried on a fresh stream only.","Eliminate proxies/LB between client and Alpha or raise their stream timeouts."],"exampleFix":"// before\nif _, err := out.Recv(); err != nil {\n\treturn fmt.Errorf(\"failed to receive response for group ID [%v] from the server: %w\", groupId, err)\n}\n// after\nif _, err := out.Recv(); err != nil {\n\tif s, ok := status.FromError(err); ok {\n\t\treturn fmt.Errorf(\"no ACK for group %d (code=%s): %w\", groupId, s.Code(), err)\n\t}\n\treturn fmt.Errorf(\"failed to receive response for group ID [%v] from the server: %w\", groupId, err)\n}","handlingStrategy":"try-catch","validationCode":"if err := ctx.Err(); err != nil {\n\treturn fmt.Errorf(\"context expired before ACK; raise deadline: %w\", err)\n}","typeGuard":"func serverRejectedAck(err error) (bool, codes.Code) {\n\tif s, ok := status.FromError(err); ok && s.Code() != codes.OK {\n\t\treturn true, s.Code()\n\t}\n\treturn false, codes.OK\n}","tryCatchPattern":"if _, err := out.Recv(); err != nil {\n\tif ok, code := serverRejectedAck(err); ok {\n\t\tswitch code {\n\t\tcase codes.DeadlineExceeded:\n\t\t\treturn retryWithLongerDeadline(ctx)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"server rejected handshake for group %d: %v\", groupId, err)\n\t\t}\n\t}\n\treturn err\n}","preventionTips":["Check Alpha logs for the server-side handshake error when this occurs.","Size the context deadline for the dataset, not the default.","Verify group membership hasn't changed since the export.","Keep the network path direct and idle-timeout-free."],"tags":["grpc","network","stream","snapshot-import"],"backgroundTag":"grpc-recv-failed","analyzedSha":"759e242be62c91f8d084da06ad0c8d21256d9c07","analyzedAt":"2026-09-01T14:42:12.034Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}