aboutsummaryrefslogtreecommitdiff
path: root/weed/topology/topology_test.go
AgeCommit message (Collapse)AuthorFilesLines
2025-12-02Support separate volume server ID independent of RPC bind address (#7609)Chris Lu1-5/+114
* pb: add id field to Heartbeat message for stable volume server identification This adds an 'id' field to the Heartbeat protobuf message that allows volume servers to identify themselves independently of their IP:port address. Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * storage: add Id field to Store struct Add Id field to Store struct and include it in CollectHeartbeat(). The Id field provides a stable volume server identity independent of IP:port. Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * topology: support id-based DataNode identification Update GetOrCreateDataNode to accept an id parameter for stable node identification. When id is provided, the DataNode can maintain its identity even when its IP address changes (e.g., in Kubernetes pod reschedules). For backward compatibility: - If id is provided, use it as the node ID - If id is empty, fall back to ip:port Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * volume: add -id flag for stable volume server identity Add -id command line flag to volume server that allows specifying a stable identifier independent of the IP address. This is useful for Kubernetes deployments with hostPath volumes where pods can be rescheduled to different nodes while the persisted data remains on the original node. Usage: weed volume -id=node-1 -ip=10.0.0.1 ... If -id is not specified, it defaults to ip:port for backward compatibility. Fixes https://github.com/seaweedfs/seaweedfs/issues/7487 * server: add -volume.id flag to weed server command Support the -volume.id flag in the all-in-one 'weed server' command, consistent with the standalone 'weed volume' command. Usage: weed server -volume.id=node-1 ... Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * topology: add test for id-based DataNode identification Test the key scenarios: 1. Create DataNode with explicit id 2. Same id with different IP returns same DataNode (K8s reschedule) 3. IP/PublicUrl are updated when node reconnects with new address 4. Different id creates new DataNode 5. Empty id falls back to ip:port (backward compatibility) Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * pb: add address field to DataNodeInfo for proper node addressing Previously, DataNodeInfo.Id was used as the node address, which worked when Id was always ip:port. Now that Id can be an explicit string, we need a separate Address field for connection purposes. Changes: - Add 'address' field to DataNodeInfo protobuf message - Update ToDataNodeInfo() to populate the address field - Update NewServerAddressFromDataNode() to use Address (with Id fallback) - Fix LookupEcVolume to use dn.Url() instead of dn.Id() Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * fix: trim whitespace from volume server id and fix test - Trim whitespace from -id flag to treat ' ' as empty - Fix store_load_balancing_test.go to include id parameter in NewStore call Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * refactor: extract GetVolumeServerId to util package Move the volume server ID determination logic to a shared utility function to avoid code duplication between volume.go and rack.go. Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * fix: improve transition logic for legacy nodes - Use exact ip:port match instead of net.SplitHostPort heuristic - Update GrpcPort and PublicUrl during transition for consistency - Remove unused net import Ref: https://github.com/seaweedfs/seaweedfs/issues/7487 * fix: add id normalization and address change logging - Normalize id parameter at function boundary (trim whitespace) - Log when DataNode IP:Port changes (helps debug K8s pod rescheduling) Ref: https://github.com/seaweedfs/seaweedfs/issues/7487
2025-11-04master: fix negative active volumes (#7440)Chris Lu1-0/+114
* fix negative active volumes * address comments * simplify
2025-06-16refactoringchrislu1-5/+5
2025-04-16Fix implementation of `master_pb.CollectionList` RPC call (#6715)Lisandro Pin1-0/+74
2022-07-29move to https://github.com/seaweedfs/seaweedfschrislu1-6/+6
2021-09-14go fmtChris Lu1-2/+2
2021-09-12change server address from string to a typeChris Lu1-2/+2
2021-02-16fix testsChris Lu1-14/+28
2021-02-16this can compile now!!!Chris Lu1-1/+2
2020-12-16go fmtChris Lu1-2/+2
2020-12-13rename from volumeType to diskTypeChris Lu1-2/+2
2020-12-13volume server set volume type and heartbeat to the masterChris Lu1-4/+23
2020-12-13adding volume typeChris Lu1-1/+1
2020-04-01Added treat_replication_as_minimums master toml optionJames Hartig1-2/+2
2019-12-23shell: add ec.decode commandChris Lu1-2/+3
2019-04-30style: go fmt for allWine931-2/+2
2019-04-20add remove volumes with version infoChris Lu1-2/+51
2019-04-18refactoringChris Lu1-3/+5
2019-04-04fix testChris Lu1-5/+5
2018-07-11fix testChris Lu1-4/+6
2018-07-11also remove volumeLayout if collection is emptyChris Lu1-4/+39
2018-06-25refactoringChris Lu1-28/+2
2018-06-24add test for volume registeration at masterChris Lu1-0/+96
2018-06-24file renameChris Lu1-0/+17