Skip to content

Grpc manager #69

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 30 commits into from
Jun 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0289b97
worker-controller communication protocol
jcdkiki Apr 23, 2025
d6e222d
new communication protocol: wip
jcdkiki May 14, 2025
22945b8
fix communication protocol
May 20, 2025
95fba68
fix linter errors
jcdkiki May 21, 2025
3026f2c
fix linter errors in worker.hpp
jcdkiki May 24, 2025
5bd5036
Merge branch 'main' into communication_protocol + wiki fix
jcdkiki May 24, 2025
e5cb5e3
Fix manager entrypoint
jcdkiki May 24, 2025
6d2dd0b
fix integration test + small changes
jcdkiki May 24, 2025
d345487
fix manager_integration_test.sh
jcdkiki May 24, 2025
90de7ef
adjust timings in manager_integration_test.sh
jcdkiki May 24, 2025
98112a4
fix codestyle + refactor manager_integration_test
jcdkiki May 25, 2025
68c216f
remove go worker
jcdkiki May 25, 2025
0c9fbeb
combine grpc_server and manager
jcdkiki May 27, 2025
ca52a7f
Fix cpp linter errors
jcdkiki May 27, 2025
3e8ac36
Merge branch 'main' into grpc_manager
jcdkiki Jun 3, 2025
097033e
unstash some things
jcdkiki Jun 4, 2025
b4be9ee
adapted bazel build for new protocol
jcdkiki Jun 4, 2025
45139d3
remove grpc_server test for now
jcdkiki Jun 4, 2025
6f926ec
Merge branch 'main' into grpc_manager
jcdkiki Jun 14, 2025
22d0392
add grpcserver_integration_test.sh
jcdkiki Jun 14, 2025
f222ce7
remove dangling bazel stuff
jcdkiki Jun 14, 2025
776e42b
ignore proto files when linting
jcdkiki Jun 14, 2025
c769b01
fix .golangci.yml
jcdkiki Jun 14, 2025
2a4c963
fix .golangci.yml 2
jcdkiki Jun 14, 2025
73283fa
fix .golangci.yml 3
jcdkiki Jun 14, 2025
fa5a54d
Manager class + grpcserver testing with mocking
jcdkiki Jun 14, 2025
6b35f80
generate pb go files in GH action
jcdkiki Jun 15, 2025
bda2518
fix grpcserver test.go
jcdkiki Jun 15, 2025
5a5ab53
try fix 'import cycle not allowed in test'
jcdkiki Jun 15, 2025
207dd7f
fix lint errors
jcdkiki Jun 15, 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
14 changes: 12 additions & 2 deletions .github/workflows/lint_check_go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

- name: Generate protobuf
- name: Generate file_service.proto
working-directory: ./controller
run: |
protoc \
Expand All @@ -34,7 +34,17 @@ jobs:
--go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
pkg/proto/file_service/file_service.proto

- name: Generate communication.proto
working-directory: ./controller
run: |
protoc \
--plugin=protoc-gen-go=$(which protoc-gen-go) \
--plugin=protoc-gen-go-grpc=$(which protoc-gen-go-grpc) \
--go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
pkg/proto/communication/communication.proto

- name: Run golangci-lint
working-directory: ./controller
run: golangci-lint run --timeout 3m
run: golangci-lint run --timeout 3m
19 changes: 19 additions & 0 deletions .github/workflows/manager_integration_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: manager integration test

on: [push]

jobs:
manager_integration_test:
name: Run Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Bazel via Bazelisk
run: |
sudo curl -L https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 -o /usr/local/bin/bazel
sudo chmod +x /usr/local/bin/bazel

- name: Run tests
working-directory: ./
run: ./scripts/manager_integration_test.sh log
5 changes: 3 additions & 2 deletions Dockerfile.hash
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM alpine:latest AS builder

RUN apk update && apk add --no-cache g++ openssl-dev cmake make curl-dev
RUN apk update && apk add --no-cache g++ openssl-dev cmake make curl-dev protobuf-dev
RUN apk add bazel --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/

WORKDIR /app
Expand All @@ -12,12 +12,13 @@ COPY worker/src/ ./src/
COPY worker/include/ ./include/
COPY worker/BUILD ./
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: иногда чтоб не перечислять всё по отдельности что нужно скопировать проще воспользоваться .dockerignore

COPY worker/MODULE.bazel ./
COPY worker/communication.proto ./

RUN bazel build //:worker

FROM alpine:latest

