Skip to content

Commit 3697db2

Browse files
Merge branch 'master' of github.com:prebid/prebid-server-java
2 parents a51d0cf + 023df5c commit 3697db2

File tree

254 files changed

+1135
-1292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

254 files changed

+1135
-1292
lines changed

.github/workflows/pr-functional-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ jobs:
3636
${{ runner.os }}-maven-
3737
3838
- name: Build with Maven
39-
run: mvn -B verify -DskipUnitTests=true --file extra/pom.xml
39+
run: mvn -B verify -DskipUnitTests=true -Dmax.containers.count=5 --file extra/pom.xml

pom.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
<iabtcf.version>2.0.7</iabtcf.version>
5151
<metrics-prometheus.version>0.5.0</metrics-prometheus.version>
5252
<maxmind-client.version>2.12.0</maxmind-client.version>
53+
<logback.version>1.2.8</logback.version>
54+
<log4j.version>2.17.0</log4j.version>
5355

5456
<!-- test dependencies versions -->
5557
<junit.version>4.13.2</junit.version>
@@ -61,7 +63,7 @@
6163
<awaitility.version>4.1.0</awaitility.version>
6264
<jetty.version>9.4.44.v20210927</jetty.version>
6365
<restassured.version>4.4.0</restassured.version>
64-
<h2.version>1.4.200</h2.version>
66+
<h2.version>2.0.202</h2.version>
6567
<spock.version>2.0-groovy-3.0</spock.version>
6668
<testcontainers.version>1.16.2</testcontainers.version>
6769
<mockserver-client.version>5.11.2</mockserver-client.version>
@@ -318,6 +320,27 @@
318320
<artifactId>geoip2</artifactId>
319321
<version>${maxmind-client.version}</version>
320322
</dependency>
323+
<!--TODO: Remove this after bumping to new Spring Parent with safe log4j and logback -->
324+
<dependency>
325+
<groupId>ch.qos.logback</groupId>
326+
<artifactId>logback-classic</artifactId>
327+
<version>${logback.version}</version>
328+
</dependency>
329+
<dependency>
330+
<groupId>ch.qos.logback</groupId>
331+
<artifactId>logback-core</artifactId>
332+
<version>${logback.version}</version>
333+
</dependency>
334+
<dependency>
335+
<groupId>org.apache.logging.log4j</groupId>
336+
<artifactId>log4j-to-slf4j</artifactId>
337+
<version>${log4j.version}</version>
338+
</dependency>
339+
<dependency>
340+
<groupId>org.apache.logging.log4j</groupId>
341+
<artifactId>log4j-api</artifactId>
342+
<version>${log4j.version}</version>
343+
</dependency>
321344
<!-- Test -->
322345
<dependency>
323346
<groupId>junit</groupId>
@@ -725,6 +748,7 @@
725748
<allure.results.directory>target/allure-results</allure.results.directory>
726749
<mockserver.version>${mockserver-client.version}</mockserver.version>
727750
<pbs.version>${project.version}</pbs.version>
751+
<max.containers.count>2</max.containers.count>
728752
</systemPropertyVariables>
729753
</configuration>
730754
<executions>

