aboutsummaryrefslogtreecommitdiff
path: root/weed/worker/client_test.go
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2025-07-30 12:38:03 -0700
committerGitHub <noreply@github.com>2025-07-30 12:38:03 -0700
commit891a2fb6ebc324329f5330a140b8cacff3899db4 (patch)
treed02aaa80a909e958aea831f206b3240b0237d7b7 /weed/worker/client_test.go
parent64198dad8346fe284cbef944fe01ff0d062c147d (diff)
downloadseaweedfs-891a2fb6ebc324329f5330a140b8cacff3899db4.tar.xz
seaweedfs-891a2fb6ebc324329f5330a140b8cacff3899db4.zip
Admin: misc improvements on admin server and workers. EC now works. (#7055)
* initial design * added simulation as tests * reorganized the codebase to move the simulation framework and tests into their own dedicated package * integration test. ec worker task * remove "enhanced" reference * start master, volume servers, filer Current Status ✅ Master: Healthy and running (port 9333) ✅ Filer: Healthy and running (port 8888) ✅ Volume Servers: All 6 servers running (ports 8080-8085) 🔄 Admin/Workers: Will start when dependencies are ready * generate write load * tasks are assigned * admin start wtih grpc port. worker has its own working directory * Update .gitignore * working worker and admin. Task detection is not working yet. * compiles, detection uses volumeSizeLimitMB from master * compiles * worker retries connecting to admin * build and restart * rendering pending tasks * skip task ID column * sticky worker id * test canScheduleTaskNow * worker reconnect to admin * clean up logs * worker register itself first * worker can run ec work and report status but: 1. one volume should not be repeatedly worked on. 2. ec shards needs to be distributed and source data should be deleted. * move ec task logic * listing ec shards * local copy, ec. Need to distribute. * ec is mostly working now * distribution of ec shards needs improvement * need configuration to enable ec * show ec volumes * interval field UI component * rename * integration test with vauuming * garbage percentage threshold * fix warning * display ec shard sizes * fix ec volumes list * Update ui.go * show default values * ensure correct default value * MaintenanceConfig use ConfigField * use schema defined defaults * config * reduce duplication * refactor to use BaseUIProvider * each task register its schema * checkECEncodingCandidate use ecDetector * use vacuumDetector * use volumeSizeLimitMB * remove remove * remove unused * refactor * use new framework * remove v2 reference * refactor * left menu can scroll now * The maintenance manager was not being initialized when no data directory was configured for persistent storage. * saving config * Update task_config_schema_templ.go * enable/disable tasks * protobuf encoded task configurations * fix system settings * use ui component * remove logs * interface{} Reduction * reduce interface{} * reduce interface{} * avoid from/to map * reduce interface{} * refactor * keep it DRY * added logging * debug messages * debug level * debug * show the log caller line * use configured task policy * log level * handle admin heartbeat response * Update worker.go * fix EC rack and dc count * Report task status to admin server * fix task logging, simplify interface checking, use erasure_coding constants * factor in empty volume server during task planning * volume.list adds disk id * track disk id also * fix locking scheduled and manual scanning * add active topology * simplify task detector * ec task completed, but shards are not showing up * implement ec in ec_typed.go * adjust log level * dedup * implementing ec copying shards and only ecx files * use disk id when distributing ec shards 🎯 Planning: ActiveTopology creates DestinationPlan with specific TargetDisk 📦 Task Creation: maintenance_integration.go creates ECDestination with DiskId 🚀 Task Execution: EC task passes DiskId in VolumeEcShardsCopyRequest 💾 Volume Server: Receives disk_id and stores shards on specific disk (vs.store.Locations[req.DiskId]) 📂 File System: EC shards and metadata land in the exact disk directory planned * Delete original volume from all locations * clean up existing shard locations * local encoding and distributing * Update docker/admin_integration/EC-TESTING-README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * check volume id range * simplify * fix tests * fix types * clean up logs and tests --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'weed/worker/client_test.go')
-rw-r--r--weed/worker/client_test.go111
1 files changed, 0 insertions, 111 deletions
diff --git a/weed/worker/client_test.go b/weed/worker/client_test.go
deleted file mode 100644
index c57ea0240..000000000
--- a/weed/worker/client_test.go
+++ /dev/null
@@ -1,111 +0,0 @@
-package worker
-
-import (
- "context"
- "testing"
-
- "github.com/seaweedfs/seaweedfs/weed/pb"
- "google.golang.org/grpc"
- "google.golang.org/grpc/credentials/insecure"
-)
-
-func TestGrpcConnection(t *testing.T) {
- // Test that we can create a gRPC connection with insecure credentials
- // This tests the connection setup without requiring a running server
- adminAddress := "localhost:33646" // gRPC port for admin server on port 23646
-
- // This should not fail with transport security errors
- conn, err := pb.GrpcDial(context.Background(), adminAddress, false, grpc.WithTransportCredentials(insecure.NewCredentials()))
- if err != nil {
- // Connection failure is expected when no server is running
- // But it should NOT be a transport security error
- if err.Error() == "grpc: no transport security set" {
- t.Fatalf("Transport security error should not occur with insecure credentials: %v", err)
- }
- t.Logf("Connection failed as expected (no server running): %v", err)
- } else {
- // If connection succeeds, clean up
- conn.Close()
- t.Log("Connection succeeded")
- }
-}
-
-func TestGrpcAdminClient_Connect(t *testing.T) {
- // Test that the GrpcAdminClient can be created and attempt connection
- dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
- client := NewGrpcAdminClient("localhost:23646", "test-worker", dialOption)
-
- // This should not fail with transport security errors
- err := client.Connect()
- if err != nil {
- // Connection failure is expected when no server is running
- // But it should NOT be a transport security error
- if err.Error() == "grpc: no transport security set" {
- t.Fatalf("Transport security error should not occur with insecure credentials: %v", err)
- }
- t.Logf("Connection failed as expected (no server running): %v", err)
- } else {
- // If connection succeeds, clean up
- client.Disconnect()
- t.Log("Connection succeeded")
- }
-}
-
-func TestAdminAddressToGrpcAddress(t *testing.T) {
- tests := []struct {
- adminAddress string
- expected string
- }{
- {"localhost:9333", "localhost:19333"},
- {"localhost:23646", "localhost:33646"},
- {"admin.example.com:9333", "admin.example.com:19333"},
- {"127.0.0.1:8080", "127.0.0.1:18080"},
- }
-
- for _, test := range tests {
- dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
- client := NewGrpcAdminClient(test.adminAddress, "test-worker", dialOption)
- result := client.adminAddress
- if result != test.expected {
- t.Errorf("For admin address %s, expected gRPC address %s, got %s",
- test.adminAddress, test.expected, result)
- }
- }
-}
-
-func TestMockAdminClient(t *testing.T) {
- // Test that the mock client works correctly
- client := NewMockAdminClient()
-
- // Should be able to connect/disconnect without errors
- err := client.Connect()
- if err != nil {
- t.Fatalf("Mock client connect failed: %v", err)
- }
-
- if !client.IsConnected() {
- t.Error("Mock client should be connected")
- }
-
- err = client.Disconnect()
- if err != nil {
- t.Fatalf("Mock client disconnect failed: %v", err)
- }
-
- if client.IsConnected() {
- t.Error("Mock client should be disconnected")
- }
-}
-
-func TestCreateAdminClient(t *testing.T) {
- // Test client creation
- dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
- client, err := CreateAdminClient("localhost:9333", "test-worker", dialOption)
- if err != nil {
- t.Fatalf("Failed to create admin client: %v", err)
- }
-
- if client == nil {
- t.Fatal("Client should not be nil")
- }
-}