@@ -188,6 +188,62 @@ func Test_QueryLocks(t *testing.T) {
188188 assert .Equal (t , `level="info" waiting_digest="xyz789" waiting_digest_text="SELECT * FROM orders WHERE user_id = ?" blocking_digest="ghi012" blocking_digest_text="DELETE FROM sessions WHERE expired = ?" waiting_timer_wait="2500.000000ms" waiting_lock_time="2000.000000ms" blocking_timer_wait="3000.000000ms" blocking_lock_time="2700.000000ms"` , lokiEntries [1 ].Line )
189189 })
190190
191+ t .Run ("data lock with null digests and digest texts" , func (t * testing.T ) {
192+ db , mock , err := sqlmock .New (sqlmock .QueryMatcherOption (sqlmock .QueryMatcherEqual ))
193+ require .NoError (t , err )
194+ defer db .Close ()
195+
196+ lokiClient := fake .NewClient (func () {})
197+
198+ collector , err := NewLock (LockArguments {
199+ DB : db ,
200+ InstanceKey : "mysql-db" ,
201+ CollectInterval : time .Second ,
202+ EntryHandler : lokiClient ,
203+ Logger : log .NewLogfmtLogger (os .Stderr ),
204+ })
205+ require .NoError (t , err )
206+ require .NotNil (t , collector )
207+
208+ mock .ExpectQuery (selectDataLocks ).RowsWillBeClosed ().WillReturnRows (
209+ sqlmock .NewRows (
210+ []string {
211+ "waitingTimerWait" ,
212+ "waitingLockTime" ,
213+ "waitingDigest" ,
214+ "waitingDigestText" ,
215+ "blockingTimerWait" ,
216+ "blockingLockTime" ,
217+ "blockingDigest" ,
218+ "blockingDigestText" ,
219+ },
220+ ).AddRow (
221+ 1500000000000 ,
222+ 1000000000000 ,
223+ nil ,
224+ nil ,
225+ 2000000000000 ,
226+ 1700000000000 ,
227+ nil ,
228+ nil ,
229+ ),
230+ )
231+
232+ require .NoError (t , collector .Start (t .Context ()))
233+
234+ require .Eventually (t , func () bool {
235+ return len (lokiClient .Received ()) == 1
236+ }, 2 * time .Second , 50 * time .Millisecond )
237+
238+ collector .Stop ()
239+ lokiClient .Stop ()
240+
241+ require .NoError (t , mock .ExpectationsWereMet ())
242+ lokiEntries := lokiClient .Received ()
243+ assert .Equal (t , model.LabelSet {"job" : database_observability .JobName , "op" : OP_DATA_LOCKS , "instance" : "mysql-db" }, lokiEntries [0 ].Labels )
244+ assert .Equal (t , `level="info" waiting_digest="" waiting_digest_text="" blocking_digest="" blocking_digest_text="" waiting_timer_wait="1500.000000ms" waiting_lock_time="1000.000000ms" blocking_timer_wait="2000.000000ms" blocking_lock_time="1700.000000ms"` , lokiEntries [0 ].Line )
245+ })
246+
191247 t .Run ("recoverable sql error in selectDataLocks result set" , func (t * testing.T ) {
192248 db , mock , err := sqlmock .New (sqlmock .QueryMatcherOption (sqlmock .QueryMatcherEqual ))
193249 require .NoError (t , err )
0 commit comments