From 40c5a2e6927671235f849e28f14203be3f3ea971 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 3 Sep 2026 14:01:49 +0200 Subject: [PATCH] devnet-9: implement the digitalocean size override and size the buildoors nodes.tf documents `size : Instance size override (provider-specific)`, and hetzner.tf implements it, but digitalocean.tf never did -- DO size was purely the supernode ternary. Every devnet-9 node is DigitalOcean, so the documented override was silently ignored fleet-wide. Implements it mirroring hetzner.tf, then uses it to put the four buildoors on the 32 GB tier. They are currently the only 16 GB hosts in a 1002x32 GB fleet, are OOM-killed 7-27 times per hour, and have never produced a builder bid. Deliberately does not set `supernode = true` on them: that flag also drives the supernode droplet tag and hence CL data-column custody, which would be a consensus-behaviour change rather than a sizing one. Claude-Session: https://claude.ai/code/session_01LgfRTaHjnv57ASe51yw1D6 --- terraform/devnet-9/digitalocean.tf | 11 ++++++++++- terraform/devnet-9/nodes.tf | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/terraform/devnet-9/digitalocean.tf b/terraform/devnet-9/digitalocean.tf index 6ac665f8..654d7ae0 100644 --- a/terraform/devnet-9/digitalocean.tf +++ b/terraform/devnet-9/digitalocean.tf @@ -222,6 +222,15 @@ locals { (node.count > 0 ? (node.validator_end - node.validator_start) / node.count >= 128 : false) ) + # Size: explicit > supernode-based default + size = ( + node.size != null ? node.size : + (node.supernode != null ? node.supernode : + can(regex("(bootnode|mev)", node.name)) ? true : + (node.count > 0 ? (node.validator_end - node.validator_start) / node.count >= 128 : false) + ) ? var.digitalocean_supernode_size : var.digitalocean_fullnode_size + ) + region = node.region != null ? node.region : lookup( var.digitalocean_region_overrides, "${node.name}-${node.start_index + i + 1}", @@ -258,7 +267,7 @@ locals { ssh_keys = [data.digitalocean_ssh_key.main.fingerprint] region = vm.region image = local.digitalocean_default_image - size = vm.supernode ? var.digitalocean_supernode_size : var.digitalocean_fullnode_size + size = vm.size resize_disk = true monitoring = true backups = false diff --git a/terraform/devnet-9/nodes.tf b/terraform/devnet-9/nodes.tf index bd77450a..a2645a3c 100644 --- a/terraform/devnet-9/nodes.tf +++ b/terraform/devnet-9/nodes.tf @@ -24,10 +24,10 @@ variable "nodes" { default = [ { name = "bootnode", count = 4, cloud = "digitalocean" }, # Buildoor - { name = "buildoor-prysm-ethrex", count = 1, cloud = "digitalocean", builder_start = 0 }, - { name = "buildoor-lighthouse-geth", count = 1, cloud = "digitalocean", builder_start = 1 }, - { name = "buildoor-lodestar-ethrex", count = 1, cloud = "digitalocean", builder_start = 2 }, - { name = "buildoor-teku-nethermind", count = 1, cloud = "digitalocean", builder_start = 3 }, + { name = "buildoor-prysm-ethrex", count = 1, cloud = "digitalocean", builder_start = 0, size = "s-8vcpu-32gb-640gb-intel" }, + { name = "buildoor-lighthouse-geth", count = 1, cloud = "digitalocean", builder_start = 1, size = "s-8vcpu-32gb-640gb-intel" }, + { name = "buildoor-lodestar-ethrex", count = 1, cloud = "digitalocean", builder_start = 2, size = "s-8vcpu-32gb-640gb-intel" }, + { name = "buildoor-teku-nethermind", count = 1, cloud = "digitalocean", builder_start = 3, size = "s-8vcpu-32gb-640gb-intel" }, # 1000-node stress test approximating mainnet client distribution (Aug 2026). # CL weights: lighthouse 43%, prysm 31%, teku 14%, nimbus 8%, lodestar 3%, grandine 1%.