src/main/java/org/prebid/server/auction/ExchangeService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,9 @@ private static BidRequestCacheInfo bidRequestCacheInfo(BidRequest bidRequest) {
315315
if (targeting != null && cache != null) {
316316
final boolean shouldCacheBids = cache.getBids() != null;
317317
final boolean shouldCacheVideoBids = cache.getVastxml() != null;
318-
final boolean shouldCacheWinningBidsOnly = targeting.getIncludebidderkeys()
319-
? false
318+
final boolean shouldCacheWinningBidsOnly = !targeting.getIncludebidderkeys()
320319
// ext.prebid.targeting.includebidderkeys takes precedence
321-
: ObjectUtils.defaultIfNull(cache.getWinningonly(), false);
320+
&& ObjectUtils.defaultIfNull(cache.getWinningonly(), false);
322321

323322
if (shouldCacheBids || shouldCacheVideoBids || shouldCacheWinningBidsOnly) {
324323
final Integer cacheBidsTtl = shouldCacheBids ? cache.getBids().getTtlseconds() : null;

src/main/java/org/prebid/server/auction/PrivacyEnforcementService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private Set<String> extractCcpaEnforcedBidders(List<String> bidders,
422422
if (nosaleBidders.size() == 1 && nosaleBidders.contains(CATCH_ALL_BIDDERS)) {
423423
ccpaEnforcedBidders.clear();
424424
} else {
425-
ccpaEnforcedBidders.removeAll(nosaleBidders);
425+
nosaleBidders.forEach(ccpaEnforcedBidders::remove);
426426
}
427427

428428
ccpaEnforcedBidders.removeIf(bidder ->

src/main/java/org/prebid/server/auction/StoredRequestProcessor.java

Lines changed: 46 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.prebid.server.settings.ApplicationSettings;
2424
import org.prebid.server.settings.model.StoredDataResult;
2525
import org.prebid.server.settings.model.VideoStoredDataResult;
26+
import org.prebid.server.util.ObjectUtil;
2627

2728
import java.util.ArrayList;
2829
import java.util.Collections;
@@ -43,18 +44,19 @@ public class StoredRequestProcessor {
4344
private static final String OVERRIDE_BID_REQUEST_ID_TEMPLATE = "{{UUID}}";
4445

4546
private final long defaultTimeout;
46-
private final boolean generateBidRequestId;
4747
private final BidRequest defaultBidRequest;
48+
private final boolean generateBidRequestId;
4849
private final ApplicationSettings applicationSettings;
4950
private final IdGenerator idGenerator;
5051
private final Metrics metrics;
5152
private final TimeoutFactory timeoutFactory;
5253
private final JacksonMapper mapper;
5354
private final JsonMerger jsonMerger;
5455

55-
private StoredRequestProcessor(long defaultTimeout,
56-
BidRequest defaultBidRequest,
56+
public StoredRequestProcessor(long defaultTimeout,
57+
String defaultBidRequestPath,
5758
boolean generateBidRequestId,
59+
FileSystem fileSystem,
5860
ApplicationSettings applicationSettings,
5961
IdGenerator idGenerator,
6062
Metrics metrics,
@@ -63,38 +65,15 @@ private StoredRequestProcessor(long defaultTimeout,
6365
JsonMerger jsonMerger) {
6466

6567
this.defaultTimeout = defaultTimeout;
66-
this.defaultBidRequest = defaultBidRequest;
68+
this.defaultBidRequest = readBidRequest(
69+
defaultBidRequestPath, Objects.requireNonNull(fileSystem), Objects.requireNonNull(mapper));
6770
this.generateBidRequestId = generateBidRequestId;
68-
this.applicationSettings = applicationSettings;
69-
this.timeoutFactory = timeoutFactory;
70-
this.idGenerator = idGenerator;
71-
this.metrics = metrics;
72-
this.mapper = mapper;
73-
this.jsonMerger = jsonMerger;
74-
}
75-
76-
public static StoredRequestProcessor create(long defaultTimeout,
77-
String defaultBidRequestPath,
78-
boolean generateBidRequestId,
79-
FileSystem fileSystem,
80-
ApplicationSettings applicationSettings,
81-
IdGenerator idGenerator,
82-
Metrics metrics,
83-
TimeoutFactory timeoutFactory,
84-
JacksonMapper mapper,
85-
JsonMerger jsonMerger) {
86-
87-
return new StoredRequestProcessor(
88-
defaultTimeout,
89-
readBidRequest(
90-
defaultBidRequestPath, Objects.requireNonNull(fileSystem), Objects.requireNonNull(mapper)),
91-
generateBidRequestId,
92-
Objects.requireNonNull(applicationSettings),
93-
Objects.requireNonNull(idGenerator),
94-
Objects.requireNonNull(metrics),
95-
Objects.requireNonNull(timeoutFactory),
96-
Objects.requireNonNull(mapper),
97-
Objects.requireNonNull(jsonMerger));
71+
this.applicationSettings = Objects.requireNonNull(applicationSettings);
72+
this.idGenerator = Objects.requireNonNull(idGenerator);
73+
this.metrics = Objects.requireNonNull(metrics);
74+
this.timeoutFactory = Objects.requireNonNull(timeoutFactory);
75+
this.mapper = Objects.requireNonNull(mapper);
76+
this.jsonMerger = Objects.requireNonNull(jsonMerger);
9877
}
9978

10079
/**
@@ -108,7 +87,7 @@ public Future<BidRequest> processStoredRequests(String accountId, BidRequest bid
10887
final Map<Imp, String> impToStoredRequestId;
10988
try {
11089
bidRequestToStoredRequestId = mapStoredRequestHolderToStoredRequestId(
111-
Collections.singletonList(bidRequest), this::getStoredRequestFromBidRequest);
90+
Collections.singletonList(bidRequest), StoredRequestProcessor::getStoredRequestFromBidRequest);
11291

11392
impToStoredRequestId = mapStoredRequestHolderToStoredRequestId(
11493
bidRequest.getImp(), this::getStoredRequestFromImp);
@@ -132,12 +111,12 @@ public Future<BidRequest> processStoredRequests(String accountId, BidRequest bid
132111
}
133112

134113
/**
135-
* Fetches AMP request from the source.
114+
* Fetches the AMP request from the source.
136115
*/
137116
public Future<BidRequest> processAmpRequest(String accountId, String ampRequestId, BidRequest bidRequest) {
138117
final Future<StoredDataResult> ampStoredDataFuture =
139-
applicationSettings.getAmpStoredData(
140-
accountId, Collections.singleton(ampRequestId), Collections.emptySet(), timeout(bidRequest))
118+
applicationSettings.getAmpStoredData(accountId, Collections.singleton(ampRequestId),
119+
Collections.emptySet(), timeout(bidRequest))
141120
.compose(storedDataResult -> updateMetrics(
142121
storedDataResult, Collections.singleton(ampRequestId), Collections.emptySet()));
143122

@@ -148,8 +127,11 @@ public Future<BidRequest> processAmpRequest(String accountId, String ampRequestI
148127
/**
149128
* Fetches stored request.video and map existing values to imp.id.
150129
*/
151-
Future<VideoStoredDataResult> videoStoredDataResult(String accountId, List<Imp> imps, List<String> errors,
130+
Future<VideoStoredDataResult> videoStoredDataResult(String accountId,
131+
List<Imp> imps,
132+
List<String> errors,
152133
Timeout timeout) {
134+
153135
final Map<String, String> storedIdToImpId =
154136
mapStoredRequestHolderToStoredRequestId(imps, this::getStoredRequestFromImp)
155137
.entrySet().stream()
@@ -160,16 +142,21 @@ Future<VideoStoredDataResult> videoStoredDataResult(String accountId, List<Imp>
160142
.map(storedDataResult -> makeVideoStoredDataResult(storedDataResult, storedIdToImpId, errors));
161143
}
162144

163-
private Future<StoredDataResult> updateMetrics(StoredDataResult storedDataResult, Set<String> requestIds,
145+
private Future<StoredDataResult> updateMetrics(StoredDataResult storedDataResult,
146+
Set<String> requestIds,
164147
Set<String> impIds) {
148+
165149
requestIds.forEach(
166150
id -> metrics.updateStoredRequestMetric(storedDataResult.getStoredIdToRequest().containsKey(id)));
167-
impIds.forEach(id -> metrics.updateStoredImpsMetric(storedDataResult.getStoredIdToImp().containsKey(id)));
151+
152+
impIds.forEach(
153+
id -> metrics.updateStoredImpsMetric(storedDataResult.getStoredIdToImp().containsKey(id)));
168154

169155
return Future.succeededFuture(storedDataResult);
170156
}
171157

172-
private static BidRequest readBidRequest(String defaultBidRequestPath, FileSystem fileSystem,
158+
private static BidRequest readBidRequest(String defaultBidRequestPath,
159+
FileSystem fileSystem,
173160
JacksonMapper mapper) {
174161

175162
return StringUtils.isNotBlank(defaultBidRequestPath)
@@ -234,16 +221,19 @@ private Future<BidRequest> storedRequestsToBidRequest(Future<StoredDataResult> s
234221

235222
/**
236223
* Runs {@link BidRequest} and {@link Imp}s merge processes.
224+
* <p>
225+
* The merging priority is: original request > stored request > default request
237226
*/
238227
private BidRequest mergeBidRequestAndImps(BidRequest bidRequest,
239228
String storedRequestId,
240229
Map<Imp, String> impToStoredId,
241230
StoredDataResult storedDataResult) {
242231

243-
return mergeBidRequestImps(
244-
mergeBidRequest(mergeDefaultRequest(bidRequest), storedRequestId, storedDataResult),
245-
impToStoredId,
246-
storedDataResult);
232+
final BidRequest mergedWithStoredRequest = mergeBidRequest(bidRequest, storedRequestId, storedDataResult);
233+
234+
final BidRequest mergedWithDefaultRequest = mergeDefaultRequest(mergedWithStoredRequest);
235+
236+
return mergeImps(mergedWithDefaultRequest, impToStoredId, storedDataResult);
247237
}
248238

249239
private BidRequest mergeDefaultRequest(BidRequest bidRequest) {
@@ -268,8 +258,9 @@ private BidRequest mergeBidRequest(BidRequest originalRequest,
268258
* Merges {@link Imp}s from original request with Imps from stored request source. Values from original request
269259
* has higher priority than stored request values.
270260
*/
271-
private BidRequest mergeBidRequestImps(BidRequest bidRequest, Map<Imp, String> impToStoredId,
272-
StoredDataResult storedDataResult) {
261+
private BidRequest mergeImps(BidRequest bidRequest,
262+
Map<Imp, String> impToStoredId,
263+
StoredDataResult storedDataResult) {
273264

274265
if (impToStoredId.isEmpty()) {
275266
return bidRequest;
@@ -305,8 +296,9 @@ private BidRequest generateBidRequestId(BidRequest bidRequest) {
305296
* Gathers all errors into list, and in case if it is not empty, throws {@link InvalidRequestException} with list
306297
* of errors.
307298
*/
308-
private <K> Map<K, String> mapStoredRequestHolderToStoredRequestId(
309-
List<K> storedRequestHolders, Function<K, ExtStoredRequest> storedRequestExtractor) {
299+
private static <K> Map<K, String> mapStoredRequestHolderToStoredRequestId(
300+
List<K> storedRequestHolders,
301+
Function<K, ExtStoredRequest> storedRequestExtractor) {
310302

311303
if (CollectionUtils.isEmpty(storedRequestHolders)) {
312304
return Collections.emptyMap();
@@ -339,15 +331,9 @@ private <K> Map<K, String> mapStoredRequestHolderToStoredRequestId(
339331
/**
340332
* Extracts {@link ExtStoredRequest} from {@link BidRequest} if exists.
341333
*/
342-
private ExtStoredRequest getStoredRequestFromBidRequest(BidRequest bidRequest) {
343-
final ExtRequest ext = bidRequest.getExt();
344-
if (ext != null) {
345-
final ExtRequestPrebid prebid = ext.getPrebid();
346-
if (prebid != null) {
347-
return prebid.getStoredrequest();
348-
}
349-
}
350-
return null;
334+
private static ExtStoredRequest getStoredRequestFromBidRequest(BidRequest bidRequest) {
335+
final ExtRequestPrebid prebid = ObjectUtil.getIfNotNull(bidRequest.getExt(), ExtRequest::getPrebid);
336+
return ObjectUtil.getIfNotNull(prebid, ExtRequestPrebid::getStoredrequest);
351337
}
352338

353339
/**
@@ -371,7 +357,7 @@ private ExtStoredRequest getStoredRequestFromImp(Imp imp) {
371357
}
372358

373359
/**
374-
* If the request defines tmax explicitly, then it is returned as is. Otherwise default timeout is returned.
360+
* If the request defines tmax explicitly, then it is returned as is. Otherwise, default timeout is returned.
375361
*/
376362
private Timeout timeout(BidRequest bidRequest) {
377363
final Long tmax = bidRequest.getTmax();

src/main/java/org/prebid/server/auction/StoredResponseProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ public class StoredResponseProcessor {
4747
private static final String PREBID_EXT = "prebid";
4848
private static final String DEFAULT_BID_CURRENCY = "USD";
4949

50-
private static final TypeReference<List<SeatBid>> SEATBID_LIST_TYPE = new TypeReference<List<SeatBid>>() {
51-
};
50+
private static final TypeReference<List<SeatBid>> SEATBID_LIST_TYPE =
51+
new TypeReference<>() {
52+
};
5253

5354
private final ApplicationSettings applicationSettings;
5455
private final JacksonMapper mapper;

src/main/java/org/prebid/server/auction/TargetingKeywordsCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ private Map<String, String> makeFor(String bidder,
204204
keywordMap.put(HB_VAST_ID_KEY, vastCacheId);
205205
}
206206
if ((StringUtils.isNotBlank(vastCacheId) || StringUtils.isNotBlank(cacheId))
207-
&& (cacheHost != null && cachePath != null)) {
207+
&& cacheHost != null && cachePath != null) {
208208
keywordMap.put(HB_CACHE_HOST_KEY, cacheHost);
209209
keywordMap.put(HB_CACHE_PATH_KEY, cachePath);
210210
}

src/main/java/org/prebid/server/auction/VideoResponseFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,13 @@ private static ExtAmpVideoResponse extResponseFrom(BidResponse bidResponse) {
156156
final ExtResponseDebug extDebug = ext != null ? ext.getDebug() : null;
157157

158158
final Map<String, List<ExtBidderError>> extErrors = ext != null ? ext.getErrors() : null;
159+
final Map<String, List<ExtBidderError>> extWarnings = ext != null ? ext.getWarnings() : null;
159160

160161
final ExtModules extModules = extPrebid != null ? extPrebid.getModules() : null;
161162
final ExtAmpVideoPrebid extAmpVideoPrebid = extModules != null ? ExtAmpVideoPrebid.of(extModules) : null;
162163

163-
return ObjectUtils.anyNotNull(extDebug, extErrors, extAmpVideoPrebid)
164-
? ExtAmpVideoResponse.of(extDebug, extErrors, extAmpVideoPrebid)
164+
return ObjectUtils.anyNotNull(extDebug, extErrors, extWarnings, extAmpVideoPrebid)
165+
? ExtAmpVideoResponse.of(extDebug, extErrors, extWarnings, extAmpVideoPrebid)
165166
: null;
166167
}
167168

0 commit comments

Comments
 (0)