services/mounttable/btmtd: Fix server counters
When deleting a node, we need to include the number of expired servers
in the counter increment.
Change-Id: Ibbd514266dd9f809f6fe01c2e1cab55a6778336a
diff --git a/services/mounttable/btmtd/internal/node.go b/services/mounttable/btmtd/internal/node.go
index efd3ae9..3dc9a64 100644
--- a/services/mounttable/btmtd/internal/node.go
+++ b/services/mounttable/btmtd/internal/node.go
@@ -323,8 +323,13 @@
if err := n.bt.apply(longCtx, rowKey(parent), mut); err != nil {
return err
}
- if err := incrementCreatorServerCount(ctx, n.bt, n.creator, -int64(len(n.servers))); err != nil {
- return err
+ // Adjust the server count for the node creator. Since delete() can be
+ // called directly without gc(), we need to include the expired servers
+ // in the counter adjustment.
+ if delta := -int64(len(n.servers) + len(n.expiredServers)); delta != 0 {
+ if err := incrementCreatorServerCount(ctx, n.bt, n.creator, delta); err != nil {
+ return err
+ }
}
return incrementCreatorNodeCount(ctx, n.bt, n.creator, -1)
}