RUN apk update && apk add --no-cache libstdc++ libgcc libssl3 libcurl
RUN apk update && apk add --no-cache libstdc++ libgcc libssl3 libcurl protobuf-dev

COPY --from=builder /app/bazel-bin/worker /usr/local/bin/worker
COPY --from=builder /app/prometheus-cpp-with-submodules/build/lib/ /usr/lib
Expand Down
2 changes: 1 addition & 1 deletion controller/.golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ run:
linters:
enable:
- gofmt
- govet
- govet
11 changes: 0 additions & 11 deletions controller/Dockerfile.worker

This file was deleted.

11 changes: 6 additions & 5 deletions controller/cmd/grpc_server/main.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
package main

import (
"log"
"net"

"github.com/moevm/grpc_server/internal/config"
"github.com/moevm/grpc_server/internal/grpcserver"
"github.com/moevm/grpc_server/internal/manager"
pb "github.com/moevm/grpc_server/pkg/proto/file_service"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"log"
"net"
)

func main() {
cfg := config.Load()

taskChan, err := manager.InitManager(100)
mgr, err := manager.NewManager()
if err != nil {
log.Fatalf("Failed to initialize manager: %v", err)
log.Fatalf("manager.NewManager(): %v", err)
}

lis, err := net.Listen("tcp", net.JoinHostPort(cfg.Host, cfg.Port))
Expand All @@ -30,7 +31,7 @@ func main() {
}

service := grpc.NewServer(serverOpts...)
pb.RegisterFileServiceServer(service, grpcserver.NewServer(cfg.AllowedChars, taskChan))
pb.RegisterFileServiceServer(service, grpcserver.NewServer(cfg.AllowedChars, mgr))
reflection.Register(service)

log.Printf("Server starting on %s:%s", cfg.Host, cfg.Port)
Expand Down
16 changes: 5 additions & 11 deletions controller/cmd/manager/BUILD
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
load("@rules_go//go:def.bzl", "go_binary", "go_library")

go_binary(
name = "manager",
embed = [":manager_lib"],
visibility = ["//visibility:public"],
)

go_library(
name = "manager_lib",
srcs = ["main.go"],
importpath = "github.com/moevm/grpc_server/cmd/manager",
visibility = ["//visibility:private"],
deps = ["//internal/manager"],
name = "manager",
srcs = ["test.go"],
deps = [
"//internal/manager",
],
)
30 changes: 0 additions & 30 deletions controller/cmd/manager/main.go

This file was deleted.

56 changes: 56 additions & 0 deletions controller/cmd/manager/test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package main

import (
"bytes"
"crypto/md5"
"crypto/rand"
"fmt"
"log"
"os"
"time"

"github.com/moevm/grpc_server/internal/manager"
)

func main() {
tasks := make([][]byte, 5)
tasks[0] = make([]byte, 30)
tasks[1] = make([]byte, 188588)
tasks[2] = make([]byte, 5138788)
tasks[3] = make([]byte, 17338664)
tasks[4] = make([]byte, 55777333)

for i := range tasks {
_, err := rand.Read(tasks[i])
if err != nil {
log.Panic(err)
}
}

expected := make([][16]byte, 5)
for i, task := range tasks {
expected[i] = md5.Sum(task)
}

mgr, err := manager.NewManager()
if err != nil {
log.Fatalf("manager.NewManager(): %v", err)
}

time.Sleep(10 * time.Second)

ids := make(map[uint64]int, 5)
for i, task := range tasks {
id := mgr.AddTask(task, nil)
ids[id] = i
}

for range 5 {
solution := mgr.GetTaskSolution()
task_id := ids[solution.Id]
if !bytes.Equal(solution.Body, expected[task_id][:]) {
fmt.Printf("%v != %v", solution.Body, expected[task_id][:])
os.Exit(1)
}
}
}
15 changes: 0 additions & 15 deletions controller/cmd/worker/BUILD

This file was deleted.

9 changes: 0 additions & 9 deletions controller/cmd/worker/main.go

This file was deleted.

2 changes: 1 addition & 1 deletion controller/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ require (
golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
4 changes: 4 additions & 0 deletions controller/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@ golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
Expand Down
3 changes: 2 additions & 1 deletion controller/internal/config/config.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package config

import (
"github.com/joho/godotenv"
"log"
"os"
"strconv"

"github.com/joho/godotenv"
)

type ServerConfig struct {
Expand Down
Loading
Loading