210
211
// TestClusterMembershipUpsertExpiresCorrectly verifies RecordExpiry functions properly for ClusterMembership records
213
>
hostID, err := uuid.New().MarshalBinary()
214
>
s.NoError(err)
215
>
req := &p.UpsertClusterMembershipRequest{
216
>
HostID: hostID,
217
>
RPCAddress: net.ParseIP("127.0.0.2"),
218
>
RPCPort: 123,
219
>
Role: p.Frontend,
220
>
SessionStart: time.Now().UTC(),
221
>
RecordExpiry: time.Second,
222
>
}
223
>
224
>
err = s.ClusterMetadataManager.UpsertClusterMembership(s.ctx, req)
225
>
s.NoError(err)
226
>
227
>
err = s.ClusterMetadataManager.PruneClusterMembership(s.ctx, &p.PruneClusterMembershipRequest{MaxRecordsPruned: 100})
228
>
s.NoError(err)
229
>
230
>
resp, err := s.ClusterMetadataManager.GetClusterMembers(
231
>
s.ctx,
232
>
&p.GetClusterMembersRequest{LastHeartbeatWithin: time.Minute * 10, HostIDEquals: req.HostID},
233
>
)
234
>
235
>
s.NoError(err)
236
>
s.NotNil(resp)
237
>
s.NotEmpty(resp.ActiveMembers)
238
>
s.Equal(len(resp.ActiveMembers), 1)
239
>
// Have to round to 1 second due to SQL implementations. Cassandra truncates at 1ms.
240
>
s.Equal(resp.ActiveMembers[0].SessionStart.Round(time.Second), req.SessionStart.Round(time.Second))
241
>
s.Equal(resp.ActiveMembers[0].RPCAddress.String(), req.RPCAddress.String())
242
>
s.Equal(resp.ActiveMembers[0].RPCPort, req.RPCPort)
243
>
s.True(resp.ActiveMembers[0].RecordExpiry.After(time.Now().UTC()))
244
>
s.Equal(resp.ActiveMembers[0].HostID, req.HostID)
245
>
s.Equal(resp.ActiveMembers[0].Role, req.Role)
246
>
247
>
s.waitForPrune(5 * time.Second)
248
>
}
249
250
// waitForPrune waits up for the persistence backend to prune all records. Some persistence backends