MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / BenchmarkReadOps_GetRevCacheMisses

Function BenchmarkReadOps_GetRevCacheMisses

rest/api_benchmark_test.go:120–186  ·  view source on GitHub ↗

Benchmark 100% rev cache miss scenario

(b *testing.B)

Source from the content-addressed store, hash-verified

118
119// Benchmark 100% rev cache miss scenario
120func BenchmarkReadOps_GetRevCacheMisses(b *testing.B) {
121
122 base.DisableTestLogging(b)
123
124 rt := NewRestTesterDefaultCollection(b, nil) // use non default in CBG-2618
125 defer rt.Close()
126 defer PurgeDoc(rt, "doc1k")
127
128 // Get database handle
129 rtDatabase := rt.GetDatabase()
130 revCacheSize := rtDatabase.Options.RevisionCacheOptions.MaxItemCount
131
132 doc1k_putDoc := fmt.Sprintf(doc_1k_format, "")
133 numDocs := int(revCacheSize + 1)
134 var revid string
135 for i := 0; i < numDocs; i++ {
136 response := rt.SendAdminRequest("PUT", fmt.Sprintf("/{{.keyspace}}/doc1k_%d", i), doc1k_putDoc)
137 // revid will be the same for all docs
138 if i == 0 {
139 var body db.Body
140 require.NoError(b, base.JSONUnmarshal(response.Body.Bytes(), &body))
141 revid = body["rev"].(string)
142 }
143 }
144
145 // Create user
146 username := "user1"
147 rt.SendAdminRequest("PUT", "/{{.db}}/_user/"+username, fmt.Sprintf(`{"name":"%s", "password":"letmein", "admin_channels":["channel_1"]}`, username))
148
149 getBenchmarks := []struct {
150 name string
151 URI string
152 asUser string
153 }{
154 {"Admin_Simple", "/{{.keyspace}}/doc1k", ""},
155 {"Admin_WithRev", fmt.Sprintf("/{{.keyspace}}/doc1k?rev=%s", revid), ""},
156 {"Admin_OpenRevsAll", fmt.Sprintf("/{{.keyspace}}/doc1k?open_revs=all&rev=%s", revid), ""},
157 {"User_Simple", "/{{.keyspace}}/doc1k", username},
158 {"User_WithRev", fmt.Sprintf("/{{.keyspace}}/doc1k?rev=%s", revid), username},
159 {"User_OpenRevsAll", fmt.Sprintf("/{{.keyspace}}/doc1k?open_revs=all&rev=%s", revid), username},
160 }
161
162 for _, bm := range getBenchmarks {
163 b.Run(bm.name, func(b *testing.B) {
164 var getResponse *TestResponse
165 rt.GetDatabase().FlushRevisionCacheForTest()
166 for i := 0; i < b.N; i++ {
167 // update key in URI
168 docNum := i % numDocs
169 newDocID := fmt.Sprintf("doc1k_%d", docNum)
170 docURI := strings.Replace(bm.URI, "doc1k", newDocID, 1)
171
172 if bm.asUser == "" {
173 getResponse = rt.SendAdminRequest("GET", docURI, "")
174 } else {
175 getResponse = rt.SendUserRequest("GET", docURI, "", bm.asUser)
176 }
177 b.StopTimer()

Callers

nothing calls this directly

Calls 10

DisableTestLoggingFunction · 0.92
JSONUnmarshalFunction · 0.92
PurgeDocFunction · 0.85
SendAdminRequestMethod · 0.80
SendUserRequestMethod · 0.80
CloseMethod · 0.65
RunMethod · 0.65
GetDatabaseMethod · 0.45

Tested by

no test coverage detected