From dab0c5596e39dc455d88bba797717e829fe5caf5 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 20 Jun 2022 23:16:30 -0400 Subject: [PATCH] 19192: Add a few bytes to MemorySize to account for data structures. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- sdk/go/arvados/fs_base.go | 2 +- sdk/go/arvados/fs_collection.go | 4 +++- sdk/go/arvados/fs_collection_test.go | 13 +++++++------ services/keep-web/server_test.go | 6 ++++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/sdk/go/arvados/fs_base.go b/sdk/go/arvados/fs_base.go index bebb74261e..ce9253ab3d 100644 --- a/sdk/go/arvados/fs_base.go +++ b/sdk/go/arvados/fs_base.go @@ -415,7 +415,7 @@ func (n *treenode) MemorySize() (size int64) { for _, inode := range n.inodes { size += inode.MemorySize() } - return + return 64 + size } type fileSystem struct { diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go index f4dae746e2..ccfbdc4da2 100644 --- a/sdk/go/arvados/fs_collection.go +++ b/sdk/go/arvados/fs_collection.go @@ -1159,15 +1159,17 @@ func (dn *dirnode) MemorySize() (size int64) { case *dirnode: size += node.MemorySize() case *filenode: + size += 64 for _, seg := range node.segments { switch seg := seg.(type) { case *memSegment: size += int64(seg.Len()) } + size += 64 } } } - return + return 64 + size } // caller must have write lock. diff --git a/sdk/go/arvados/fs_collection_test.go b/sdk/go/arvados/fs_collection_test.go index b221aaa083..c2cac3c6ce 100644 --- a/sdk/go/arvados/fs_collection_test.go +++ b/sdk/go/arvados/fs_collection_test.go @@ -1221,7 +1221,8 @@ func (s *CollectionFSSuite) TestFlushFullBlocksOnly(c *check.C) { c.Assert(err, check.IsNil) } } - c.Check(fs.MemorySize(), check.Equals, int64(nDirs*67<<20)) + inodebytes := int64((nDirs*(67*2+1) + 1) * 64) + c.Check(fs.MemorySize(), check.Equals, int64(nDirs*67<<20)+inodebytes) c.Check(flushed, check.Equals, int64(0)) waitForFlush := func(expectUnflushed, expectFlushed int64) { @@ -1232,27 +1233,27 @@ func (s *CollectionFSSuite) TestFlushFullBlocksOnly(c *check.C) { } // Nothing flushed yet - waitForFlush((nDirs*67)<<20, 0) + waitForFlush((nDirs*67)<<20+inodebytes, 0) // Flushing a non-empty dir "/" is non-recursive and there are // no top-level files, so this has no effect fs.Flush("/", false) - waitForFlush((nDirs*67)<<20, 0) + waitForFlush((nDirs*67)<<20+inodebytes, 0) // Flush the full block in dir0 fs.Flush("dir0", false) - waitForFlush((nDirs*67-64)<<20, 64<<20) + waitForFlush((nDirs*67-64)<<20+inodebytes, 64<<20) err = fs.Flush("dir-does-not-exist", false) c.Check(err, check.NotNil) // Flush full blocks in all dirs fs.Flush("", false) - waitForFlush(nDirs*3<<20, nDirs*64<<20) + waitForFlush(nDirs*3<<20+inodebytes, nDirs*64<<20) // Flush non-full blocks, too fs.Flush("", true) - waitForFlush(0, nDirs*67<<20) + waitForFlush(inodebytes, nDirs*67<<20) } // Even when writing lots of files/dirs from different goroutines, as diff --git a/services/keep-web/server_test.go b/services/keep-web/server_test.go index dd8ce06172..61c540808b 100644 --- a/services/keep-web/server_test.go +++ b/services/keep-web/server_test.go @@ -480,8 +480,10 @@ func (s *IntegrationSuite) TestMetrics(c *check.C) { c.Check(counters["arvados_keepweb_collectioncache_hits//"].Value, check.Equals, int64(1)) c.Check(counters["arvados_keepweb_collectioncache_pdh_hits//"].Value, check.Equals, int64(1)) c.Check(gauges["arvados_keepweb_collectioncache_cached_manifests//"].Value, check.Equals, float64(1)) - // FooCollection's cached manifest size is 45 ("1f4b0....+45") plus one 51-byte blob signature - c.Check(gauges["arvados_keepweb_sessions_cached_collection_bytes//"].Value, check.Equals, float64(45+51)) + // FooCollection's cached manifest size is 45 ("1f4b0....+45") + // plus one 51-byte blob signature; session fs counts 3 inodes + // * 64 bytes. + c.Check(gauges["arvados_keepweb_sessions_cached_collection_bytes//"].Value, check.Equals, float64(45+51+64*3)) // If the Host header indicates a collection, /metrics.json // refers to a file in the collection -- the metrics handler -- 2.30.2