@@ -149,16 +149,16 @@ public Future<BidResponse> holdAuction(AuctionContext context) {
149
149
final Account account = context .getAccount ();
150
150
final List <String > debugWarnings = context .getDebugWarnings ();
151
151
152
- final List <SeatBid > storedResponse = new ArrayList <>();
152
+ final List <SeatBid > storedAuctionResponses = new ArrayList <>();
153
153
final BidderAliases aliases = aliases (bidRequest );
154
154
final String publisherId = account .getId ();
155
155
final BidRequestCacheInfo cacheInfo = bidRequestCacheInfo (bidRequest );
156
156
final boolean debugEnabled = isDebugEnabled (bidRequest );
157
157
final Map <String , MultiBidConfig > bidderToMultiBid = bidderToMultiBids (bidRequest , debugWarnings );
158
158
159
- return storedResponseProcessor .getStoredResponseResult (bidRequest .getImp (), aliases , timeout )
160
- .map (storedResponseResult -> populateStoredResponse (storedResponseResult , storedResponse ))
161
- .compose (impsRequiredRequest -> extractBidderRequests (context , impsRequiredRequest , aliases ))
159
+ return storedResponseProcessor .getStoredResponseResult (bidRequest .getImp (), timeout )
160
+ .map (storedResponseResult -> populateStoredResponse (storedResponseResult , storedAuctionResponses ))
161
+ .compose (storedResponseResult -> extractBidderRequests (context , storedResponseResult , aliases ))
162
162
.map (bidderRequests -> updateRequestMetric (
163
163
bidderRequests , uidsCookie , aliases , publisherId , context .getRequestTypeMetric ()))
164
164
.compose (bidderRequests -> CompositeFuture .join (
@@ -172,7 +172,7 @@ public Future<BidResponse> holdAuction(AuctionContext context) {
172
172
// send all the requests to the bidders and gathers results
173
173
.map (CompositeFuture ::<BidderResponse >list )
174
174
.map (bidderResponses -> storedResponseProcessor .mergeWithBidderResponses (
175
- bidderResponses , storedResponse , bidRequest .getImp ()))
175
+ bidderResponses , storedAuctionResponses , bidRequest .getImp ()))
176
176
.map (bidderResponses -> validateAndAdjustBids (bidderResponses , context , aliases ))
177
177
.map (bidderResponses -> updateMetricsFromResponses (bidderResponses , publisherId , aliases ))
178
178
// produce response from bidder results
@@ -327,10 +327,10 @@ private static MultiBidConfig toMultiBid(String bidder, Integer maxBids, String
327
327
* Populates storedResponse parameter with stored {@link List<SeatBid>} and returns {@link List<Imp>} for which
328
328
* request to bidders should be performed.
329
329
*/
330
- private static List < Imp > populateStoredResponse (StoredResponseResult storedResponseResult ,
331
- List <SeatBid > storedResponse ) {
332
- storedResponse .addAll (storedResponseResult .getStoredResponse ());
333
- return storedResponseResult . getRequiredRequestImps () ;
330
+ private static StoredResponseResult populateStoredResponse (StoredResponseResult storedResponseResult ,
331
+ List <SeatBid > storedResponse ) {
332
+ storedResponse .addAll (storedResponseResult .getAuctionStoredResponse ());
333
+ return storedResponseResult ;
334
334
}
335
335
336
336
/**
@@ -362,21 +362,20 @@ private static List<Imp> populateStoredResponse(StoredResponseResult storedRespo
362
362
* {@link Imp}, and are known to {@link BidderCatalog} or aliases from bidRequest.ext.prebid.aliases.
363
363
*/
364
364
private Future <List <BidderRequest >> extractBidderRequests (AuctionContext context ,
365
- List < Imp > requestedImps ,
365
+ StoredResponseResult storedResponseResult ,
366
366
BidderAliases aliases ) {
367
-
368
- final List <Imp > imps = requestedImps .stream ()
367
+ final List <Imp > imps = storedResponseResult .getRequiredRequestImps ().stream ()
369
368
.filter (imp -> bidderParamsFromImpExt (imp .getExt ()) != null )
370
369
.collect (Collectors .toList ());
371
-
372
370
// identify valid bidders and aliases out of imps
373
371
final List <String > bidders = imps .stream ()
374
372
.flatMap (imp -> StreamUtil .asStream (bidderParamsFromImpExt (imp .getExt ()).fieldNames ())
375
373
.filter (bidder -> isValidBidder (bidder , aliases )))
376
374
.distinct ()
377
375
.collect (Collectors .toList ());
378
376
379
- return makeBidderRequests (bidders , context , aliases , imps );
377
+ return makeBidderRequests (bidders , context , aliases , storedResponseResult .getImpBidderToStoredBidResponse (),
378
+ imps );
380
379
}
381
380
382
381
private static JsonNode bidderParamsFromImpExt (ObjectNode ext ) {
@@ -408,6 +407,7 @@ private boolean isValidBidder(String bidder, BidderAliases aliases) {
408
407
private Future <List <BidderRequest >> makeBidderRequests (List <String > bidders ,
409
408
AuctionContext context ,
410
409
BidderAliases aliases ,
410
+ Map <String , Map <String , String >> impBidderToStoredResponse ,
411
411
List <Imp > imps ) {
412
412
413
413
final BidRequest bidRequest = context .getBidRequest ();
@@ -424,7 +424,8 @@ private Future<List<BidderRequest>> makeBidderRequests(List<String> bidders,
424
424
return privacyEnforcementService
425
425
.mask (context , bidderToUser , bidders , aliases )
426
426
.map (bidderToPrivacyResult ->
427
- getBidderRequests (bidderToPrivacyResult , bidRequest , imps , biddersToConfigs ));
427
+ getBidderRequests (bidderToPrivacyResult , bidRequest , impBidderToStoredResponse , imps ,
428
+ biddersToConfigs ));
428
429
}
429
430
430
431
private Map <String , ExtBidderConfigOrtb > getBiddersToConfigs (ExtRequest requestExt ) {
@@ -576,6 +577,7 @@ private String resolveCookieFamilyName(String bidder) {
576
577
*/
577
578
private List <BidderRequest > getBidderRequests (List <BidderPrivacyResult > bidderPrivacyResults ,
578
579
BidRequest bidRequest ,
580
+ Map <String , Map <String , String >> impBidderToStoredBidResponse ,
579
581
List <Imp > imps ,
580
582
Map <String , ExtBidderConfigOrtb > biddersToConfigs ) {
581
583
@@ -588,6 +590,7 @@ private List<BidderRequest> getBidderRequests(List<BidderPrivacyResult> bidderPr
588
590
.map (bidderPrivacyResult -> createBidderRequest (
589
591
bidderPrivacyResult ,
590
592
bidRequest ,
593
+ impBidderToStoredBidResponse ,
591
594
imps ,
592
595
biddersToConfigs ,
593
596
bidderToPrebidBidders ))
@@ -624,6 +627,7 @@ private static Map<String, JsonNode> bidderToPrebidBidders(BidRequest bidRequest
624
627
*/
625
628
private BidderRequest createBidderRequest (BidderPrivacyResult bidderPrivacyResult ,
626
629
BidRequest bidRequest ,
630
+ Map <String , Map <String , String >> impBidderToStoredBidResponse ,
627
631
List <Imp > imps ,
628
632
Map <String , ExtBidderConfigOrtb > biddersToConfigs ,
629
633
Map <String , JsonNode > bidderToPrebidBidders ) {
@@ -650,7 +654,12 @@ private BidderRequest createBidderRequest(BidderPrivacyResult bidderPrivacyResul
650
654
return null ;
651
655
}
652
656
653
- return BidderRequest .of (bidder , bidRequest .toBuilder ()
657
+ // stored bid response supported only for single imp requests
658
+ final String storedBidResponse = impBidderToStoredBidResponse .size () == 1
659
+ ? impBidderToStoredBidResponse .get (imps .get (0 ).getId ()).get (bidder )
660
+ : null ;
661
+
662
+ return BidderRequest .of (bidder , storedBidResponse , bidRequest .toBuilder ()
654
663
// User was already prepared above
655
664
.user (bidderPrivacyResult .getUser ())
656
665
.device (bidderPrivacyResult .getDevice ())
@@ -889,7 +898,7 @@ private Future<BidderResponse> requestBids(BidderRequest bidderRequest,
889
898
final Bidder <?> bidder = bidderCatalog .bidderByName (aliases .resolveBidder (bidderName ));
890
899
final long startTime = clock .millis ();
891
900
892
- return httpBidderRequester .requestBids (bidder , bidderRequest . getBidRequest () , timeout , debugEnabled )
901
+ return httpBidderRequester .requestBids (bidder , bidderRequest , timeout , debugEnabled )
893
902
.map (seatBid -> BidderResponse .of (bidderName , seatBid , responseTime (startTime )));
894
903
}
895
904
0 commit comments