From 69136d4db5edd9d2a87aedc00d0b8320b6ce6509 Mon Sep 17 00:00:00 2001 From: Pierre Phaneuf Date: Tue, 30 Mar 2021 17:57:44 +0100 Subject: [PATCH] Remove GetSequencedLeafCount from the storage interface. Part of #2245. --- storage/cloudspanner/log_storage.go | 11 ------- storage/log_storage.go | 3 -- storage/memory/log_storage.go | 11 ------- storage/mock_storage.go | 30 ------------------ storage/mysql/log_storage.go | 15 --------- storage/mysql/log_storage_test.go | 47 ----------------------------- 6 files changed, 117 deletions(-) diff --git a/storage/cloudspanner/log_storage.go b/storage/cloudspanner/log_storage.go index 19d067bda5..628a31f6ae 100644 --- a/storage/cloudspanner/log_storage.go +++ b/storage/cloudspanner/log_storage.go @@ -710,17 +710,6 @@ func (tx *logTX) UpdateSequencedLeaves(ctx context.Context, leaves []*trillian.L return nil } -// GetSequencedLeafCount returns the number of leaves integrated into the tree -// at the time the transaction was started. -func (tx *logTX) GetSequencedLeafCount(ctx context.Context) (int64, error) { - currentSTH, err := tx.currentSTH(ctx) - if err != nil { - return -1, err - } - - return currentSTH.TreeSize, nil -} - // leafmap is a map of LogLeaf by sequence number which knows how to populate // itself directly from Spanner Rows. type leafmap map[int64]*trillian.LogLeaf diff --git a/storage/log_storage.go b/storage/log_storage.go index fe781beb92..20a7ae8925 100644 --- a/storage/log_storage.go +++ b/storage/log_storage.go @@ -42,9 +42,6 @@ type ReadOnlyLogTX interface { type ReadOnlyLogTreeTX interface { ReadOnlyTreeTX - // GetSequencedLeafCount returns the total number of leaves that have been integrated into the - // tree via sequencing. - GetSequencedLeafCount(ctx context.Context) (int64, error) // GetLeavesByRange returns leaf data for a range of indexes. The returned // slice is a contiguous prefix of leaves in [start, start+count) ordered by // LeafIndex. It will be shorter than `count` if the requested range has diff --git a/storage/memory/log_storage.go b/storage/memory/log_storage.go index 0e1fc4cd5c..cea8168f75 100644 --- a/storage/memory/log_storage.go +++ b/storage/memory/log_storage.go @@ -19,7 +19,6 @@ import ( "context" "errors" "fmt" - "math" "strconv" "sync" "time" @@ -304,16 +303,6 @@ func (t *logTreeTX) AddSequencedLeaves(ctx context.Context, leaves []*trillian.L return nil, status.Errorf(codes.Unimplemented, "AddSequencedLeaves is not implemented") } -func (t *logTreeTX) GetSequencedLeafCount(ctx context.Context) (int64, error) { - var sequencedLeafCount int64 - - t.tx.DescendRange(seqLeafKey(t.treeID, math.MaxInt64), seqLeafKey(t.treeID, 0), func(i btree.Item) bool { - sequencedLeafCount = i.(*kv).v.(*trillian.LogLeaf).LeafIndex + 1 - return false - }) - return sequencedLeafCount, nil -} - func (t *logTreeTX) GetLeavesByRange(ctx context.Context, start, count int64) ([]*trillian.LogLeaf, error) { ret := make([]*trillian.LogLeaf, 0, count) for i := int64(0); i < count; i++ { diff --git a/storage/mock_storage.go b/storage/mock_storage.go index 2cffc1930a..e91848096d 100644 --- a/storage/mock_storage.go +++ b/storage/mock_storage.go @@ -501,21 +501,6 @@ func (mr *MockLogTreeTXMockRecorder) GetMerkleNodes(arg0, arg1 interface{}) *gom return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMerkleNodes", reflect.TypeOf((*MockLogTreeTX)(nil).GetMerkleNodes), arg0, arg1) } -// GetSequencedLeafCount mocks base method. -func (m *MockLogTreeTX) GetSequencedLeafCount(arg0 context.Context) (int64, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSequencedLeafCount", arg0) - ret0, _ := ret[0].(int64) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetSequencedLeafCount indicates an expected call of GetSequencedLeafCount. -func (mr *MockLogTreeTXMockRecorder) GetSequencedLeafCount(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSequencedLeafCount", reflect.TypeOf((*MockLogTreeTX)(nil).GetSequencedLeafCount), arg0) -} - // IsOpen mocks base method. func (m *MockLogTreeTX) IsOpen() bool { m.ctrl.T.Helper() @@ -931,21 +916,6 @@ func (mr *MockReadOnlyLogTreeTXMockRecorder) GetMerkleNodes(arg0, arg1 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMerkleNodes", reflect.TypeOf((*MockReadOnlyLogTreeTX)(nil).GetMerkleNodes), arg0, arg1) } -// GetSequencedLeafCount mocks base method. -func (m *MockReadOnlyLogTreeTX) GetSequencedLeafCount(arg0 context.Context) (int64, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSequencedLeafCount", arg0) - ret0, _ := ret[0].(int64) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetSequencedLeafCount indicates an expected call of GetSequencedLeafCount. -func (mr *MockReadOnlyLogTreeTXMockRecorder) GetSequencedLeafCount(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSequencedLeafCount", reflect.TypeOf((*MockReadOnlyLogTreeTX)(nil).GetSequencedLeafCount), arg0) -} - // IsOpen mocks base method. func (m *MockReadOnlyLogTreeTX) IsOpen() bool { m.ctrl.T.Helper() diff --git a/storage/mysql/log_storage.go b/storage/mysql/log_storage.go index e64a2b2676..d30cce9370 100644 --- a/storage/mysql/log_storage.go +++ b/storage/mysql/log_storage.go @@ -51,7 +51,6 @@ const ( AND TreeState IN(?,?) AND (Deleted IS NULL OR Deleted = 'false')` - selectSequencedLeafCountSQL = "SELECT COUNT(*) FROM SequencedLeafData WHERE TreeId=?" selectLatestSignedLogRootSQL = `SELECT TreeHeadTimestamp,TreeSize,RootHash,TreeRevision,RootSignature FROM TreeHead WHERE TreeId=? ORDER BY TreeHeadTimestamp DESC LIMIT 1` @@ -638,20 +637,6 @@ func (t *logTreeTX) AddSequencedLeaves(ctx context.Context, leaves []*trillian.L return res, nil } -func (t *logTreeTX) GetSequencedLeafCount(ctx context.Context) (int64, error) { - t.treeTX.mu.Lock() - defer t.treeTX.mu.Unlock() - - var sequencedLeafCount int64 - - err := t.tx.QueryRowContext(ctx, selectSequencedLeafCountSQL, t.treeID).Scan(&sequencedLeafCount) - if err != nil { - glog.Warningf("Error getting sequenced leaf count: %s", err) - } - - return sequencedLeafCount, err -} - func (t *logTreeTX) GetLeavesByRange(ctx context.Context, start, count int64) ([]*trillian.LogLeaf, error) { t.treeTX.mu.Lock() defer t.treeTX.mu.Unlock() diff --git a/storage/mysql/log_storage_test.go b/storage/mysql/log_storage_test.go index fb8f6a4b0d..deae940e67 100644 --- a/storage/mysql/log_storage_test.go +++ b/storage/mysql/log_storage_test.go @@ -47,7 +47,6 @@ var ( dummyHash = []byte("hashxxxxhashxxxxhashxxxxhashxxxx") dummyRawHash = []byte("xxxxhashxxxxhashxxxxhashxxxxhash") dummyHash2 = []byte("HASHxxxxhashxxxxhashxxxxhashxxxx") - dummyHash3 = []byte("hashxxxxhashxxxxhashxxxxHASHxxxx") ) // Time we will queue all leaves at @@ -805,52 +804,6 @@ func TestReadOnlyLogTX_Rollback(t *testing.T) { } } -func TestGetSequencedLeafCount(t *testing.T) { - ctx := context.Background() - - // We'll create leaves for two different trees - cleanTestDB(DB) - as := NewAdminStorage(DB) - log1 := mustCreateTree(ctx, t, as, testonly.LogTree) - log2 := mustCreateTree(ctx, t, as, testonly.LogTree) - s := NewLogStorage(DB, nil) - - { - // Create fake leaf as if it had been sequenced - data := []byte("some data") - createFakeLeaf(ctx, DB, log1.TreeId, dummyHash, dummyRawHash, data, someExtraData, sequenceNumber, t) - - // Create fake leaves for second tree as if they had been sequenced - data2 := []byte("some data 2") - data3 := []byte("some data 3") - createFakeLeaf(ctx, DB, log2.TreeId, dummyHash2, dummyRawHash, data2, someExtraData, sequenceNumber, t) - createFakeLeaf(ctx, DB, log2.TreeId, dummyHash3, dummyRawHash, data3, someExtraData, sequenceNumber+1, t) - } - - // Read back the leaf counts from both trees - runLogTX(s, log1, t, func(ctx context.Context, tx storage.LogTreeTX) error { - count1, err := tx.GetSequencedLeafCount(ctx) - if err != nil { - t.Fatalf("unexpected error getting leaf count: %v", err) - } - if want, got := int64(1), count1; want != got { - t.Fatalf("expected %d sequenced for logId but got %d", want, got) - } - return nil - }) - - runLogTX(s, log2, t, func(ctx context.Context, tx storage.LogTreeTX) error { - count2, err := tx.GetSequencedLeafCount(ctx) - if err != nil { - t.Fatalf("unexpected error getting leaf count2: %v", err) - } - if want, got := int64(2), count2; want != got { - t.Fatalf("expected %d sequenced for logId2 but got %d", want, got) - } - return nil - }) -} - func ensureAllLeavesDistinct(leaves []*trillian.LogLeaf, t *testing.T) { t.Helper() // All the leaf value hashes should be distinct because the leaves were created with distinct