aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--issues/fix-error-prone-timestamp-configuration.md23
-rw-r--r--pkg/db/trillian.go3
-rw-r--r--pkg/db/trillian_test.go16
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)
}
}()
}