From 1c1750e6be342fbc345b85f62659b21d087a95c5 Mon Sep 17 00:00:00 2001 From: Jennifer Johnson Date: Wed, 12 Feb 2020 16:19:42 -0500 Subject: [PATCH] removes bandwidth limiting On satellite, remove all references to free_bandwidth column in nodes table. On storage node, remove references to AllocatedBandwidth and MinimumBandwidth and mark as deprecated. Protobuf message, NodeCapacity, is left intact for backwards compatibility. Once this is released to all satellites, we can drop the column from the DB. Change-Id: I2ff6c6537fc9008a0c5588e951afea58ede85838 --- cmd/storagenode/Dockerfile | 1 - cmd/storagenode/dashboard.go | 8 +- cmd/storagenode/entrypoint | 1 - cmd/storj-sim/network.go | 1 - .../windows/AllocatedBandwidthConfig.wxs | 28 --- installer/windows/CustomInstallDir.wxs | 12 +- installer/windows/Product.wxs | 3 +- installer/windows/Storj/CustomAction.cs | 39 ----- .../windows/StorjTests/StorjTests.csproj | 1 - .../StorjTests/ValidateBandwidthTests.cs | 44 ----- installer/windows/windows.wixproj | 1 - monkit.lock | 2 - private/testplanet/storagenode.go | 2 - satellite/audit/disqualification_test.go | 1 - satellite/gracefulexit/endpoint.go | 1 - satellite/metainfo/metainfo.go | 2 - satellite/overlay/benchmark_test.go | 6 +- satellite/overlay/selection_test.go | 9 +- satellite/overlay/service.go | 4 - satellite/overlay/service_test.go | 14 +- satellite/repair/repairer/segments.go | 3 - satellite/satellitedb/overlaycache.go | 161 ++++++++---------- storagenode/console/service.go | 7 +- storagenode/contact/contact_test.go | 3 +- storagenode/inspector/inspector.go | 11 +- storagenode/inspector/inspector_test.go | 6 - storagenode/monitor/monitor.go | 59 +------ storagenode/monitor/monitor_test.go | 7 - storagenode/peer.go | 2 - storagenode/piecestore/endpoint.go | 23 +-- storagenode/piecestore/verification_test.go | 37 +--- 31 files changed, 95 insertions(+), 404 deletions(-) delete mode 100644 installer/windows/AllocatedBandwidthConfig.wxs delete mode 100644 installer/windows/StorjTests/ValidateBandwidthTests.cs diff --git a/cmd/storagenode/Dockerfile b/cmd/storagenode/Dockerfile index 4344741ca..566a7963d 100644 --- a/cmd/storagenode/Dockerfile +++ b/cmd/storagenode/Dockerfile @@ -16,5 +16,4 @@ ENTRYPOINT ["/entrypoint"] ENV ADDRESS="" \ EMAIL="" \ WALLET="" \ - BANDWIDTH="2.0TB" \ STORAGE="2.0TB" diff --git a/cmd/storagenode/dashboard.go b/cmd/storagenode/dashboard.go index 3e3ac1cb2..c4815b6e8 100644 --- a/cmd/storagenode/dashboard.go +++ b/cmd/storagenode/dashboard.go @@ -112,13 +112,7 @@ func printDashboard(data *pb.DashboardResponse) error { stats := data.GetStats() if stats != nil { - availBW := memory.Size(stats.GetAvailableBandwidth()) usedBandwidth := color.WhiteString(memory.Size(stats.GetUsedBandwidth()).Base10String()) - if availBW < 0 { - warnFlag = true - availBW = 0 - } - availableBandwidth := color.WhiteString((availBW).Base10String()) availableSpace := color.WhiteString(memory.Size(stats.GetAvailableSpace()).Base10String()) usedSpace := color.WhiteString(memory.Size(stats.GetUsedSpace()).Base10String()) usedEgress := color.WhiteString(memory.Size(stats.GetUsedEgress()).Base10String()) @@ -126,7 +120,7 @@ func printDashboard(data *pb.DashboardResponse) error { w = tabwriter.NewWriter(color.Output, 0, 0, 5, ' ', tabwriter.AlignRight) fmt.Fprintf(w, "\n\t%s\t%s\t%s\t%s\t\n", color.GreenString("Available"), color.GreenString("Used"), color.GreenString("Egress"), color.GreenString("Ingress")) - fmt.Fprintf(w, "Bandwidth\t%s\t%s\t%s\t%s\t (since %s 1)\n", availableBandwidth, usedBandwidth, usedEgress, usedIngress, time.Now().Format("Jan")) + fmt.Fprintf(w, "Bandwidth\t%s\t%s\t%s\t (since %s 1)\n", usedBandwidth, usedEgress, usedIngress, time.Now().Format("Jan")) fmt.Fprintf(w, "Disk\t%s\t%s\t\n", availableSpace, usedSpace) if err = w.Flush(); err != nil { return err diff --git a/cmd/storagenode/entrypoint b/cmd/storagenode/entrypoint index a099396ae..67e05b43e 100755 --- a/cmd/storagenode/entrypoint +++ b/cmd/storagenode/entrypoint @@ -14,7 +14,6 @@ RUN_PARAMS="${RUN_PARAMS:-} --contact.external-address=${ADDRESS}" RUN_PARAMS="${RUN_PARAMS:-} --operator.email=${EMAIL}" RUN_PARAMS="${RUN_PARAMS:-} --operator.wallet=${WALLET}" RUN_PARAMS="${RUN_PARAMS:-} --console.address=:14002" -RUN_PARAMS="${RUN_PARAMS:-} --storage.allocated-bandwidth=${BANDWIDTH}" RUN_PARAMS="${RUN_PARAMS:-} --storage.allocated-disk-space=${STORAGE}" exec ./storagenode run $RUN_PARAMS "$@" diff --git a/cmd/storj-sim/network.go b/cmd/storj-sim/network.go index 0fd573def..63d5e8308 100644 --- a/cmd/storj-sim/network.go +++ b/cmd/storj-sim/network.go @@ -568,7 +568,6 @@ func newNetwork(flags *Flags) (*Processes, error) { "--operator.wallet", "0x0123456789012345678901234567890123456789", "--storage2.monitor.minimum-disk-space", "0", - "--storage2.monitor.minimum-bandwidth", "0", "--server.extensions.revocation=false", "--server.use-peer-ca-whitelist=false", diff --git a/installer/windows/AllocatedBandwidthConfig.wxs b/installer/windows/AllocatedBandwidthConfig.wxs deleted file mode 100644 index 2d9090966..000000000 --- a/installer/windows/AllocatedBandwidthConfig.wxs +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - 1 - - - - - - - - - - - - - - Learn how to calculate the maximum monthly bandwidth you can enter here.]]> - - - - - diff --git a/installer/windows/CustomInstallDir.wxs b/installer/windows/CustomInstallDir.wxs index f460b4373..318f558e9 100644 --- a/installer/windows/CustomInstallDir.wxs +++ b/installer/windows/CustomInstallDir.wxs @@ -12,7 +12,6 @@ First-time install dialog sequence: - PublicAddressConfigDlg - StorageDirConfigDlg - AllocatedStorageConfigDlg - - AllocatedBandwidthConfigDlg - WixUI_VerifyReadyDlg Maintenance dialog sequence: @@ -31,7 +30,6 @@ Patch dialog sequence: - @@ -105,15 +103,9 @@ Patch dialog sequence: 1 1 "1"]]> - STORJ_STORAGE_VALID="1" + STORJ_STORAGE_VALID="1" - 1 - 1 - 1 - "1"]]> - STORJ_BANDWIDTH_VALID="1" - - NOT Installed AND NOT WIX_UPGRADE_DETECTED + NOT Installed AND NOT WIX_UPGRADE_DETECTED Installed AND NOT PATCH AND NOT WIX_UPGRADE_DETECTED Installed AND PATCH AND NOT WIX_UPGRADE_DETECTED diff --git a/installer/windows/Product.wxs b/installer/windows/Product.wxs index 0b816e126..d24c05d9b 100644 --- a/installer/windows/Product.wxs +++ b/installer/windows/Product.wxs @@ -93,7 +93,6 @@ INSTALLFOLDER STORAGEDIR 1.0 - 2.0 IDENTITYDIR @@ -121,7 +120,7 @@ + ExeCommand=""[INSTALLFOLDER]storagenode.exe" setup --config-dir "[INSTALLFOLDER]\" --identity-dir "[IDENTITYDIR]\" --operator.email "[STORJ_EMAIL]" --operator.wallet "[STORJ_WALLET]" --contact.external-address "[STORJ_PUBLIC_ADDRESS]" --storage.path "[STORAGEDIR]\" --storage.allocated-disk-space "[STORJ_STORAGE] TB" --log.output "winfile:///[INSTALLFOLDER]\storagenode.log"" /> diff --git a/installer/windows/Storj/CustomAction.cs b/installer/windows/Storj/CustomAction.cs index e7a47a342..9ab48eadf 100644 --- a/installer/windows/Storj/CustomAction.cs +++ b/installer/windows/Storj/CustomAction.cs @@ -94,27 +94,6 @@ namespace Storj return ActionResult.Success; } - [CustomAction] - public static ActionResult ValidateBandwidth(Session session) - { - string bandwidthStr = session["STORJ_BANDWIDTH"]; - - try - { - new CustomActionRunner().ValidateBandwidth(bandwidthStr); - } - catch (ArgumentException e) - { - // Allocated Bandwidth is invalid - session["STORJ_BANDWIDTH_VALID"] = e.Message; - return ActionResult.Success; - } - - // Allocated Bandwidth value is valid - session["STORJ_BANDWIDTH_VALID"] = "1"; - return ActionResult.Success; - } - [CustomAction] public static ActionResult ExtractInstallDir(Session session) { @@ -263,24 +242,6 @@ namespace Storj } } - public void ValidateBandwidth(string bandwidthStr) - { - if (string.IsNullOrEmpty(bandwidthStr)) - { - throw new ArgumentException("The value cannot be empty."); - } - - if (!double.TryParse(bandwidthStr, NumberStyles.Number, CultureInfo.CreateSpecificCulture("en-US"), out double bandwidth)) - { - throw new ArgumentException(string.Format("'{0}' is not a valid number.", bandwidthStr)); - } - - if (bandwidth < 2.0) - { - throw new ArgumentException("The allocated bandwidth cannot be less than 2 TB."); - } - } - public string ExtractInstallDir(string serviceCmd) { if (string.IsNullOrEmpty(serviceCmd)) diff --git a/installer/windows/StorjTests/StorjTests.csproj b/installer/windows/StorjTests/StorjTests.csproj index b23bb9c49..04e3ab6a5 100644 --- a/installer/windows/StorjTests/StorjTests.csproj +++ b/installer/windows/StorjTests/StorjTests.csproj @@ -84,7 +84,6 @@ - diff --git a/installer/windows/StorjTests/ValidateBandwidthTests.cs b/installer/windows/StorjTests/ValidateBandwidthTests.cs deleted file mode 100644 index 37dff33ca..000000000 --- a/installer/windows/StorjTests/ValidateBandwidthTests.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Storj; - -namespace StorjTests -{ - [TestClass] - public class ValidateBandwidthTests - { - [TestMethod] - [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] - public void NullBandwidth() - { - new CustomActionRunner().ValidateBandwidth(null); - } - - [TestMethod] - [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] - public void EmptyBandwidth() - { - new CustomActionRunner().ValidateBandwidth(""); - } - - [TestMethod] - [ExpectedExceptionWithMessage(typeof(ArgumentException), "'some random text' is not a valid number.")] - public void InvalidNumber() - { - new CustomActionRunner().ValidateBandwidth("some random text"); - } - - [TestMethod] - [ExpectedExceptionWithMessage(typeof(ArgumentException), "The allocated bandwidth cannot be less than 2 TB.")] - public void TooSmall() - { - new CustomActionRunner().ValidateBandwidth("1.41"); - } - - [TestMethod] - public void ValidBandwidth() - { - new CustomActionRunner().ValidateBandwidth("3.14"); - } - } -} diff --git a/installer/windows/windows.wixproj b/installer/windows/windows.wixproj index b4fadd0b3..04f313185 100644 --- a/installer/windows/windows.wixproj +++ b/installer/windows/windows.wixproj @@ -26,7 +26,6 @@ - diff --git a/monkit.lock b/monkit.lock index 1394e5482..0c570816d 100644 --- a/monkit.lock +++ b/monkit.lock @@ -90,5 +90,3 @@ storj.io/storj/satellite/satellitedb."audit_reputation_beta" FloatVal storj.io/storj/storage/filestore."open_file_in_trash" Meter storj.io/storj/storagenode/contact."satellite_contact_request" Meter storj.io/storj/storagenode/gracefulexit."satellite_gracefulexit_request" Meter -storj.io/storj/storagenode/monitor."allocated_bandwidth" IntVal -storj.io/storj/storagenode/monitor."used_bandwidth" IntVal diff --git a/private/testplanet/storagenode.go b/private/testplanet/storagenode.go index ccf844981..246e96f0c 100644 --- a/private/testplanet/storagenode.go +++ b/private/testplanet/storagenode.go @@ -98,7 +98,6 @@ func (planet *Planet) newStorageNodes(count int, whitelistedSatellites storj.Nod Storage: piecestore.OldConfig{ Path: filepath.Join(storageDir, "pieces/"), AllocatedDiskSpace: 1 * memory.GB, - AllocatedBandwidth: memory.TB, KBucketRefreshInterval: defaultInterval, }, Collector: collector.Config{ @@ -128,7 +127,6 @@ func (planet *Planet) newStorageNodes(count int, whitelistedSatellites storj.Nod MaxSleep: 0, }, Monitor: monitor.Config{ - MinimumBandwidth: 100 * memory.MB, MinimumDiskSpace: 100 * memory.MB, NotifyLowDiskCooldown: defaultInterval, }, diff --git a/satellite/audit/disqualification_test.go b/satellite/audit/disqualification_test.go index 4c0ee2ec0..37316fa89 100644 --- a/satellite/audit/disqualification_test.go +++ b/satellite/audit/disqualification_test.go @@ -175,7 +175,6 @@ func TestDisqualifiedNodesGetNoUpload(t *testing.T) { request := overlay.FindStorageNodesRequest{ MinimumRequiredNodes: 4, RequestedCount: 0, - FreeBandwidth: 0, ExcludedNodes: nil, MinimumVersion: "", // semver or empty } diff --git a/satellite/gracefulexit/endpoint.go b/satellite/gracefulexit/endpoint.go index 8ab51be90..607b1c3d5 100644 --- a/satellite/gracefulexit/endpoint.go +++ b/satellite/gracefulexit/endpoint.go @@ -396,7 +396,6 @@ func (endpoint *Endpoint) processIncomplete(ctx context.Context, stream processS // get replacement node request := &overlay.FindStorageNodesRequest{ RequestedCount: 1, - FreeBandwidth: pieceSize, ExcludedNodes: excludedNodeIDs, } diff --git a/satellite/metainfo/metainfo.go b/satellite/metainfo/metainfo.go index be44bee71..1c998b5c6 100644 --- a/satellite/metainfo/metainfo.go +++ b/satellite/metainfo/metainfo.go @@ -201,7 +201,6 @@ func (endpoint *Endpoint) CreateSegmentOld(ctx context.Context, req *pb.SegmentW request := overlay.FindStorageNodesRequest{ RequestedCount: int(req.Redundancy.Total), - FreeBandwidth: maxPieceSize, } nodes, err := endpoint.overlay.FindStorageNodes(ctx, request) if err != nil { @@ -1483,7 +1482,6 @@ func (endpoint *Endpoint) BeginSegment(ctx context.Context, req *pb.SegmentBegin request := overlay.FindStorageNodesRequest{ RequestedCount: redundancy.TotalCount(), - FreeBandwidth: maxPieceSize, } nodes, err := endpoint.overlay.FindStorageNodes(ctx, request) if err != nil { diff --git a/satellite/overlay/benchmark_test.go b/satellite/overlay/benchmark_test.go index 42672543e..5669af6f4 100644 --- a/satellite/overlay/benchmark_test.go +++ b/satellite/overlay/benchmark_test.go @@ -108,8 +108,7 @@ func BenchmarkOverlay(b *testing.B) { Email: "a@mail.test", }, Capacity: &pb.NodeCapacity{ - FreeBandwidth: 1000, - FreeDisk: 1000, + FreeDisk: 1000, }, Version: &pb.NodeVersion{ Version: "1.0.0", @@ -141,8 +140,7 @@ func BenchmarkOverlay(b *testing.B) { }, IsUp: true, Capacity: &pb.NodeCapacity{ - FreeBandwidth: int64(i), - FreeDisk: int64(i), + FreeDisk: int64(i), }, Operator: &pb.NodeOperator{ Email: "a@mail.test", diff --git a/satellite/overlay/selection_test.go b/satellite/overlay/selection_test.go index b3447f894..179895c0a 100644 --- a/satellite/overlay/selection_test.go +++ b/satellite/overlay/selection_test.go @@ -56,8 +56,7 @@ func TestMinimumDiskSpace(t *testing.T) { Address: nodeDossier.Address.GetAddress(), Version: &nodeDossier.Version, Capacity: &pb.NodeCapacity{ - FreeBandwidth: 100000, - FreeDisk: 9 * memory.MB.Int64(), + FreeDisk: 9 * memory.MB.Int64(), }, Operator: &nodeDossier.Operator, }) @@ -76,8 +75,7 @@ func TestMinimumDiskSpace(t *testing.T) { Address: nodeDossier.Address.GetAddress(), Version: &nodeDossier.Version, Capacity: &pb.NodeCapacity{ - FreeBandwidth: 100000, - FreeDisk: 11 * memory.MB.Int64(), + FreeDisk: 11 * memory.MB.Int64(), }, Operator: &nodeDossier.Operator, }) @@ -251,7 +249,6 @@ func testNodeSelection(t *testing.T, ctx *testcontext.Context, planet *testplane } response, err := service.FindStorageNodesWithPreferences(ctx, overlay.FindStorageNodesRequest{ - FreeBandwidth: 0, RequestedCount: tt.RequestCount, ExcludedNodes: excludedNodes, }, &tt.Preferences) @@ -348,7 +345,6 @@ func TestNodeSelectionGracefulExit(t *testing.T) { t.Logf("#%2d. %+v", i, tt) response, err := satellite.Overlay.Service.FindStorageNodesWithPreferences(ctx, overlay.FindStorageNodesRequest{ - FreeBandwidth: 0, RequestedCount: tt.RequestCount, }, &tt.Preferences) @@ -556,7 +552,6 @@ func testDistinctIPs(t *testing.T, ctx *testcontext.Context, planet *testplanet. for _, tt := range tests { response, err := service.FindStorageNodesWithPreferences(ctx, overlay.FindStorageNodesRequest{ - FreeBandwidth: 0, RequestedCount: tt.requestCount, }, &tt.preferences) if tt.shouldFailWith != nil { diff --git a/satellite/overlay/service.go b/satellite/overlay/service.go index 5adb80f2f..700c7002d 100644 --- a/satellite/overlay/service.go +++ b/satellite/overlay/service.go @@ -111,14 +111,12 @@ type NodeCheckInInfo struct { type FindStorageNodesRequest struct { MinimumRequiredNodes int RequestedCount int - FreeBandwidth int64 ExcludedNodes []storj.NodeID MinimumVersion string // semver or empty } // NodeCriteria are the requirements for selecting nodes type NodeCriteria struct { - FreeBandwidth int64 FreeDisk int64 AuditCount int64 UptimeCount int64 @@ -286,7 +284,6 @@ func (service *Service) FindStorageNodesWithPreferences(ctx context.Context, req var newNodes []*pb.Node if newNodeCount > 0 { newNodes, err = service.db.SelectNewStorageNodes(ctx, newNodeCount, &NodeCriteria{ - FreeBandwidth: req.FreeBandwidth, FreeDisk: preferences.MinimumDiskSpace.Int64(), AuditCount: preferences.AuditCount, ExcludedNodes: excludedNodes, @@ -309,7 +306,6 @@ func (service *Service) FindStorageNodesWithPreferences(ctx context.Context, req } criteria := NodeCriteria{ - FreeBandwidth: req.FreeBandwidth, FreeDisk: preferences.MinimumDiskSpace.Int64(), AuditCount: preferences.AuditCount, UptimeCount: preferences.UptimeCount, diff --git a/satellite/overlay/service_test.go b/satellite/overlay/service_test.go index 839488247..5e4e8625b 100644 --- a/satellite/overlay/service_test.go +++ b/satellite/overlay/service_test.go @@ -271,7 +271,6 @@ func TestNodeInfo(t *testing.T) { assert.NotEmpty(t, node.Operator.Email) assert.NotEmpty(t, node.Operator.Wallet) assert.Equal(t, planet.StorageNodes[0].Local().Operator, node.Operator) - assert.NotEmpty(t, node.Capacity.FreeBandwidth) assert.NotEmpty(t, node.Capacity.FreeDisk) assert.Equal(t, planet.StorageNodes[0].Local().Capacity, node.Capacity) assert.NotEmpty(t, node.Version.Version) @@ -352,8 +351,7 @@ func TestUpdateCheckIn(t *testing.T) { }, IsUp: true, Capacity: &pb.NodeCapacity{ - FreeBandwidth: int64(1234), - FreeDisk: int64(5678), + FreeDisk: int64(5678), }, Operator: &pb.NodeOperator{ Email: expectedEmail, @@ -381,8 +379,7 @@ func TestUpdateCheckIn(t *testing.T) { Wallet: info.Operator.GetWallet(), }, Capacity: pb.NodeCapacity{ - FreeBandwidth: info.Capacity.GetFreeBandwidth(), - FreeDisk: info.Capacity.GetFreeDisk(), + FreeDisk: info.Capacity.GetFreeDisk(), }, Reputation: overlay.NodeStats{ UptimeCount: 1, @@ -434,9 +431,6 @@ func TestUpdateCheckIn(t *testing.T) { Address: expectedAddress, }, IsUp: true, - Capacity: &pb.NodeCapacity{ - FreeBandwidth: int64(12355), - }, Version: &pb.NodeVersion{ Version: "v0.1.0", CommitHash: "abc123", @@ -454,7 +448,6 @@ func TestUpdateCheckIn(t *testing.T) { require.True(t, updatedNode.Reputation.LastContactFailure.Equal(time.Time{}.UTC())) require.Equal(t, updatedNode.Address.GetAddress(), expectedAddress) require.Equal(t, updatedNode.Reputation.UptimeSuccessCount, actualNode.Reputation.UptimeSuccessCount+1) - require.Equal(t, updatedNode.Capacity.GetFreeBandwidth(), int64(12355)) require.Equal(t, updatedInfo.Version.GetVersion(), updatedNode.Version.GetVersion()) require.Equal(t, updatedInfo.Version.GetCommitHash(), updatedNode.Version.GetCommitHash()) require.Equal(t, updatedInfo.Version.GetRelease(), updatedNode.Version.GetRelease()) @@ -468,9 +461,6 @@ func TestUpdateCheckIn(t *testing.T) { Address: "9.8.7.6", }, IsUp: false, - Capacity: &pb.NodeCapacity{ - FreeBandwidth: int64(12355), - }, Version: &pb.NodeVersion{ Version: "v0.0.0", CommitHash: "", diff --git a/satellite/repair/repairer/segments.go b/satellite/repair/repairer/segments.go index 800b5d944..ea2a8fc76 100644 --- a/satellite/repair/repairer/segments.go +++ b/satellite/repair/repairer/segments.go @@ -100,8 +100,6 @@ func (repairer *SegmentRepairer) Repair(ctx context.Context, path storj.Path) (s return true, Error.Wrap(err) } - pieceSize := eestream.CalcPieceSize(pointer.GetSegmentSize(), redundancy) - var excludeNodeIDs storj.NodeIDList var healthyPieces, unhealthyPieces []*pb.RemotePiece healthyMap := make(map[int32]bool) @@ -171,7 +169,6 @@ func (repairer *SegmentRepairer) Repair(ctx context.Context, path storj.Path) (s // Request Overlay for n-h new storage nodes request := overlay.FindStorageNodesRequest{ RequestedCount: requestCount, - FreeBandwidth: pieceSize, ExcludedNodes: excludeNodeIDs, } newNodes, err := repairer.overlay.FindStorageNodes(ctx, request) diff --git a/satellite/satellitedb/overlaycache.go b/satellite/satellitedb/overlaycache.go index fed876123..53c11a119 100644 --- a/satellite/satellitedb/overlaycache.go +++ b/satellite/satellitedb/overlaycache.go @@ -47,13 +47,12 @@ func (cache *overlaycache) SelectStorageNodes(ctx context.Context, count int, cr WHERE disqualified IS NULL AND exit_initiated_at IS NULL AND type = ? - AND free_bandwidth >= ? AND free_disk >= ? AND total_audit_count >= ? AND total_uptime_count >= ? AND last_contact_success > ?` args := append(make([]interface{}, 0, 13), - nodeType, criteria.FreeBandwidth, criteria.FreeDisk, criteria.AuditCount, + nodeType, criteria.FreeDisk, criteria.AuditCount, criteria.UptimeCount, time.Now().Add(-criteria.OnlineWindow)) if criteria.MinimumVersion != "" { @@ -103,12 +102,11 @@ func (cache *overlaycache) SelectNewStorageNodes(ctx context.Context, count int, WHERE disqualified IS NULL AND exit_initiated_at IS NULL AND type = ? - AND free_bandwidth >= ? AND free_disk >= ? AND (total_audit_count < ? OR total_uptime_count < ?) AND last_contact_success > ?` args := append(make([]interface{}, 0, 10), - nodeType, criteria.FreeBandwidth, criteria.FreeDisk, criteria.AuditCount, criteria.UptimeCount, time.Now().Add(-criteria.OnlineWindow)) + nodeType, criteria.FreeDisk, criteria.AuditCount, criteria.UptimeCount, time.Now().Add(-criteria.OnlineWindow)) if criteria.MinimumVersion != "" { v, err := version.NewSemVer(criteria.MinimumVersion) @@ -193,7 +191,7 @@ func (cache *overlaycache) queryNodes(ctx context.Context, excludedNodes []storj var rows *sql.Rows rows, err = cache.db.Query(ctx, cache.db.Rebind(`SELECT id, type, address, last_net, - free_bandwidth, free_disk, total_audit_count, audit_success_count, + free_disk, total_audit_count, audit_success_count, total_uptime_count, uptime_success_count, disqualified, audit_reputation_alpha, audit_reputation_beta FROM nodes @@ -210,7 +208,7 @@ func (cache *overlaycache) queryNodes(ctx context.Context, excludedNodes []storj for rows.Next() { dbNode := &dbx.Node{} err = rows.Scan(&dbNode.Id, &dbNode.Type, - &dbNode.Address, &dbNode.LastNet, &dbNode.FreeBandwidth, &dbNode.FreeDisk, + &dbNode.Address, &dbNode.LastNet, &dbNode.FreeDisk, &dbNode.TotalAuditCount, &dbNode.AuditSuccessCount, &dbNode.TotalUptimeCount, &dbNode.UptimeSuccessCount, &dbNode.Disqualified, &dbNode.AuditReputationAlpha, &dbNode.AuditReputationBeta, @@ -257,7 +255,7 @@ func (cache *overlaycache) queryNodesDistinct(ctx context.Context, excludedNodes SELECT * FROM ( SELECT DISTINCT ON (last_net) last_net, -- choose at max 1 node from this IP or network - id, type, address, free_bandwidth, free_disk, total_audit_count, + id, type, address, free_disk, total_audit_count, audit_success_count, total_uptime_count, uptime_success_count, audit_reputation_alpha, audit_reputation_beta FROM nodes @@ -276,7 +274,7 @@ func (cache *overlaycache) queryNodesDistinct(ctx context.Context, excludedNodes for rows.Next() { dbNode := &dbx.Node{} err = rows.Scan(&dbNode.LastNet, &dbNode.Id, &dbNode.Type, - &dbNode.Address, &dbNode.FreeBandwidth, &dbNode.FreeDisk, + &dbNode.Address, &dbNode.FreeDisk, &dbNode.TotalAuditCount, &dbNode.AuditSuccessCount, &dbNode.TotalUptimeCount, &dbNode.UptimeSuccessCount, &dbNode.AuditReputationAlpha, &dbNode.AuditReputationBeta, @@ -517,66 +515,45 @@ func (cache *overlaycache) UpdateAddress(ctx context.Context, info *pb.Node, def return overlay.ErrEmptyNode } - err = cache.db.WithTx(ctx, func(ctx context.Context, tx *dbx.Tx) (err error) { - // TODO: use upsert - _, err = tx.Get_Node_By_Id(ctx, dbx.Node_Id(info.Id.Bytes())) - - address := info.Address - if address == nil { - address = &pb.NodeAddress{} - } - - if err != nil { - if err != sql.ErrNoRows { - return err - } - // add the node to DB for first time - err = tx.CreateNoReturn_Node( - ctx, - dbx.Node_Id(info.Id.Bytes()), - dbx.Node_Address(address.Address), - dbx.Node_LastNet(info.LastIp), - dbx.Node_Protocol(int(address.Transport)), - dbx.Node_Type(int(pb.NodeType_INVALID)), - dbx.Node_Email(""), - dbx.Node_Wallet(""), - dbx.Node_FreeBandwidth(-1), - dbx.Node_FreeDisk(-1), - dbx.Node_Major(0), - dbx.Node_Minor(0), - dbx.Node_Patch(0), - dbx.Node_Hash(""), - dbx.Node_Timestamp(time.Time{}), - dbx.Node_Release(false), - dbx.Node_Latency90(0), - dbx.Node_AuditSuccessCount(0), - dbx.Node_TotalAuditCount(0), - dbx.Node_UptimeSuccessCount(0), - dbx.Node_TotalUptimeCount(0), - dbx.Node_LastContactSuccess(time.Now()), - dbx.Node_LastContactFailure(time.Time{}), - dbx.Node_Contained(false), - dbx.Node_AuditReputationAlpha(defaults.AuditReputationAlpha0), - dbx.Node_AuditReputationBeta(defaults.AuditReputationBeta0), - //TODO: remove uptime reputation after finishing db migration - dbx.Node_UptimeReputationAlpha(0), - dbx.Node_UptimeReputationBeta(0), - dbx.Node_ExitSuccess(false), - dbx.Node_Create_Fields{ - Disqualified: dbx.Node_Disqualified_Null(), - }, + address := info.Address + if address == nil { + address = &pb.NodeAddress{} + } + query := ` + INSERT INTO nodes + ( + id, address, last_net, protocol, type, + email, wallet, free_disk, + uptime_success_count, total_uptime_count, + last_contact_success, + last_contact_failure, + audit_reputation_alpha, audit_reputation_beta, + major, minor, patch, hash, timestamp, release ) - } else { - err = tx.UpdateNoReturn_Node_By_Id(ctx, dbx.Node_Id(info.Id.Bytes()), - dbx.Node_Update_Fields{ - Address: dbx.Node_Address(address.Address), - LastNet: dbx.Node_LastNet(info.LastIp), - Protocol: dbx.Node_Protocol(int(address.Transport)), - }) - } - - return err - }) + VALUES ( + $1, $2, $3, $4, $5, + '', '', -1, + 0, 0, + $8::timestamptz, + '0001-01-01 00:00:00+00'::timestamptz, + $6, $7, + 0, 0, 0, '', '0001-01-01 00:00:00+00'::timestamptz, false + ) + ON CONFLICT (id) + DO UPDATE + SET + address=$2, + last_net=$3, + protocol=$4 + ` + _, err = cache.db.ExecContext(ctx, query, + // args $1 - $5 + info.Id.Bytes(), address.Address, info.LastIp, int(address.Transport), int(pb.NodeType_INVALID), + // args $6 - $7 + defaults.AuditReputationAlpha0, defaults.AuditReputationBeta0, + // args $8 + time.Now(), + ) return Error.Wrap(err) } @@ -702,7 +679,7 @@ func (cache *overlaycache) UpdateStats(ctx context.Context, updateReq *overlay.U } // UpdateNodeInfo updates the following fields for a given node ID: -// wallet, email for node operator, free disk and bandwidth capacity, and version +// wallet, email for node operator, free disk, and version func (cache *overlaycache) UpdateNodeInfo(ctx context.Context, nodeID storj.NodeID, nodeInfo *pb.InfoResponse) (stats *overlay.NodeDossier, err error) { defer mon.Task()(&ctx)(&err) @@ -717,7 +694,6 @@ func (cache *overlaycache) UpdateNodeInfo(ctx context.Context, nodeID storj.Node } if nodeInfo.GetCapacity() != nil { updateFields.FreeDisk = dbx.Node_FreeDisk(nodeInfo.GetCapacity().GetFreeDisk()) - updateFields.FreeBandwidth = dbx.Node_FreeBandwidth(nodeInfo.GetCapacity().GetFreeBandwidth()) } if nodeInfo.GetVersion() != nil { semVer, err := version.NewSemVer(nodeInfo.GetVersion().GetVersion()) @@ -1132,8 +1108,7 @@ func convertDBNode(ctx context.Context, info *dbx.Node) (_ *overlay.NodeDossier, Wallet: info.Wallet, }, Capacity: pb.NodeCapacity{ - FreeBandwidth: info.FreeBandwidth, - FreeDisk: info.FreeDisk, + FreeDisk: info.FreeDisk, }, Reputation: *getNodeStats(info), Version: pb.NodeVersion{ @@ -1426,7 +1401,7 @@ func (cache *overlaycache) UpdateCheckIn(ctx context.Context, node overlay.NodeC INSERT INTO nodes ( id, address, last_net, protocol, type, - email, wallet, free_bandwidth, free_disk, + email, wallet, free_disk, uptime_success_count, total_uptime_count, last_contact_success, last_contact_failure, @@ -1436,17 +1411,17 @@ func (cache *overlaycache) UpdateCheckIn(ctx context.Context, node overlay.NodeC ) VALUES ( $1, $2, $3, $4, $5, - $6, $7, $8, $9, - $10::bool::int, 1, - CASE WHEN $10::bool IS TRUE THEN $19::timestamptz + $6, $7, $8, + $9::bool::int, 1, + CASE WHEN $9::bool IS TRUE THEN $18::timestamptz ELSE '0001-01-01 00:00:00+00'::timestamptz END, - CASE WHEN $10::bool IS FALSE THEN $19::timestamptz + CASE WHEN $9::bool IS FALSE THEN $18::timestamptz ELSE '0001-01-01 00:00:00+00'::timestamptz END, - $11, $12, - $11, $12, - $13, $14, $15, $16, $17, $18 + $10, $11, + $10, $11, + $12, $13, $14, $15, $16, $17 ) ON CONFLICT (id) DO UPDATE @@ -1456,32 +1431,32 @@ func (cache *overlaycache) UpdateCheckIn(ctx context.Context, node overlay.NodeC protocol=$4, email=$6, wallet=$7, - free_bandwidth=$8, - free_disk=$9, - major=$13, minor=$14, patch=$15, hash=$16, timestamp=$17, release=$18, + + free_disk=$8, + major=$12, minor=$13, patch=$14, hash=$15, timestamp=$16, release=$17, total_uptime_count=nodes.total_uptime_count+1, - uptime_success_count = nodes.uptime_success_count + $10::bool::int, - last_contact_success = CASE WHEN $10::bool IS TRUE - THEN $19::timestamptz + uptime_success_count = nodes.uptime_success_count + $9::bool::int, + last_contact_success = CASE WHEN $9::bool IS TRUE + THEN $18::timestamptz ELSE nodes.last_contact_success END, - last_contact_failure = CASE WHEN $10::bool IS FALSE - THEN $19::timestamptz + last_contact_failure = CASE WHEN $9::bool IS FALSE + THEN $18::timestamptz ELSE nodes.last_contact_failure END; ` _, err = cache.db.ExecContext(ctx, query, // args $1 - $5 node.NodeID.Bytes(), node.Address.GetAddress(), node.LastIP, node.Address.GetTransport(), int(pb.NodeType_STORAGE), - // args $6 - $9 - node.Operator.GetEmail(), node.Operator.GetWallet(), node.Capacity.GetFreeBandwidth(), node.Capacity.GetFreeDisk(), - // args $10 + // args $6 - $8 + node.Operator.GetEmail(), node.Operator.GetWallet(), node.Capacity.GetFreeDisk(), + // args $9 node.IsUp, - // args $11 - $12 + // args $10 - $11 config.AuditReputationAlpha0, config.AuditReputationBeta0, - // args $13 - $18 + // args $12 - $17 semVer.Major, semVer.Minor, semVer.Patch, node.Version.GetCommitHash(), node.Version.Timestamp, node.Version.GetRelease(), - // args $19 + // args $18 timestamp, ) if err != nil { diff --git a/storagenode/console/service.go b/storagenode/console/service.go index 5d7c89187..832879fb7 100644 --- a/storagenode/console/service.go +++ b/storagenode/console/service.go @@ -46,7 +46,6 @@ type Service struct { version *checker.Service pingStats *contact.PingStats - allocatedBandwidth memory.Size allocatedDiskSpace memory.Size walletAddress string @@ -56,7 +55,7 @@ type Service struct { // NewService returns new instance of Service. func NewService(log *zap.Logger, bandwidth bandwidth.DB, pieceStore *pieces.Store, version *checker.Service, - allocatedBandwidth, allocatedDiskSpace memory.Size, walletAddress string, versionInfo version.Info, trust *trust.Pool, + allocatedDiskSpace memory.Size, walletAddress string, versionInfo version.Info, trust *trust.Pool, reputationDB reputation.DB, storageUsageDB storageusage.DB, pingStats *contact.PingStats, contact *contact.Service) (*Service, error) { if log == nil { return nil, errs.New("log can't be nil") @@ -91,7 +90,6 @@ func NewService(log *zap.Logger, bandwidth bandwidth.DB, pieceStore *pieces.Stor pieceStore: pieceStore, version: version, pingStats: pingStats, - allocatedBandwidth: allocatedBandwidth, allocatedDiskSpace: allocatedDiskSpace, contact: contact, walletAddress: walletAddress, @@ -177,8 +175,7 @@ func (s *Service) GetDashboardData(ctx context.Context) (_ *Dashboard, err error } data.Bandwidth = BandwidthInfo{ - Used: bandwidthUsage, - Available: s.allocatedBandwidth.Int64(), + Used: bandwidthUsage, } return data, nil diff --git a/storagenode/contact/contact_test.go b/storagenode/contact/contact_test.go index b13312cdb..424b0a4a8 100644 --- a/storagenode/contact/contact_test.go +++ b/storagenode/contact/contact_test.go @@ -57,8 +57,7 @@ func TestNodeInfoUpdated(t *testing.T) { oldCapacity := oldInfo.Capacity newCapacity := pb.NodeCapacity{ - FreeBandwidth: 0, - FreeDisk: 0, + FreeDisk: 0, } require.NotEqual(t, oldCapacity, newCapacity) node.Contact.Service.UpdateSelf(&newCapacity) diff --git a/storagenode/inspector/inspector.go b/storagenode/inspector/inspector.go index 7c74c3384..c324fc32d 100644 --- a/storagenode/inspector/inspector.go +++ b/storagenode/inspector/inspector.go @@ -92,12 +92,11 @@ func (inspector *Endpoint) retrieveStats(ctx context.Context) (_ *pb.StatSummary totalUsedBandwidth := usage.Total() return &pb.StatSummaryResponse{ - UsedSpace: piecesContentSize, - AvailableSpace: inspector.pieceStoreConfig.AllocatedDiskSpace.Int64() - piecesContentSize, - UsedIngress: ingress, - UsedEgress: egress, - UsedBandwidth: totalUsedBandwidth, - AvailableBandwidth: inspector.pieceStoreConfig.AllocatedBandwidth.Int64() - totalUsedBandwidth, + UsedSpace: piecesContentSize, + AvailableSpace: inspector.pieceStoreConfig.AllocatedDiskSpace.Int64() - piecesContentSize, + UsedIngress: ingress, + UsedEgress: egress, + UsedBandwidth: totalUsedBandwidth, }, nil } diff --git a/storagenode/inspector/inspector_test.go b/storagenode/inspector/inspector_test.go index 7246e5b24..0c408c49d 100644 --- a/storagenode/inspector/inspector_test.go +++ b/storagenode/inspector/inspector_test.go @@ -26,7 +26,6 @@ func TestInspectorStats(t *testing.T) { Satellite: testplanet.ReconfigureRS(requiredShares, 3, 4, 5), }, }, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) { - var availableBandwidth int64 var availableSpace int64 for _, storageNode := range planet.StorageNodes { response, err := storageNode.Storage2.Inspector.Stats(ctx, &pb.StatsRequest{}) @@ -36,11 +35,9 @@ func TestInspectorStats(t *testing.T) { assert.Zero(t, response.UsedSpace) assert.Zero(t, response.UsedEgress) assert.Zero(t, response.UsedIngress) - assert.True(t, response.AvailableBandwidth > 0) assert.True(t, response.AvailableSpace > 0) // assume that all storage node should have the same initial values - availableBandwidth = response.AvailableBandwidth availableSpace = response.AvailableSpace } @@ -74,7 +71,6 @@ func TestInspectorStats(t *testing.T) { if response.UsedSpace > 0 { assert.NotZero(t, response.UsedBandwidth) assert.Equal(t, response.UsedBandwidth, response.UsedIngress+response.UsedEgress) - assert.Equal(t, availableBandwidth-response.UsedBandwidth, response.AvailableBandwidth) assert.Equal(t, availableSpace-response.UsedSpace, response.AvailableSpace) assert.Equal(t, response.UsedSpace, response.UsedBandwidth-response.UsedEgress) @@ -84,8 +80,6 @@ func TestInspectorStats(t *testing.T) { } } else { assert.Zero(t, response.UsedSpace) - // TODO track why this is failing - //assert.Equal(t, availableBandwidth, response.AvailableBandwidth) assert.Equal(t, availableSpace, response.AvailableSpace) } } diff --git a/storagenode/monitor/monitor.go b/storagenode/monitor/monitor.go index af2d24ddf..197f6a45e 100644 --- a/storagenode/monitor/monitor.go +++ b/storagenode/monitor/monitor.go @@ -31,7 +31,7 @@ var ( type Config struct { Interval time.Duration `help:"how frequently Kademlia bucket should be refreshed with node stats" default:"1h0m0s"` MinimumDiskSpace memory.Size `help:"how much disk space a node at minimum has to advertise" default:"500GB"` - MinimumBandwidth memory.Size `help:"how much bandwidth a node at minimum has to advertise" default:"500GB"` + MinimumBandwidth memory.Size `help:"how much bandwidth a node at minimum has to advertise (deprecated)" default:"0TB"` NotifyLowDiskCooldown time.Duration `help:"minimum length of time between capacity reports" default:"10m" hidden:"true"` } @@ -44,23 +44,19 @@ type Service struct { contact *contact.Service usageDB bandwidth.DB allocatedDiskSpace int64 - allocatedBandwidth int64 cooldown *sync2.Cooldown Loop *sync2.Cycle Config Config } -// TODO: should it be responsible for monitoring actual bandwidth as well? - // NewService creates a new storage node monitoring service. -func NewService(log *zap.Logger, store *pieces.Store, contact *contact.Service, usageDB bandwidth.DB, allocatedDiskSpace, allocatedBandwidth int64, interval time.Duration, reportCapacity func(context.Context), config Config) *Service { +func NewService(log *zap.Logger, store *pieces.Store, contact *contact.Service, usageDB bandwidth.DB, allocatedDiskSpace int64, interval time.Duration, reportCapacity func(context.Context), config Config) *Service { return &Service{ log: log, store: store, contact: contact, usageDB: usageDB, allocatedDiskSpace: allocatedDiskSpace, - allocatedBandwidth: allocatedBandwidth, cooldown: sync2.NewCooldown(config.NotifyLowDiskCooldown), Loop: sync2.NewCycle(interval), Config: config, @@ -84,17 +80,6 @@ func (service *Service) Run(ctx context.Context) (err error) { return err } - usedBandwidth, err := service.usedBandwidth(ctx) - if err != nil { - return err - } - - if usedBandwidth > service.allocatedBandwidth { - service.log.Warn("Exceed the allowed Bandwidth setting") - } else { - service.log.Info("Remaining Bandwidth", zap.Int64("bytes", service.allocatedBandwidth-usedBandwidth)) - } - // check your hard drive is big enough // first time setup as a piece node server if totalUsed == 0 && freeDiskSpace < service.allocatedDiskSpace { @@ -121,13 +106,6 @@ func (service *Service) Run(ctx context.Context) (err error) { service.log.Error("Total disk space less than required minimum", zap.Int64("bytes", service.Config.MinimumDiskSpace.Int64())) return Error.New("disk space requirement not met") } - - // Ensure the bandwidth is at least 500GB - if service.allocatedBandwidth < service.Config.MinimumBandwidth.Int64() { - service.log.Error("Total Bandwidth available less than required minimum", zap.Int64("bytes", service.Config.MinimumBandwidth.Int64())) - return Error.New("bandwidth requirement not met") - } - var group errgroup.Group group.Go(func() error { return service.Loop.Run(ctx, func(ctx context.Context) error { @@ -175,14 +153,8 @@ func (service *Service) updateNodeInformation(ctx context.Context) (err error) { return Error.Wrap(err) } - usedBandwidth, err := service.usedBandwidth(ctx) - if err != nil { - return Error.Wrap(err) - } - service.contact.UpdateSelf(&pb.NodeCapacity{ - FreeBandwidth: service.allocatedBandwidth - usedBandwidth, - FreeDisk: service.allocatedDiskSpace - usedSpace, + FreeDisk: service.allocatedDiskSpace - usedSpace, }) return nil @@ -197,15 +169,6 @@ func (service *Service) usedSpace(ctx context.Context) (_ int64, err error) { return usedSpace, nil } -func (service *Service) usedBandwidth(ctx context.Context) (_ int64, err error) { - defer mon.Task()(&ctx)(&err) - usage, err := service.usageDB.MonthSummary(ctx, time.Now()) - if err != nil { - return 0, err - } - return usage, nil -} - // AvailableSpace returns available disk space for upload func (service *Service) AvailableSpace(ctx context.Context) (_ int64, err error) { defer mon.Task()(&ctx)(&err) @@ -221,19 +184,3 @@ func (service *Service) AvailableSpace(ctx context.Context) (_ int64, err error) return allocatedSpace - usedSpace, nil } - -// AvailableBandwidth returns available bandwidth for upload/download -func (service *Service) AvailableBandwidth(ctx context.Context) (_ int64, err error) { - defer mon.Task()(&ctx)(&err) - usage, err := service.usageDB.MonthSummary(ctx, time.Now()) - if err != nil { - return 0, Error.Wrap(err) - } - allocatedBandwidth := service.allocatedBandwidth - - mon.IntVal("allocated_bandwidth").Observe(allocatedBandwidth) //locked - mon.IntVal("used_bandwidth").Observe(usage) //locked - mon.IntVal("available_bandwidth").Observe(allocatedBandwidth - usage) - - return allocatedBandwidth - usage, nil -} diff --git a/storagenode/monitor/monitor_test.go b/storagenode/monitor/monitor_test.go index dfca57444..e3e74b1b8 100644 --- a/storagenode/monitor/monitor_test.go +++ b/storagenode/monitor/monitor_test.go @@ -20,12 +20,8 @@ func TestMonitor(t *testing.T) { testplanet.Run(t, testplanet.Config{ SatelliteCount: 1, StorageNodeCount: 6, UplinkCount: 1, }, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) { - var freeBandwidthInit int64 for _, storageNode := range planet.StorageNodes { storageNode.Storage2.Monitor.Loop.Pause() - - // assume that all storage nodes have the same initial values - freeBandwidthInit = storageNode.Local().Capacity.FreeBandwidth } expectedData := testrand.Bytes(100 * memory.KiB) @@ -36,12 +32,9 @@ func TestMonitor(t *testing.T) { nodeAssertions := 0 for _, storageNode := range planet.StorageNodes { storageNode.Storage2.Monitor.Loop.TriggerWait() - - freeBandwidthNew := storageNode.Local().Capacity.FreeBandwidth stats, err := storageNode.Storage2.Inspector.Stats(ctx, &pb.StatsRequest{}) require.NoError(t, err) if stats.UsedSpace > 0 { - assert.Equal(t, freeBandwidthInit-stats.UsedBandwidth, freeBandwidthNew) nodeAssertions++ } } diff --git a/storagenode/peer.go b/storagenode/peer.go index d5f240b7a..37e84cec3 100644 --- a/storagenode/peer.go +++ b/storagenode/peer.go @@ -407,7 +407,6 @@ func New(log *zap.Logger, full *identity.FullIdentity, db DB, revocationDB exten peer.Contact.Service, peer.DB.Bandwidth(), config.Storage.AllocatedDiskSpace.Int64(), - config.Storage.AllocatedBandwidth.Int64(), //TODO use config.Storage.Monitor.Interval, but for some reason is not set config.Storage.KBucketRefreshInterval, peer.Contact.Chore.Trigger, @@ -515,7 +514,6 @@ func New(log *zap.Logger, full *identity.FullIdentity, db DB, revocationDB exten peer.DB.Bandwidth(), peer.Storage2.Store, peer.Version.Service, - config.Storage.AllocatedBandwidth, config.Storage.AllocatedDiskSpace, config.Operator.Wallet, versionInfo, diff --git a/storagenode/piecestore/endpoint.go b/storagenode/piecestore/endpoint.go index 92b30fad9..9276a876f 100644 --- a/storagenode/piecestore/endpoint.go +++ b/storagenode/piecestore/endpoint.go @@ -46,7 +46,7 @@ type OldConfig struct { Path string `help:"path to store data in" default:"$CONFDIR/storage"` WhitelistedSatellites storj.NodeURLs `help:"a comma-separated list of approved satellite node urls (unused)" devDefault:"" releaseDefault:""` AllocatedDiskSpace memory.Size `user:"true" help:"total allocated disk space in bytes" default:"1TB"` - AllocatedBandwidth memory.Size `user:"true" help:"total allocated bandwidth in bytes" default:"2TB"` + AllocatedBandwidth memory.Size `user:"true" help:"total allocated bandwidth in bytes (deprecated)" default:"0B"` KBucketRefreshInterval time.Duration `help:"how frequently Kademlia bucket should be refreshed with node stats" default:"1h0m0s"` } @@ -269,11 +269,6 @@ func (endpoint *Endpoint) doUpload(stream uploadStream, requestLimit int) (err e return err } - availableBandwidth, err := endpoint.monitor.AvailableBandwidth(ctx) - if err != nil { - return rpcstatus.Wrap(rpcstatus.Internal, err) - } - availableSpace, err := endpoint.monitor.AvailableSpace(ctx) if err != nil { return rpcstatus.Wrap(rpcstatus.Internal, err) @@ -325,7 +320,6 @@ func (endpoint *Endpoint) doUpload(stream uploadStream, requestLimit int) (err e zap.Stringer("Piece ID", limit.PieceId), zap.Stringer("Satellite ID", limit.SatelliteId), zap.Stringer("Action", limit.Action), - zap.Int64("Available Bandwidth", availableBandwidth), zap.Int64("Available Space", availableSpace)) pieceWriter, err = endpoint.store.Writer(ctx, limit.SatelliteId, limit.PieceId) @@ -395,10 +389,6 @@ func (endpoint *Endpoint) doUpload(stream uploadStream, requestLimit int) (err e largestOrder.Amount, pieceWriter.Size()+int64(len(message.Chunk.Data))) } - availableBandwidth -= chunkSize - if availableBandwidth < 0 { - return rpcstatus.Error(rpcstatus.Internal, "out of bandwidth") - } availableSpace -= chunkSize if availableSpace < 0 { return rpcstatus.Error(rpcstatus.Internal, "out of space") @@ -606,12 +596,6 @@ func (endpoint *Endpoint) doDownload(stream downloadStream) (err error) { chunk.Offset+chunk.ChunkSize, pieceReader.Size()) } - availableBandwidth, err := endpoint.monitor.AvailableBandwidth(ctx) - if err != nil { - endpoint.log.Error("error getting available bandwidth", zap.Error(err)) - return rpcstatus.Wrap(rpcstatus.Internal, err) - } - throttle := sync2.NewThrottle() // TODO: see whether this can be implemented without a goroutine @@ -702,11 +686,6 @@ func (endpoint *Endpoint) doDownload(stream downloadStream) (err error) { } chunkSize := message.Order.Amount - largestOrder.Amount - availableBandwidth -= chunkSize - if availableBandwidth < 0 { - return rpcstatus.Error(rpcstatus.ResourceExhausted, "out of bandwidth") - } - if err := throttle.Produce(chunkSize); err != nil { // shouldn't happen since only receiving side is calling Fail return rpcstatus.Wrap(rpcstatus.Internal, err) diff --git a/storagenode/piecestore/verification_test.go b/storagenode/piecestore/verification_test.go index cfa25196c..2ea76a62a 100644 --- a/storagenode/piecestore/verification_test.go +++ b/storagenode/piecestore/verification_test.go @@ -35,7 +35,6 @@ func TestOrderLimitPutValidation(t *testing.T) { pieceExpiration time.Duration orderExpiration time.Duration limit int64 - availableBandwidth int64 availableSpace int64 err string }{ @@ -99,17 +98,6 @@ func TestOrderLimitPutValidation(t *testing.T) { limit: memory.KiB.Int64(), err: "order expired:", }, - { - testName: "allocated bandwidth limit", - pieceID: storj.PieceID{7}, - action: pb.PieceAction_PUT, - serialNumber: storj.SerialNumber{7}, - pieceExpiration: oneWeek, - orderExpiration: oneWeek, - limit: 10 * memory.KiB.Int64(), - availableBandwidth: 5 * memory.KiB.Int64(), - err: "out of bandwidth", - }, { testName: "allocated space limit", pieceID: storj.PieceID{8}, @@ -128,8 +116,6 @@ func TestOrderLimitPutValidation(t *testing.T) { SatelliteCount: 1, StorageNodeCount: 1, UplinkCount: 1, }, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) { - // set desirable bandwidth - setBandwidth(ctx, t, planet, tt.availableBandwidth) // set desirable space setSpace(ctx, t, planet, tt.availableSpace) @@ -246,14 +232,14 @@ func TestOrderLimitGetValidation(t *testing.T) { limit int64 err string }{ - { // allocated bandwidth limit + { // incorrect action - PUT rather than GET pieceID: storj.PieceID{1}, - action: pb.PieceAction_GET, + action: pb.PieceAction_PUT, serialNumber: storj.SerialNumber{1}, pieceExpiration: oneWeek, orderExpiration: oneWeek, limit: 10 * memory.KiB.Int64(), - err: "out of bandwidth", + err: "expected get or get repair or audit action got PUT", }, } { client, err := planet.Uplinks[0].DialPiecestore(ctx, planet.StorageNodes[0]) @@ -289,8 +275,8 @@ func TestOrderLimitGetValidation(t *testing.T) { closeErr := downloader.Close() err = errs.Combine(readErr, closeErr) if tt.err != "" { - assert.Equal(t, 0, len(buffer)) - require.Error(t, err) + assert.Equal(t, 0, len(buffer)) //errors 10240 + require.Error(t, err) //nil require.Contains(t, err.Error(), tt.err) } else { require.NoError(t, err) @@ -299,19 +285,6 @@ func TestOrderLimitGetValidation(t *testing.T) { }) } -func setBandwidth(ctx context.Context, t *testing.T, planet *testplanet.Planet, bandwidth int64) { - if bandwidth == 0 { - return - } - for _, storageNode := range planet.StorageNodes { - availableBandwidth, err := storageNode.Storage2.Monitor.AvailableBandwidth(ctx) - require.NoError(t, err) - diff := (bandwidth - availableBandwidth) * -1 - err = storageNode.DB.Bandwidth().Add(ctx, planet.Satellites[0].ID(), pb.PieceAction_GET, diff, time.Now()) - require.NoError(t, err) - } -} - func setSpace(ctx context.Context, t *testing.T, planet *testplanet.Planet, space int64) { if space == 0 { return