Merge branch '18339-sweep-trash-lock'
[arvados.git] / services / keep-balance / block_state_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "time"
9
10         "git.arvados.org/arvados.git/sdk/go/arvados"
11         check "gopkg.in/check.v1"
12 )
13
14 var _ = check.Suite(&confirmedReplicationSuite{})
15
16 type confirmedReplicationSuite struct {
17         blockStateMap *BlockStateMap
18         mtime         int64
19 }
20
21 func (s *confirmedReplicationSuite) SetUpTest(c *check.C) {
22         t, _ := time.Parse(time.RFC3339Nano, time.RFC3339Nano)
23         s.mtime = t.UnixNano()
24         s.blockStateMap = NewBlockStateMap()
25         s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
26                 Replication:    1,
27                 StorageClasses: map[string]bool{"default": true},
28         }}, []arvados.KeepServiceIndexEntry{
29                 {SizedDigest: knownBlkid(10), Mtime: s.mtime},
30         })
31         s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
32                 Replication:    2,
33                 StorageClasses: map[string]bool{"default": true},
34         }}, []arvados.KeepServiceIndexEntry{
35                 {SizedDigest: knownBlkid(20), Mtime: s.mtime},
36         })
37 }
38
39 func (s *confirmedReplicationSuite) TestZeroReplication(c *check.C) {
40         n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(404), knownBlkid(409)}, []string{"default"})
41         c.Check(n, check.Equals, 0)
42         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(404)}, []string{"default"})
43         c.Check(n, check.Equals, 0)
44         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(404)}, nil)
45         c.Check(n, check.Equals, 0)
46 }
47
48 func (s *confirmedReplicationSuite) TestBlocksWithDifferentReplication(c *check.C) {
49         n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(20)}, []string{"default"})
50         c.Check(n, check.Equals, 1)
51 }
52
53 func (s *confirmedReplicationSuite) TestBlocksInDifferentClasses(c *check.C) {
54         s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
55                 Replication:    3,
56                 StorageClasses: map[string]bool{"three": true},
57         }}, []arvados.KeepServiceIndexEntry{
58                 {SizedDigest: knownBlkid(30), Mtime: s.mtime},
59         })
60
61         n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(30)}, []string{"three"})
62         c.Check(n, check.Equals, 3)
63         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, []string{"default"})
64         c.Check(n, check.Equals, 0) // block 30 has repl 0 @ "default"
65         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, []string{"three"})
66         c.Check(n, check.Equals, 0) // block 20 has repl 0 @ "three"
67         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, nil)
68         c.Check(n, check.Equals, 2)
69 }
70
71 func (s *confirmedReplicationSuite) TestBlocksOnMultipleMounts(c *check.C) {
72         s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
73                 Replication:    2,
74                 StorageClasses: map[string]bool{"default": true, "four": true},
75         }}, []arvados.KeepServiceIndexEntry{
76                 {SizedDigest: knownBlkid(40), Mtime: s.mtime},
77                 {SizedDigest: knownBlkid(41), Mtime: s.mtime},
78         })
79         s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
80                 Replication:    2,
81                 StorageClasses: map[string]bool{"four": true},
82         }}, []arvados.KeepServiceIndexEntry{
83                 {SizedDigest: knownBlkid(40), Mtime: s.mtime},
84                 {SizedDigest: knownBlkid(41), Mtime: s.mtime},
85         })
86         n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"default"})
87         c.Check(n, check.Equals, 2)
88         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"four"})
89         c.Check(n, check.Equals, 4)
90         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"default", "four"})
91         c.Check(n, check.Equals, 2)
92         n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, nil)
93         c.Check(n, check.Equals, 4)
94 }