Skip to content

Commit

Permalink
Remove the unused GetSequencedLeafCount API.
Browse files Browse the repository at this point in the history
Part of #2245.
  • Loading branch information
pphaneuf committed Mar 22, 2021
1 parent 5fb4e3a commit 0147acb
Show file tree
Hide file tree
Showing 7 changed files with 356 additions and 807 deletions.
41 changes: 0 additions & 41 deletions docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
- [GetLeavesByIndexResponse](#trillian.GetLeavesByIndexResponse)
- [GetLeavesByRangeRequest](#trillian.GetLeavesByRangeRequest)
- [GetLeavesByRangeResponse](#trillian.GetLeavesByRangeResponse)
- [GetSequencedLeafCountRequest](#trillian.GetSequencedLeafCountRequest)
- [GetSequencedLeafCountResponse](#trillian.GetSequencedLeafCountResponse)
- [InitLogRequest](#trillian.InitLogRequest)
- [InitLogResponse](#trillian.InitLogResponse)
- [LogLeaf](#trillian.LogLeaf)
Expand Down Expand Up @@ -388,40 +386,6 @@ As an example, a Certificate Transparency frontend might set the following user



<a name="trillian.GetSequencedLeafCountRequest"></a>

### GetSequencedLeafCountRequest
DO NOT USE - FOR DEBUGGING/TEST ONLY

(Use GetLatestSignedLogRoot then de-serialize the Log Root and use
use the tree size field within.)


| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| log_id | [int64](#int64) | | |
| charge_to | [ChargeTo](#trillian.ChargeTo) | | |






<a name="trillian.GetSequencedLeafCountResponse"></a>

### GetSequencedLeafCountResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| leaf_count | [int64](#int64) | | |






<a name="trillian.InitLogRequest"></a>

### InitLogRequest
Expand Down Expand Up @@ -625,11 +589,6 @@ If the requested tree size is larger than the server is aware of, the response w
| GetLatestSignedLogRoot | [GetLatestSignedLogRootRequest](#trillian.GetLatestSignedLogRootRequest) | [GetLatestSignedLogRootResponse](#trillian.GetLatestSignedLogRootResponse) | GetLatestSignedLogRoot returns the latest signed log root for a given tree, and optionally also includes a consistency proof from an earlier tree size to the new size of the tree.

If the earlier tree size is larger than the server is aware of, an InvalidArgument error is returned. |
| GetSequencedLeafCount | [GetSequencedLeafCountRequest](#trillian.GetSequencedLeafCountRequest) | [GetSequencedLeafCountResponse](#trillian.GetSequencedLeafCountResponse) | GetSequencedLeafCount returns the total number of leaves that have been integrated into the given tree.

DO NOT USE - FOR DEBUGGING/TEST ONLY

(Use GetLatestSignedLogRoot then de-serialize the Log Root and use use the tree size field within.) |
| GetEntryAndProof | [GetEntryAndProofRequest](#trillian.GetEntryAndProofRequest) | [GetEntryAndProofResponse](#trillian.GetEntryAndProofResponse) | GetEntryAndProof returns a log leaf and the corresponding inclusion proof to a specified tree size, for a given leaf index in a particular tree.

If the requested tree size is unavailable but the leaf is in scope for the current tree, the returned proof will be for the current tree size rather than the requested tree size. |
Expand Down
3 changes: 0 additions & 3 deletions server/interceptor/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -397,9 +397,6 @@ func newRPCInfoForRequest(req interface{}) (*rpcInfo, error) {
if c := req.GetCount(); c > 1 {
info.tokens = int(c)
}
case *trillian.GetSequencedLeafCountRequest:
info.treeTypes = []trillian.TreeType{trillian.TreeType_LOG, trillian.TreeType_PREORDERED_LOG}

// Log / readwrite
case *trillian.QueueLeafRequest:
info.readonly = false
Expand Down
27 changes: 0 additions & 27 deletions server/log_rpc_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -463,33 +463,6 @@ func tryGetConsistencyProof(ctx context.Context, firstTreeSize, secondTreeSize,
return proof, nil
}

// GetSequencedLeafCount returns the number of leaves that have been integrated into the Merkle
// Tree. This can be zero for a log containing no entries.
func (t *TrillianLogRPCServer) GetSequencedLeafCount(ctx context.Context, req *trillian.GetSequencedLeafCountRequest) (*trillian.GetSequencedLeafCountResponse, error) {
ctx, spanEnd := spanFor(ctx, "GetSequencedLeafCount")
defer spanEnd()
tree, ctx, err := t.getTreeAndContext(ctx, req.LogId, optsLogRead)
if err != nil {
return nil, err
}
tx, err := t.snapshotForTree(ctx, tree, "GetSequencedLeafCount")
if err != nil {
return nil, err
}
defer t.closeAndLog(ctx, tree.TreeId, tx, "GetSequencedLeafCount")

leafCount, err := tx.GetSequencedLeafCount(ctx)
if err != nil {
return nil, err
}

if err := t.commitAndLog(ctx, req.LogId, tx, "GetSequencedLeafCount"); err != nil {
return nil, err
}

return &trillian.GetSequencedLeafCountResponse{LeafCount: leafCount}, nil
}

// GetLeavesByIndex obtains one or more leaves based on their sequence number within the
// tree. It is not possible to fetch leaves that have been queued but not yet integrated.
// TODO: Validate indices against published tree size in case we implement write sharding that
Expand Down
133 changes: 0 additions & 133 deletions server/log_rpc_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1331,82 +1331,6 @@ func TestGetEntryAndProof(t *testing.T) {
}
}

func TestGetSequencedLeafCountBeginTXFails(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

test := newParameterizedTest(ctrl, "GetSequencedLeafCount", readOnly, nopStorage,
func(t *storage.MockLogTreeTX) {
t.EXPECT().Close().Return(nil)
},
func(s *TrillianLogRPCServer) error {
_, err := s.GetSequencedLeafCount(context.Background(), &trillian.GetSequencedLeafCountRequest{LogId: logID1})
return err
})

test.executeBeginFailsTest(t, logID1)
}

func TestGetSequencedLeafCountStorageFails(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

test := newParameterizedTest(ctrl, "GetSequencedLeafCount", readOnly, nopStorage,
func(t *storage.MockLogTreeTX) {
t.EXPECT().GetSequencedLeafCount(gomock.Any()).Return(int64(0), errors.New("STORAGE"))
},
func(s *TrillianLogRPCServer) error {
_, err := s.GetSequencedLeafCount(context.Background(), &trillian.GetSequencedLeafCountRequest{LogId: logID1})
return err
})

test.executeStorageFailureTest(t, logID1)
}

func TestGetSequencedLeafCountCommitFails(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

test := newParameterizedTest(ctrl, "GetSequencedLeafCount", readOnly, nopStorage,
func(t *storage.MockLogTreeTX) {
t.EXPECT().GetSequencedLeafCount(gomock.Any()).Return(int64(27), nil)
},
func(s *TrillianLogRPCServer) error {
_, err := s.GetSequencedLeafCount(context.Background(), &trillian.GetSequencedLeafCountRequest{LogId: logID1})
return err
})

test.executeCommitFailsTest(t, logID1)
}

func TestGetSequencedLeafCount(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

fakeStorage := storage.NewMockLogStorage(ctrl)
mockTX := storage.NewMockLogTreeTX(ctrl)
fakeStorage.EXPECT().SnapshotForTree(gomock.Any(), cmpMatcher{tree1}).Return(mockTX, nil)

mockTX.EXPECT().GetSequencedLeafCount(gomock.Any()).Return(int64(268), nil)
mockTX.EXPECT().Commit(gomock.Any()).Return(nil)
mockTX.EXPECT().Close().Return(nil)

registry := extension.Registry{
AdminStorage: fakeAdminStorage(ctrl, storageParams{treeID: logID1, numSnapshots: 1}),
LogStorage: fakeStorage,
}
server := NewTrillianLogRPCServer(registry, fakeTimeSource)

response, err := server.GetSequencedLeafCount(context.Background(), &trillian.GetSequencedLeafCountRequest{LogId: logID1})
if err != nil {
t.Fatalf("expected no error getting leaf count but got: %v", err)
}

if got, want := response.LeafCount, int64(268); got != want {
t.Fatalf("expected leaf count: %d but got: %d", want, got)
}
}

type consistProofTest struct {
req *trillian.GetConsistencyProofRequest
errStr string
Expand Down Expand Up @@ -1976,37 +1900,6 @@ func newParameterizedTest(ctrl *gomock.Controller, operation string, m txMode, p
return &parameterizedTest{ctrl, operation, m, false /* preordered */, prepareStorage, prepareTx, makeRPC}
}

func (p *parameterizedTest) executeCommitFailsTest(t *testing.T, logID int64) {
t.Helper()

mockTX := storage.NewMockLogTreeTX(p.ctrl)
fakeStorage := &stestonly.FakeLogStorage{}

switch p.mode {
case readOnly:
fakeStorage.ReadOnlyTX = mockTX
case readWrite:
fakeStorage.TX = mockTX
}
if p.mode != noTX {
p.prepareTX(mockTX)
mockTX.EXPECT().Commit(gomock.Any()).Return(errors.New("bang"))
mockTX.EXPECT().Close().Return(errors.New("bang"))
mockTX.EXPECT().IsOpen().AnyTimes().Return(false)
}

registry := extension.Registry{
AdminStorage: fakeAdminStorage(p.ctrl, storageParams{logID, p.preordered, 1, nil, nil, false}),
LogStorage: fakeStorage,
}
server := NewTrillianLogRPCServer(registry, fakeTimeSource)

err := p.makeRPC(server)
if err == nil {
t.Fatalf("returned OK when commit failed: %s", p.operation)
}
}

func (p *parameterizedTest) executeInvalidLogIDTest(t *testing.T, snapshot bool) {
badLogErr := errors.New("BADLOGID")

Expand Down Expand Up @@ -2060,32 +1953,6 @@ func (p *parameterizedTest) executeStorageFailureTest(t *testing.T, logID int64)
}
}

func (p *parameterizedTest) executeBeginFailsTest(t *testing.T, logID int64) {
logStorage := storage.NewMockLogStorage(p.ctrl)
logTX := storage.NewMockLogTreeTX(p.ctrl)

switch p.mode {
case readOnly:
logStorage.EXPECT().SnapshotForTree(gomock.Any(), cmpMatcher{tree1}).Return(logTX, errors.New("TX"))
case readWrite:
logStorage.EXPECT().ReadWriteTransaction(gomock.Any(), logID, gomock.Any()).Return(errors.New("TX"))
}

if p.prepareTX != nil {
p.prepareTX(logTX)
}

registry := extension.Registry{
AdminStorage: fakeAdminStorage(p.ctrl, storageParams{logID, p.preordered, 1, nil, nil, false}),
LogStorage: logStorage,
}
server := NewTrillianLogRPCServer(registry, fakeTimeSource)

if err := p.makeRPC(server); err == nil || !strings.Contains(err.Error(), "TX") {
t.Fatalf("Returned wrong error response when begin failed: %v", err)
}
}

type storageParams struct {
treeID int64
preordered bool
Expand Down
15 changes: 0 additions & 15 deletions testonly/tmock/mock_log_server.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 0147acb

Please sign in to comment.