Files
zeekay e1e0356e75 rip gRPC from 5 services: gRPC-free interfaces over ZAP, deadline-honoring calls
filer, master, iam, plugin and worker no longer use google.golang.org/grpc on
the client path.

- gRPC-free client interfaces: the generated *_grpc.pb.go client interfaces drop
  "opts ...grpc.CallOption" (no caller ever passed one) and their streaming
  methods return the shared seam types in s3/pb/rpc (ServerStream[T] /
  BidiStream[Req,Resp]) instead of grpc.ServerStreamingClient/BidiStreamingClient.
  The gRPC server scaffolding (Unimplemented*Server, Register*Server, ServiceDesc,
  handler trampolines) is deleted; servers serve over the ZAP wire Dispatch.
- The ZAP adapters (filerzap/masterzap/...) implement the gRPC-free interfaces;
  grpc.DialOption becomes pb.DialOption (the dial is the ZAP transport).
- Unary calls honor context deadlines: the wire client threads ctx to
  transport.Conn.CallContext (v1.8.1), so a call to an unresponsive peer aborts
  on the caller's deadline instead of blocking forever.
- Error semantics: the filer tags each failure with its code name ("NotFound: …",
  "Internal: …") in the message, which crosses the ZAP wire and is classified by
  mount/error_classifier.go — replacing grpc status/codes.
- master ZAP listener port: grpcPort+10000 could exceed 65535; made overflow-safe.
- test doubles updated to the gRPC-free interfaces (0 tests skipped).
- dead cmd/s3-db and cmd/s3-sql (postgres-wire / SQL-engine entry points whose
  backends were already ripped) deleted; finished the backend-rip import cleanup.

go build ./... green; go test ./s3/... green (heavy stream benches run under
their existing -short gates).

Still on gRPC (next wave): volume_server + mq (reverted — servers/adapters not
ready), the remaining ~23 plumbing files, and the go.mod dependency itself.
2026-06-25 06:39:01 -07:00

91 lines
2.3 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log"
"math/rand"
"time"
"github.com/hanzoai/s3/s3/operation"
"github.com/hanzoai/s3/s3/pb"
"github.com/hanzoai/s3/s3/security"
"github.com/hanzoai/s3/s3/util"
util_http "github.com/hanzoai/s3/s3/util/http"
)
var (
master = flag.String("master", "127.0.0.1:9333", "the master server")
repeat = flag.Int("n", 5, "repeat how many times")
garbageThreshold = flag.Float64("garbageThreshold", 0.3, "garbageThreshold")
replication = flag.String("replication", "", "replication 000, 001, 002, etc")
)
func main() {
flag.Parse()
util_http.InitGlobalHttpClient()
util.LoadSecurityConfiguration()
grpcDialOption := security.LoadClientTLS(util.GetViper(), "grpc.client")
genFile(grpcDialOption, 0)
go func() {
for {
println("vacuum threshold", *garbageThreshold)
_, _, err := util_http.Get(fmt.Sprintf("http://%s/vol/vacuum?garbageThreshold=%f", pb.ServerAddress(*master).ToHttpAddress(), *garbageThreshold))
if err != nil {
log.Fatalf("vacuum: %v", err)
}
time.Sleep(time.Second)
}
}()
for i := 0; i < *repeat; i++ {
// create 2 files, and delete one of them
assignResult, targetUrl := genFile(grpcDialOption, i)
util_http.Delete(targetUrl, string(assignResult.Auth))
}
}
func genFile(grpcDialOption pb.DialOption, i int) (*operation.AssignResult, string) {
assignResult, err := operation.Assign(context.Background(), func(_ context.Context) pb.ServerAddress { return pb.ServerAddress(*master) }, grpcDialOption, &operation.VolumeAssignRequest{
Count: 1,
Replication: *replication,
})
if err != nil {
log.Fatalf("assign: %v", err)
}
data := make([]byte, 1024)
rand.Read(data)
targetUrl := fmt.Sprintf("http://%s/%s", assignResult.Url, assignResult.Fid)
uploadOption := &operation.UploadOption{
UploadUrl: targetUrl,
Filename: fmt.Sprintf("test%d", i),
Cipher: false,
IsInputCompressed: true,
MimeType: "bench/test",
PairMap: nil,
Jwt: assignResult.Auth,
}
uploader, err := operation.NewUploader()
if err != nil {
log.Fatalf("upload: %v", err)
}
_, err = uploader.UploadData(context.Background(), data, uploadOption)
if err != nil {
log.Fatalf("upload: %v", err)
}
return assignResult, targetUrl
}