8000 他のパッケージをImportしている場合、エラーになる by devin-ai-integration[bot] · Pull Request #155 · rerost/giro · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

他のパッケージをImportしている場合、エラーにな 8000 #155

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Mar 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c0f1543
Add test using google/protobuf/empty.proto
devin-ai-integration[bot] Mar 29, 2025
ca7f33f
Update Ruby server implementation for Empty proto test
devin-ai-integration[bot] Mar 29, 2025
9848b8f
Update Dockerfile to include protobuf dependencies
devin-ai-integration[bot] Mar 29, 2025
820f42c
Fix EmptyCall method to use emptypb.Empty
devin-ai-integration[bot] Mar 29, 2025
aafbcba
Regenerate protobuf files with emptypb.Empty
devin-ai-integration[bot] Mar 29, 2025
a6bbefc
Update Dockerfile to fix empty.proto import
devin-ai-integration[bot] Mar 29, 2025
6303b7d
Fix empty.proto creation in Dockerfile
devin-ai-integration[bot] Mar 29, 2025
193e48b
Fix protobuf imports: replace empty with emptypb
devin-ai-integration[bot] Mar 29, 2025
3d823ee
Add APP_PORT environment variable to Dockerfile
devin-ai-integration[bot] Mar 29, 2025
75b42a1
Fix protobuf import paths to use github.com/golang/protobuf/ptypes/empty
devin-ai-integration[bot] Mar 29, 2025
92ae1bd
Update runner.go to use emptypb import
devin-ai-integration[bot] Mar 29, 2025
4887461
Update to protoc v25.1 and fix emptypb imports
devin-ai-integration[bot] Mar 29, 2025
9fb8e49
Update protoc version to v5.29.4 in generated files
devin-ai-integration[bot] Mar 29, 2025
fa18904
Fix empty.proto creation in Dockerfile
devin-ai-integration[bot] Mar 29, 2025
1bf3bf0
Update protoc installation in CI workflow
devin-ai-integration[bot] Mar 29, 2025
4472c5e
Update generated protobuf files
devin-ai-integration[bot] Mar 29, 2025
9fb4f45
Revert version
rerost Mar 29, 2025
cecb553
Update protoc (#156)
8000 rerost Mar 29, 2025
eae7765
Remove creation of empty.proto file
rerost Mar 29, 2025
5c61336
probabilistically success
rerost Mar 29, 2025
005594b
Fix
rerost Mar 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ jobs:
time echo "{\"message\":\"test\"}" > call_expect.txt
time go run cmd/giro/main.go call --rpc-server=localhost:5001 example.multiple_package.protos.one.GiroService/GiroTest1 '{"message": "test"}' > call_result.txt
time diff call_result.txt call_expect.txt

echo "check empty call"
time echo "{}" > empty_call_expect.txt
time go run cmd/giro/main.go call --rpc-server=localhost:5001 example.multiple_package.protos.one.GiroService/GiroEmptyTest '{}' > empty_call_result.txt
time diff empty_call_result.txt empty_call_expect.txt

check_make_protoc:
runs-on: ubuntu-latest
Expand Down
110 changes: 102 additions & 8 deletions domain/grpcreflectiface/client.go
6D47
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"sync"

"github.com/pkg/errors"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection/grpc_reflection_v1"
"google.golang.org/protobuf/proto"
Expand Down Expand Up @@ -51,7 +52,6 @@ func (c *clientImpl) ListServices() ([]string, error) {

return services, nil
}

func (c *clientImpl) ResolveService(serviceName string) (protoreflect.ServiceDescriptor, error) {
req := grpc_reflection_v1.ServerReflectionRequest{
MessageRequest: &grpc_reflection_v1.ServerReflectionRequest_FileContainingSymbol{
Expand All @@ -68,25 +68,49 @@ func (c *clientImpl) ResolveService(serviceName string) (protoreflect.ServiceDes
if resp.GetFileDescriptorResponse() == nil {
return nil, nil
}

// ファイルをレジストリに登録
registry := &protoregistry.Files{}
checkedFdNames := map[string]bool{}
registerFunc := func(fdProto *descriptorpb.FileDescriptorProto) error {
// 重複排除
if _, ok := checkedFdNames[fdProto.GetName()]; ok {
return nil
}
checkedFdNames[fdProto.GetName()] = true

file, err := protodesc.NewFile(fdProto, registry)
if err != nil {
return errors.WithStack(err)
}
return errors.WithStack(registry.RegisterFile(file))
}

for _, fdProtoBytes := range resp.GetFileDescriptorResponse().FileDescriptorProto {
var fdProto descriptorpb.FileDescriptorProto

if err := proto.Unmarshal(fd 8000 ProtoBytes, &fdProto); err != nil {
return nil, errors.WithStack(err)
}

file, err := protodesc.NewFile(&fdProto, protoregistry.GlobalFiles)
if err := c.resolveFiles(registerFunc, &fdProto); err != nil {
return nil, err
}
}
for _, fdProtoBytes := range resp.GetFileDescriptorResponse().FileDescriptorProto {
var fdProto descriptorpb.FileDescriptorProto
if err := proto.Unmarshal(fdProtoBytes, &fdProto); err != nil {
return nil, errors.WithStack(err)
}
file, err := protodesc.NewFile(&fdProto, registry)
if err != nil {
return nil, errors.WithStack(err)
}

svcDescriptor = file.Services().ByName(protoreflect.FullName(serviceName).Name())
if svcDescriptor != nil {
break
return svcDescriptor, nil
}
}

return svcDescriptor, nil
return nil, errors.New("service not found")
}

func (c *clientImpl) ResolveMessage(messageName string) (proto.Message, error) {
Expand All @@ -101,15 +125,38 @@ func (c *clientImpl) ResolveMessage(messageName string) (proto.Message, error) {
return nil, errors.WithStack(err)
}

registry := &protoregistry.Files{}
checkedFdNames := map[string]bool{}
registerFunc := func(fdProto *descriptorpb.FileDescriptorProto) error {
// 重複排除
if _, ok := checkedFdNames[fdProto.GetName()]; ok {
return nil
}
checkedFdNames[fdProto.GetName()] = true
file, err := protodesc.NewFile(fdProto, registry)
if err != nil {
return errors.WithStack(err)
}
return registry.RegisterFile(file)
}
var dynamicMessage proto.Message
files := map[string]*descriptorpb.FileDescriptorProto{}
for _, fdProtoBytes := range resp.GetFileDescriptorResponse().FileDescriptorProto {
var fdProto descriptorpb.FileDescriptorProto

if err := proto.Unmarshal(fdProtoBytes, &fdProto); err != nil {
return nil, errors.WithStack(err)
}
files[fdProto.GetName()] = &fdProto

if err := c.resolveFiles(registerFunc, &fdProto); err != nil {
return nil, err
}
}

file, err := protodesc.NewFile(&fdProto, protoregistry.GlobalFiles)
// メッセージディスクリプタを探す
for _, fdProto := range files {
file, err := protodesc.NewFile(fdProto, registry)
if err != nil {
return nil, errors.WithStack(err)
}
Expand Down Expand Up @@ -141,3 +188,50 @@ func (c *clientImpl) call(request *grpc_reflection_v1.ServerReflectionRequest) (

return response, nil
}

// 取得したfdProtoをRegisterFileする
// 依存関係の末端からRegisterする
// 依存関係が、FileA -> FileB の時、registerFuncが registerFunc(FileB), registerFunc(FileA) の順で呼ばれる
// 深さ優先探索でRegister
func (c *clientImpl) resolveFiles(
registerFunc func(fdProto *descriptorpb.FileDescriptorProto) error,
fdProto *descriptorpb.FileDescriptorProto,
) error {
return c.resolveFilesInner(registerFunc, fdProto)
}

func (c *clientImpl) resolveFilesInner(
registerFunc func(fdProto *descriptorpb.FileDescriptorProto) error,
fdProto *descriptorpb.FileDescriptorProto,
) error {
// 依存関係にあるファイルの、依存関係を解決
for _, depFdName := range fdProto.Dependency {
depReq := grpc_reflection_v1.ServerReflectionRequest{
MessageRequest: &grpc_reflection_v1.ServerReflectionRequest_FileByFilename{
FileByFilename: depFdName,
},
}
depResp, err := c.call(&depReq)
if err != nil {
return errors.WithStack(err)
}

for _, depFdProtoBytes := range depResp.GetFileDescriptorResponse().FileDescriptorProto {
zap.L().Debug("Protofile Dependency", zap.String("sourceProto", fdProto.GetName()), zap.String("dependencyProto", depFdName))
var depFdProto descriptorpb.FileDescriptorProto
if err := proto.Unmarshal(depFdProtoBytes, &depFdProto); err != nil {
return errors.WithStack(err)
}
if err := c.resolveFilesInner(registerFunc, &depFdProto); err != nil {
return errors.WithStack(err)
}
}
}

// 自分自身をRegister
if err := registerFunc(fdProto); err != nil {
return errors.WithStack(err)
}

return nil
}
92 changes: 77 additions & 15 deletions e2etest/dummyserver/echo.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions e2etest/dummyserver/echo.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package rerost.giro.v1;
option go_package = "github.com/rerost/giro/e2etest/dummyserver;dummyserver";

import "rerost/giro/hosts.proto";
import "google/protobuf/empty.proto";

message MetadataValue {
repeated string value = 1;
Expand All @@ -23,10 +24,16 @@ message EchoResponse {
Metadata metadata = 2;
}

message EmptyResponse {
string status = 1;
Metadata metadata = 2;
}

service TestService {
option (rerost.giro.v1.host_option) = {
host: "localhost:5000"
};
rpc Echo(EchoRequest) returns (EchoResponse) {}
rpc EmptyCall(google.protobuf.Empty) returns (EmptyResponse) {}
}

Loading
Loading
0