diff options
author | Rasmus Dahlberg <rasmus@mullvad.net> | 2021-12-28 21:32:38 +0100 |
---|---|---|
committer | Rasmus Dahlberg <rasmus@mullvad.net> | 2021-12-28 21:32:38 +0100 |
commit | 601d2ee04840d24fe13e5ec54ae09f2a623f3d02 (patch) | |
tree | 2ee254223b4aa4b3c52cc0c056c5d2dc45c385cf | |
parent | 04ca3b71764c0a958338ddacb92c2f474c5f4e78 (diff) |
db: Fix error prone timestamp configurationv0.3.4
The timestamp for the latest tree head is now set based on the current
UNIX time. This means that there is no longer any reliance on Trillian
to move the timestamp forward every 5 minutes, just set -interval=300s.
-rw-r--r-- | issues/fix-error-prone-timestamp-configuration.md | 23 | ||||
-rw-r--r-- | pkg/db/trillian.go | 3 | ||||
-rw-r--r-- | pkg/db/trillian_test.go | 16 |
3 files changed, 16 insertions, 26 deletions
diff --git a/issues/fix-error-prone-timestamp-configuration.md b/issues/fix-error-prone-timestamp-configuration.md deleted file mode 100644 index 79db548..0000000 --- a/issues/fix-error-prone-timestamp-configuration.md +++ /dev/null @@ -1,23 +0,0 @@ -**Title:** Fix error-prone timestamp configuration</br> -**Date:** 2021-12-18 </br> - -# Summary -Stop relying on Trillian to update tree head timestamps. - -# Description -A sigsum log is expected to produce a new to-sign tree head every five minutes. -If no new entries were added, only the timestamp is updated to ensure freshness. - -The current sigsum-log-go implementation assumes that Trillian ensures that a -new tree head is produced every five minutes. It can be configured as follows: -``` -$ createtree --help -Usage of ./createtree: -[...] - -max_root_duration duration - Interval after which a new signed root is produced despite no submissions; zero means never (default 1h0m0s) -[...] -``` - -It would be less error-prone to configure this from sigsum-log-go instead, as -part of the `StateManager` interface based on a constant (i.e., 5 minutes). diff --git a/pkg/db/trillian.go b/pkg/db/trillian.go index ab57db6..25b2fb3 100644 --- a/pkg/db/trillian.go +++ b/pkg/db/trillian.go @@ -3,6 +3,7 @@ package db import ( "context" "fmt" + "time" "git.sigsum.org/sigsum-lib-go/pkg/requests" "git.sigsum.org/sigsum-lib-go/pkg/types" @@ -173,7 +174,7 @@ func (c *TrillianClient) GetLeaves(ctx context.Context, req *requests.Leaves) (* func treeHeadFromLogRoot(lr *trillianTypes.LogRootV1) *types.TreeHead { th := types.TreeHead{ - Timestamp: uint64(lr.TimestampNanos / 1000 / 1000 / 1000), + Timestamp: uint64(time.Now().Unix()), TreeSize: uint64(lr.TreeSize), } copy(th.RootHash[:], lr.RootHash) diff --git a/pkg/db/trillian_test.go b/pkg/db/trillian_test.go index a33458f..955fc46 100644 --- a/pkg/db/trillian_test.go +++ b/pkg/db/trillian_test.go @@ -1,10 +1,12 @@ package db import ( + "bytes" "context" "fmt" "reflect" "testing" + "time" "git.sigsum.org/sigsum-lib-go/pkg/requests" "git.sigsum.org/sigsum-lib-go/pkg/types" @@ -185,8 +187,18 @@ func TestGetTreeHead(t *testing.T) { if err != nil { return } - if got, want := th, table.wantTh; !reflect.DeepEqual(got, want) { - t.Errorf("got tree head\n\t%v\nbut wanted\n\t%v\nin test %q", got, want, table.description) + + // we would need a clock that can be mocked to make a nicer test + now := uint64(time.Now().Unix()) + if got, wantLow, wantHigh := th.Timestamp, now-5, now+5; got < wantLow || got > wantHigh { + t.Errorf("got tree head with timestamp %d but wanted between [%d, %d] in test %q", + got, wantLow, wantHigh, table.description) + } + if got, want := th.TreeSize, table.wantTh.TreeSize; got != want { + t.Errorf("got tree head with tree size %d but wanted %d in test %q", got, want, table.description) + } + if got, want := th.RootHash[:], table.wantTh.RootHash[:]; !bytes.Equal(got, want) { + t.Errorf("got root hash %x but wanted %x in test %q", got, want, table.description) } }() } |