Skip to content

Commit a2d112a

Browse files
committed
chore: add grpc-server API for SpannerLib
Adds a gRPC server that exposes the API of SpannerLib. This allows clients to connect to run SpannerLib as a child process and connect to it using gRPC.
1 parent c69edab commit a2d112a

File tree

59 files changed

+15736
-170
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+15736
-170
lines changed

.github/workflows/spanner-lib-tests.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,27 @@ jobs:
4848
- name: Build shared library
4949
working-directory: spannerlib/shared
5050
run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go
51+
- name: Build gRPC server
52+
working-directory: spannerlib/grpc-server
53+
run: |
54+
go build -o grpc_server server.go
55+
chmod +x grpc_server
5156
- name: Copy to Java wrapper
5257
working-directory: spannerlib
5358
run: |
5459
echo "$RUNNER_OS"
5560
if [ "$RUNNER_OS" == "Windows" ]; then
5661
mkdir -p wrappers/spannerlib-java/src/main/resources/win32-x86-64
5762
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/win32-x86-64/spanner.dll
63+
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/win32-x86-64/grpc_server
5864
elif [ "$RUNNER_OS" == "macOS" ]; then
5965
mkdir -p wrappers/spannerlib-java/src/main/resources/darwin-aarch64
6066
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/darwin-aarch64/libspanner.dylib
67+
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server
6168
else
6269
mkdir -p wrappers/spannerlib-java/src/main/resources/linux-x86-64
6370
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/linux-x86-64/libspanner.so
71+
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/linux-x86-64/grpc_server
6472
fi
6573
shell: bash
6674
- name: ls spannerlib.so

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "spannerlib/grpc-server/googleapis"]
2+
path = spannerlib/grpc-server/googleapis
3+
url = git@github.com:googleapis/googleapis.git

spannerlib/api/rows.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ func (rows *rows) Next(ctx context.Context) (*structpb.ListValue, error) {
165165
return nil, spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "cannot read more data after returning stats"))
166166
}
167167
ok := rows.backend.Next()
168+
if !ok && rows.backend.Err() != nil {
169+
return nil, rows.backend.Err()
170+
}
168171
if !ok {
169172
rows.done = true
170173
// No more rows. Read stats and return nil.

spannerlib/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ toolchain go1.25.1
77
replace github.com/googleapis/go-sql-spanner => ..
88

99
require (
10+
cloud.google.com/go/longrunning v0.6.7
1011
cloud.google.com/go/spanner v1.85.1
1112
github.com/google/go-cmp v0.7.0
1213
github.com/googleapis/go-sql-spanner v1.18.0
14+
google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c
1315
google.golang.org/grpc v1.75.1
1416
google.golang.org/protobuf v1.36.9
1517
)
@@ -21,7 +23,6 @@ require (
2123
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
2224
cloud.google.com/go/compute/metadata v0.8.0 // indirect
2325
cloud.google.com/go/iam v1.5.2 // indirect
24-
cloud.google.com/go/longrunning v0.6.7 // indirect
2526
cloud.google.com/go/monitoring v1.24.2 // indirect
2627
github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3 // indirect
2728
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect
@@ -62,6 +63,5 @@ require (
6263
golang.org/x/time v0.12.0 // indirect
6364
google.golang.org/api v0.249.0 // indirect
6465
google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect
65-
google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect
6666
google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 // indirect
6767
)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
go build -o grpc_server server.go
2+
chmod +x grpc_server
3+
cp grpc_server ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
PATH="${PATH}:${HOME}/go/bin"
2+
rm -rf googleapis/google/spannerlib
3+
cp -r google/spannerlib googleapis/google
4+
cd googleapis || exit 1
5+
protoc \
6+
--go_out=../ \
7+
--go_opt=paths=source_relative \
8+
--go-grpc_out=../ \
9+
--go-grpc_opt=paths=source_relative \
10+
google/spannerlib/v1/spannerlib.proto
11+
protoc \
12+
--java_out=../../wrappers/spannerlib-java/src/main/java/ \
13+
--plugin=protoc-gen-java-grpc=/Users/loite/protoc-gen-grpc-java-1.75.0-osx-aarch_64.exe \
14+
--java-grpc_out=../../wrappers/spannerlib-java/src/main/java/ \
15+
--java-grpc_opt=paths=source_relative \
16+
google/spannerlib/v1/spannerlib.proto
17+
cd .. || exit 1
18+
rm -rf googleapis/google/spannerlib

0 commit comments

Comments
 (0)