at.happyproto.admin.listHosts

happyproto.at

Schema Diff

+23 -1

From

CID
bafyreihvqmedsr4...
Indexed At
2026-10-19 18:20 UTC
View this version

To

CID
bafyreigznbkunxe...
Indexed At
2026-10-29 15:36 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 12 non-breaking changes.

Non-Breaking Changes (12)
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeDiskGb" }
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeMemoryMb" }
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans" }
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans:items" }
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans" }
  • AddedVertex AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans:items" }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeDiskGb", kind: "prop", name: Some("freeDiskGb") }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeMemoryMb", kind: "prop", name: Some("freeMemoryMb") }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.placeablePlans", kind: "prop", name: Some("placeablePlans") }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts#host.placeablePlans", tgt: "at.happyproto.admin.listHosts#host.placeablePlans:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts:output", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans", kind: "prop", name: Some("unplaceablePlans") }
  • AddedEdge AddedEdge { src: "at.happyproto.admin.listHosts:output.unplaceablePlans", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeDiskGb" }
  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.freeMemoryMb" }
  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans" }
  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts#host.placeablePlans:items" }
  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans" }
  • AddedVertex { vertex_id: "at.happyproto.admin.listHosts:output.unplaceablePlans:items" }

Additional Notes

  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeDiskGb", kind: "prop", name: Some("freeDiskGb") }
  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.freeMemoryMb", kind: "prop", name: Some("freeMemoryMb") }
  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host", tgt: "at.happyproto.admin.listHosts#host.placeablePlans", kind: "prop", name: Some("placeablePlans") }
  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts#host.placeablePlans", tgt: "at.happyproto.admin.listHosts#host.placeablePlans:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts:output", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans", kind: "prop", name: Some("unplaceablePlans") }
  • Non-breaking: AddedEdge { src: "at.happyproto.admin.listHosts:output.unplaceablePlans", tgt: "at.happyproto.admin.listHosts:output.unplaceablePlans:items", kind: "items", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "host": {
5 5
      "description": "A host. Never carries its addresses or agent certificate.",
6 6
      "properties": {
7 7
        "cpuMillis": {
8 8
          "type": "integer"
9 9
        },
10 10
        "diskGb": {
11 11
          "type": "integer"
12 12
        },
13 +
        "freeDiskGb": {
14 +
          "description": "diskGb less reservedDiskGb. Negative when the host is over-committed.",
15 +
          "type": "integer"
16 +
        },
17 +
        "freeMemoryMb": {
18 +
          "description": "memoryMb less reservedMemoryMb. Negative when the host is over-committed.",
19 +
          "type": "integer"
20 +
        },
13 21
        "id": {
14 22
          "description": "A UUID.",
15 23
          "type": "string"
16 24
        },
17 25
        "lastSeenAt": {
18 26
          "description": "When its agent last answered. Absent if it never has.",
19 27
          "format": "datetime",
20 28
          "type": "string"
21 29
        },
22 30
        "memoryMb": {
23 31
          "type": "integer"
24 32
        },
25 33
        "name": {
26 34
          "type": "string"
27 35
        },
36 +
        "placeablePlans": {
37 +
          "description": "Plans open for new instances that fit in this host's free memory and disk, smallest first. Empty unless the host is active.",
38 +
          "items": {
39 +
            "type": "string"
40 +
          },
41 +
          "type": "array"
42 +
        },
28 43
        "reservedDiskGb": {
29 -
          "description": "Disk held by the plans of instances placed here and not yet purged.",
44 +
          "description": "Disk held by the plans of instances placed here and not yet purged. A deleted instance keeps its disk through its recovery window.",
30 45
          "type": "integer"
31 46
        },
32 47
        "reservedMemoryMb": {
33 48
          "description": "Memory those instances' plans hold.",
34 49
          "type": "integer"
35 50
        },
36 51
        "state": {
37 52
          "knownValues": [
38 53
            "active",
39 54
            "draining",
40 55
            "degraded",
41 56
            "retired"
42 57
          ],
43 58
          "type": "string"
44 59
        },
45 60
        "tenantCount": {
46 61
          "description": "Instances placed here and not deleted.",
47 62
          "type": "integer"
48 63
        }
49 64
      },
50 65
      "required": [
51 66
        "id",
52 67
        "name",
53 68
        "state",
54 69
        "memoryMb",
55 70
        "cpuMillis",
56 71
        "diskGb",
57 72
        "tenantCount",
58 73
        "reservedMemoryMb",
59 74
        "reservedDiskGb"
60 75
      ],
61 76
      "type": "object"
62 77
    },
63 78
    "main": {
64 79
      "description": "Every host, with what its tenants hold. Staff only.",
65 80
      "errors": [
66 81
        {
67 82
          "description": "This endpoint requires an authenticated caller.",
68 83
          "name": "AuthRequired"
69 84
        },
70 85
        {
71 86
          "description": "The caller is not HappyProto staff, or the provisioner does not treat them as staff.",
72 87
          "name": "Forbidden"
73 88
        },
74 89
        {
75 90
          "description": "The provisioner refused the request as malformed. Not expected from this read; declared because every provisioner refusal is mapped the same way.",
76 91
          "name": "InvalidRequest"
77 92
        },
78 93
        {
79 94
          "description": "Passed through from the provisioner.",
80 95
          "name": "NotFound"
81 96
        },
82 97
        {
83 98
          "description": "Passed through from the provisioner.",
84 99
          "name": "InvalidSlug"
85 100
        },
86 101
        {
87 102
          "description": "Passed through from the provisioner.",
88 103
          "name": "SlugTaken"
89 104
        },
90 105
        {
91 106
          "description": "Passed through from the provisioner.",
92 107
          "name": "NotEntitled"
93 108
        },
94 109
        {
95 110
          "description": "Passed through from the provisioner.",
96 111
          "name": "InstanceLimit"
97 112
        },
98 113
        {
99 114
          "description": "Passed through from the provisioner.",
100 115
          "name": "NoCapacity"
101 116
        },
102 117
        {
103 118
          "description": "Passed through from the provisioner.",
104 119
          "name": "OperationInProgress"
105 120
        },
106 121
        {
107 122
          "description": "The provisioner is unreachable, not configured, or answered with an error it does not explain to callers.",
108 123
          "name": "Upstream"
109 124
        }
110 125
      ],
111 126
      "output": {
112 127
        "encoding": "application/json",
113 128
        "schema": {
114 129
          "properties": {
115 130
            "hosts": {
116 131
              "items": {
117 132
                "ref": "#host",
118 133
                "type": "ref"
119 134
              },
120 135
              "type": "array"
136 +
            },
137 +
            "unplaceablePlans": {
138 +
              "description": "Plans open for new instances that fit on no active host, smallest first. A new instance on one of these fails with NoCapacity. Absent from a provisioner that does not report it.",
139 +
              "items": {
140 +
                "type": "string"
141 +
              },
142 +
              "type": "array"
121 143
            }
122 144
          },
123 145
          "required": [
124 146
            "hosts"
125 147
          ],
126 148
          "type": "object"
127 149
        }
128 150
      },
129 151
      "type": "query"
130 152
    }
131 153
  },
132 154
  "id": "at.happyproto.admin.listHosts",
133 155
  "lexicon": 1
134 156
}

Compare Other Versions

Lexicon Garden

@