Skip to content

Allow Gitaly ref name caching for issue discussions

Sean McGivern requested to merge cache-ref-names-in-discussion-endpoint into master

What does this MR do?

Issue discussions can link to repository files as relative links. If several comments do so, it means that we will fetch the default branch's ref from Gitaly once per comment, when we don't expect this to change during the request. (This caching is already enabled for an MR's discussions.)

If many discussions actually link to repository files, we still have a GetBlobs N+1, but that's less trivial to resolve. One significant improvement will come from #34404 (closed), where we won't erroneously do this when a comment only contains a link to an uploaded attachment.

I tested this by replacing this method in the Gitlab::GitalyClient:

def self.measure_timings(service, rpc, request)
  start = Gitlab::Metrics::System.monotonic_time

  yield
ensure
  duration = Gitlab::Metrics::System.monotonic_time - start
  request_hash = request.is_a?(Google::Protobuf::MessageExts) ? request.to_h : {}

  self.query_time += duration
  puts "#{service}##{rpc} #{duration}"
end

Then I tested this on the discussions in https://gitlab.com/gitlab-com/marketing/community-relations/community-advocacy/general/issues/51.

Before
commit_service#find_commit 0.008439644239842892
blob_service#get_blobs 0.0011244579218328
commit_service#find_commit 0.002256019040942192
blob_service#get_blobs 0.0010480480268597603
commit_service#find_commit 0.002149587031453848
blob_service#get_blobs 0.0009844801388680935
commit_service#find_commit 0.0020596948452293873
blob_service#get_blobs 0.0008840681985020638
commit_service#find_commit 0.0018421458080410957
blob_service#get_blobs 0.0008287378586828709
commit_service#find_commit 0.0024761129170656204
blob_service#get_blobs 0.0010162102989852428
commit_service#find_commit 0.0020230161026120186
blob_service#get_blobs 0.0010509369894862175
commit_service#find_commit 0.0019882782362401485
blob_service#get_blobs 0.0008442220278084278
commit_service#find_commit 0.002106880769133568
blob_service#get_blobs 0.0009844028390944004
commit_service#find_commit 0.001977185718715191
blob_service#get_blobs 0.0008573140949010849
commit_service#find_commit 0.002076132223010063
blob_service#get_blobs 0.0008158828131854534
commit_service#find_commit 0.0020170952193439007
blob_service#get_blobs 0.0007908502593636513
commit_service#find_commit 0.0019204509444534779
blob_service#get_blobs 0.0007791928946971893
commit_service#find_commit 0.001898088026791811
blob_service#get_blobs 0.0007499218918383121
commit_service#find_commit 0.0020255865529179573
blob_service#get_blobs 0.0008196039125323296
commit_service#find_commit 0.002680561039596796
blob_service#get_blobs 0.0011780690401792526
commit_service#find_commit 0.0024018092080950737
blob_service#get_blobs 0.0010315608233213425
commit_service#find_commit 0.0025249728932976723
blob_service#get_blobs 0.0010903640650212765
commit_service#find_commit 0.002320196945220232
blob_service#get_blobs 0.001032079104334116
commit_service#find_commit 0.002211666665971279
blob_service#get_blobs 0.0010435357689857483
commit_service#find_commit 0.002000858075916767
blob_service#get_blobs 0.001219137106090784
commit_service#find_commit 0.002106606960296631
blob_service#get_blobs 0.0010377583093941212
commit_service#find_commit 0.00256264116615057
blob_service#get_blobs 0.0011718831956386566
commit_service#find_commit 0.002272757701575756
blob_service#get_blobs 0.0010390211828052998
commit_service#find_commit 0.0021501886658370495
blob_service#get_blobs 0.0009543667547404766
commit_service#find_commit 0.0021400670520961285
blob_service#get_blobs 0.0009210370481014252
commit_service#find_commit 0.002423664089292288
blob_service#get_blobs 0.0009399550035595894
commit_service#find_commit 0.002295574638992548
blob_service#get_blobs 0.0009275651536881924
commit_service#find_commit 0.002103304024785757
blob_service#get_blobs 0.000992754939943552
commit_service#find_commit 0.0018668817356228828
blob_service#get_blobs 0.0008704350329935551
commit_service#find_commit 0.0021933396346867085
blob_service#get_blobs 0.001006350852549076
commit_service#find_commit 0.0021492140367627144
blob_service#get_blobs 0.0009789001196622849
commit_service#find_commit 0.0020215092226862907
blob_service#get_blobs 0.0009334459900856018
commit_service#find_commit 0.001965742092579603
blob_service#get_blobs 0.0008921739645302296
commit_service#find_commit 0.0018349098972976208
blob_service#get_blobs 0.0009639421477913857
commit_service#find_commit 0.001978800632059574
blob_service#get_blobs 0.0011349809356033802
commit_service#find_commit 0.002066981978714466
blob_service#get_blobs 0.0009513557888567448
commit_service#find_commit 0.0019418280571699142
blob_service#get_blobs 0.0009408770129084587
commit_service#find_commit 0.0019657136872410774
blob_service#get_blobs 0.0008804090321063995
commit_service#find_commit 0.001987661235034466
blob_service#get_blobs 0.000959465280175209
commit_service#find_commit 0.0020558061078190804
blob_service#get_blobs 0.0008851001039147377
commit_service#find_commit 0.0019522267393767834
blob_service#get_blobs 0.0008822041563689709
commit_service#find_commit 0.0018592369742691517
blob_service#get_blobs 0.0008733072318136692
commit_service#find_commit 0.0017562941648066044
blob_service#get_blobs 0.0008570542559027672
commit_service#find_commit 0.0018467879854142666
blob_service#get_blobs 0.0008388110436499119
commit_service#find_commit 0.0022962819784879684
blob_service#get_blobs 0.0011222297325730324
commit_service#find_commit 0.002060279715806246
blob_service#get_blobs 0.0009935470297932625
commit_service#find_commit 0.0019495622254908085
blob_service#get_blobs 0.0008566887117922306
commit_service#find_commit 0.0021105390042066574
blob_service#get_blobs 0.0009081228636205196
commit_service#find_commit 0.002001579850912094
blob_service#get_blobs 0.0008942438289523125
commit_service#find_commit 0.001903813797980547
blob_service#get_blobs 0.0008464897982776165
commit_service#find_commit 0.0020823809318244457
blob_service#get_blobs 0.0008500711992383003
commit_service#find_commit 0.0019648722372949123
blob_service#get_blobs 0.0009411829523742199
commit_service#find_commit 0.0019118860363960266
blob_service#get_blobs 0.0009246678091585636
commit_service#find_commit 0.001951159443706274
blob_service#get_blobs 0.0009223208762705326
commit_service#find_commit 0.0020366362296044827
blob_service#get_blobs 0.0011710291728377342
commit_service#find_commit 0.002159812953323126
blob_service#get_blobs 0.0009846361353993416
commit_service#find_commit 0.0021133399568498135
blob_service#get_blobs 0.0009224992245435715
commit_service#find_commit 0.001977552194148302
blob_service#get_blobs 0.0009259381331503391
commit_service#find_commit 0.0020624930039048195
blob_service#get_blobs 0.0009336690418422222
commit_service#find_commit 0.0020117019303143024
blob_service#get_blobs 0.0009330622851848602
commit_service#find_commit 0.001860947348177433
blob_service#get_blobs 0.0008603530004620552
commit_service#find_commit 0.0018892246298491955
blob_service#get_blobs 0.000930155161768198
commit_service#find_commit 0.0019546938128769398
blob_service#get_blobs 0.0010952441953122616
commit_service#find_commit 0.002424465026706457
blob_service#get_blobs 0.0009629549458622932
commit_service#find_commit 0.0019943108782172203
blob_service#get_blobs 0.000934455543756485
commit_service#find_commit 0.002021396066993475
blob_service#get_blobs 0.0009528608061373234
commit_service#find_commit 0.0022231442853808403
blob_service#get_blobs 0.0009816978126764297
commit_service#find_commit 0.002151730004698038
blob_service#get_blobs 0.0010902551002800465
commit_service#find_commit 0.002096366137266159
blob_service#get_blobs 0.0010664616711437702
commit_service#find_commit 0.002223295159637928
blob_service#get_blobs 0.0010543270036578178
commit_service#find_commit 0.0023636347614228725
blob_service#get_blobs 0.0011378289200365543
commit_service#find_commit 0.0021804869174957275
blob_service#get_blobs 0.0010287081822752953
commit_service#find_commit 0.0021595731377601624
blob_service#get_blobs 0.0009898943826556206
commit_service#find_commit 0.0020172870717942715
blob_service#get_blobs 0.0009190989658236504
commit_service#find_commit 0.002214305102825165
blob_service#get_blobs 0.0009428779594600201
commit_service#find_commit 0.0022585969418287277
blob_service#get_blobs 0.0010309899225831032
commit_service#find_commit 0.0023366371169686317
blob_service#get_blobs 0.001060177106410265
commit_service#find_commit 0.002323152031749487
blob_service#get_blobs 0.001011447049677372
commit_service#find_commit 0.002365493681281805
blob_service#get_blobs 0.001097777858376503
commit_service#find_commit 0.0023463107645511627
blob_service#get_blobs 0.0009898529388010502
commit_service#find_commit 0.0021875700913369656
blob_service#get_blobs 0.0010292371734976768
commit_service#find_commit 0.002157151233404875
blob_service#get_blobs 0.0009984890930354595
commit_service#find_commit 0.0021100910380482674
blob_service#get_blobs 0.0009635281749069691
commit_service#find_commit 0.0020976597443223
blob_service#get_blobs 0.0009609321132302284
commit_service#find_commit 0.0021198270842432976
blob_service#get_blobs 0.0009358031675219536
commit_service#find_commit 0.0022694161161780357
blob_service#get_blobs 0.0012425659224390984
commit_service#find_commit 0.0021539069712162018
blob_service#get_blobs 0.0009998958557844162
commit_service#find_commit 0.002173398155719042
blob_service#get_blobs 0.0009478903375566006
commit_service#find_commit 0.0020712222903966904
blob_service#get_blobs 0.0009466870687901974
commit_service#find_commit 0.00227233674377203
blob_service#get_blobs 0.0009591290727257729
commit_service#find_commit 0.0021370970644056797
blob_service#get_blobs 0.00097222113981843
commit_service#find_commit 0.00208457512781024
blob_service#get_blobs 0.0009177988395094872
commit_service#find_commit 0.0020572058856487274
blob_service#get_blobs 0.0009461515583097935
commit_service#find_commit 0.002160129137337208
blob_service#get_blobs 0.0009994739666581154
commit_service#find_commit 0.0022653001360595226
blob_service#get_blobs 0.001026267185807228
commit_service#find_commit 0.0020458470098674297
blob_service#get_blobs 0.00094941770657897
commit_service#find_commit 0.0028503499925136566
blob_service#get_blobs 0.000958545133471489
commit_service#find_commit 0.005740391090512276
blob_service#get_blobs 0.0010974742472171783
commit_service#find_commit 0.0020149042829871178
blob_service#get_blobs 0.000948609784245491
commit_service#find_commit 0.0020015942864120007
blob_service#get_blobs 0.0009410791099071503
commit_service#find_commit 0.0022177197970449924
blob_service#get_blobs 0.0009690192528069019
After
commit_service#find_commit 0.012339851818978786
blob_service#get_blobs 0.0011776508763432503
blob_service#get_blobs 0.0011498797684907913
blob_service#get_blobs 0.0011292113922536373
blob_service#get_blobs 0.0010914490558207035
blob_service#get_blobs 0.0010878830216825008
blob_service#get_blobs 0.0011080102995038033
blob_service#get_blobs 0.0011097150854766369
blob_service#get_blobs 0.001053249929100275
blob_service#get_blobs 0.0011549321934580803
blob_service#get_blobs 0.0011777831241488457
blob_service#get_blobs 0.001190979965031147
blob_service#get_blobs 0.0011778189800679684
blob_service#get_blobs 0.0011666491627693176
blob_service#get_blobs 0.0012420229613780975
blob_service#get_blobs 0.0011342000216245651
blob_service#get_blobs 0.001085994765162468
blob_service#get_blobs 0.001143530011177063
blob_service#get_blobs 0.0011569978669285774
blob_service#get_blobs 0.0011254651471972466
blob_service#get_blobs 0.0010850680992007256
blob_service#get_blobs 0.0010495111346244812
blob_service#get_blobs 0.0010454682633280754
blob_service#get_blobs 0.0011141682043671608
blob_service#get_blobs 0.0010444233193993568
blob_service#get_blobs 0.00109931081533432
blob_service#get_blobs 0.0010334271937608719
blob_service#get_blobs 0.0010114707984030247
blob_service#get_blobs 0.0009846012108027935
blob_service#get_blobs 0.0010003698989748955
blob_service#get_blobs 0.001016257330775261
blob_service#get_blobs 0.0011044270358979702
blob_service#get_blobs 0.001069866120815277
blob_service#get_blobs 0.0010769441723823547
blob_service#get_blobs 0.0011077867820858955
blob_service#get_blobs 0.0010895850136876106
blob_service#get_blobs 0.001170894131064415
blob_service#get_blobs 0.0011038603261113167
blob_service#get_blobs 0.0011204257607460022
blob_service#get_blobs 0.00116382772102952
blob_service#get_blobs 0.001147944014519453
blob_service#get_blobs 0.0010688886977732182
blob_service#get_blobs 0.0011051739566028118
blob_service#get_blobs 0.001080390065908432
blob_service#get_blobs 0.0010636700317263603
blob_service#get_blobs 0.0010823039337992668
blob_service#get_blobs 0.0011276169680058956
blob_service#get_blobs 0.0010712388902902603
blob_service#get_blobs 0.0010086018592119217
blob_service#get_blobs 0.0010665873996913433
blob_service#get_blobs 0.0009740861132740974
blob_service#get_blobs 0.0009657386690378189
blob_service#get_blobs 0.0010904823429882526
blob_service#get_blobs 0.001020926982164383
blob_service#get_blobs 0.0010359934531152248
blob_service#get_blobs 0.0010702651925384998
blob_service#get_blobs 0.0010564029216766357
blob_service#get_blobs 0.0010212589986622334
blob_service#get_blobs 0.0010214019566774368
blob_service#get_blobs 0.0010598921217024326
blob_service#get_blobs 0.001082264818251133
blob_service#get_blobs 0.0010378188453614712
blob_service#get_blobs 0.000979423988610506
blob_service#get_blobs 0.0010326136834919453
blob_service#get_blobs 0.001032775267958641
blob_service#get_blobs 0.0010657659731805325
blob_service#get_blobs 0.0011463561095297337
blob_service#get_blobs 0.001125614158809185
blob_service#get_blobs 0.0010534143075346947
blob_service#get_blobs 0.0010486617684364319
blob_service#get_blobs 0.0010528932325541973
blob_service#get_blobs 0.001027122139930725
blob_service#get_blobs 0.0010364698246121407
blob_service#get_blobs 0.0010259049013257027
blob_service#get_blobs 0.0009630671702325344
blob_service#get_blobs 0.0009791352786123753
blob_service#get_blobs 0.0012255329638719559
blob_service#get_blobs 0.0009962418116629124
blob_service#get_blobs 0.0009676017798483372
blob_service#get_blobs 0.0009651528671383858
blob_service#get_blobs 0.0009844573214650154
blob_service#get_blobs 0.0010231640189886093
blob_service#get_blobs 0.0009545288048684597
blob_service#get_blobs 0.000984859187155962
blob_service#get_blobs 0.0010140901431441307
blob_service#get_blobs 0.001085139811038971
blob_service#get_blobs 0.0010341326706111431
blob_service#get_blobs 0.0010257717221975327
blob_service#get_blobs 0.0010890690609812737
blob_service#get_blobs 0.0009927316568791866
blob_service#get_blobs 0.0010059340856969357
blob_service#get_blobs 0.0009923730976879597
blob_service#get_blobs 0.0010506510734558105
blob_service#get_blobs 0.0009820288978517056
blob_service#get_blobs 0.0010147644206881523
blob_service#get_blobs 0.0010272539220750332
blob_service#get_blobs 0.001100136898458004
blob_service#get_blobs 0.0011981800198554993
blob_service#get_blobs 0.0011566518805921078
blob_service#get_blobs 0.0011070691980421543
blob_service#get_blobs 0.001073841005563736
blob_service#get_blobs 0.0010285302996635437
blob_service#get_blobs 0.001062055118381977

Does this MR meet the acceptance criteria?

Conformity

Part of #34404 (closed).

Merge request reports