Skip to content

Commit 3ba66eb

Browse files
committed
Alternative approach to filtering out blocked bid requests
1 parent 8f6fb26 commit 3ba66eb

File tree

2 files changed

+15
-157
lines changed

2 files changed

+15
-157
lines changed

exchange/utils.go

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func cleanOpenRTBRequests(ctx context.Context,
5959
metricsEngine metrics.MetricsEngine,
6060
usersyncIfAmbiguous bool,
6161
privacyConfig config.Privacy,
62-
account *config.Account) (bidderRequests []BidderRequest, privacyLabels metrics.PrivacyLabels, errs []error) {
62+
account *config.Account) (allowedBidderRequests []BidderRequest, privacyLabels metrics.PrivacyLabels, errs []error) {
6363

6464
impsByBidder, err := splitImps(req.BidRequest.Imp)
6565
if err != nil {
@@ -72,9 +72,10 @@ func cleanOpenRTBRequests(ctx context.Context,
7272
return
7373
}
7474

75-
bidderRequests, errs = getAuctionBidderRequests(req, requestExt, impsByBidder, aliases)
75+
var allBidderRequests []BidderRequest
76+
allBidderRequests, errs = getAuctionBidderRequests(req, requestExt, impsByBidder, aliases)
7677

77-
if len(bidderRequests) == 0 {
78+
if len(allBidderRequests) == 0 {
7879
return
7980
}
8081

@@ -118,8 +119,10 @@ func cleanOpenRTBRequests(ctx context.Context,
118119
}
119120

120121
// bidder level privacy policies
121-
blockedBidderRequests := make([]int, 0, len(bidderRequests))
122-
for idx, bidderRequest := range bidderRequests {
122+
allowedBidderRequests = make([]BidderRequest, 0, len(allBidderRequests))
123+
for _, bidderRequest := range allBidderRequests {
124+
bidRequestAllowed := true
125+
123126
// CCPA
124127
privacyEnforcement.CCPA = ccpaEnforcer.ShouldEnforce(bidderRequest.BidderName.String())
125128

@@ -136,6 +139,8 @@ func cleanOpenRTBRequests(ctx context.Context,
136139
}
137140
var publisherID = req.LegacyLabels.PubID
138141
bidReq, geo, id, err := gDPR.AuctionActivitiesAllowed(ctx, bidderRequest.BidderCoreName, publisherID, gdprSignal, consent, weakVendorEnforcement)
142+
bidRequestAllowed = bidReq
143+
139144
if err == nil {
140145
privacyEnforcement.GDPRGeo = !geo
141146
privacyEnforcement.GDPRID = !id
@@ -144,38 +149,20 @@ func cleanOpenRTBRequests(ctx context.Context,
144149
privacyEnforcement.GDPRID = true
145150
}
146151

147-
if !bidReq {
148-
blockedBidderRequests = append(blockedBidderRequests, idx)
152+
if !bidRequestAllowed {
149153
metricsEngine.RecordAdapterGDPRRequestBlocked(bidderRequest.BidderCoreName)
150154
}
151155
}
152156

153-
privacyEnforcement.Apply(bidderRequest.BidRequest)
157+
if bidRequestAllowed {
158+
privacyEnforcement.Apply(bidderRequest.BidRequest)
159+
allowedBidderRequests = append(allowedBidderRequests, bidderRequest)
160+
}
154161
}
155162

156-
bidderRequests = filterBidRequests(bidderRequests, blockedBidderRequests)
157-
158163
return
159164
}
160165

161-
// This function requires blockedRequests be in ascending order and that the values correspond to valid indices in bidRequests
162-
func filterBidRequests(bidRequests []BidderRequest, blockedRequests []int) []BidderRequest {
163-
if len(blockedRequests) == 0 {
164-
return bidRequests
165-
}
166-
167-
allowedBidRequests := make([]BidderRequest, 0, len(bidRequests))
168-
169-
lowerBound := 0
170-
for _, idx := range blockedRequests {
171-
allowedBidRequests = append(allowedBidRequests, bidRequests[lowerBound:idx]...)
172-
lowerBound = idx + 1
173-
}
174-
allowedBidRequests = append(allowedBidRequests, bidRequests[lowerBound:]...)
175-
176-
return allowedBidRequests
177-
}
178-
179166
func gdprEnabled(account *config.Account, privacyConfig config.Privacy, integrationType config.IntegrationType) bool {
180167
if accountEnabled := account.GDPR.EnabledForIntegrationType(integrationType); accountEnabled != nil {
181168
return *accountEnabled

exchange/utils_test.go

Lines changed: 0 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,132 +2215,3 @@ func TestRemoveUnpermissionedEidsEmptyValidations(t *testing.T) {
22152215
assert.Equal(t, &requestExpected, test.request, test.description+":request")
22162216
}
22172217
}
2218-
2219-
func TestFilterBidRequests(t *testing.T) {
2220-
tests := []struct {
2221-
description string
2222-
allBidRequests []BidderRequest
2223-
blockedBids []int
2224-
allowedBidRequests []BidderRequest
2225-
}{
2226-
{
2227-
description: "No blocked bids",
2228-
allBidRequests: []BidderRequest{
2229-
{BidderName: openrtb_ext.BidderAppnexus},
2230-
{BidderName: openrtb_ext.BidderOpenx},
2231-
{BidderName: openrtb_ext.BidderPubmatic},
2232-
{BidderName: openrtb_ext.BidderRubicon},
2233-
},
2234-
blockedBids: []int{},
2235-
allowedBidRequests: []BidderRequest{
2236-
{BidderName: openrtb_ext.BidderAppnexus},
2237-
{BidderName: openrtb_ext.BidderOpenx},
2238-
{BidderName: openrtb_ext.BidderPubmatic},
2239-
{BidderName: openrtb_ext.BidderRubicon},
2240-
},
2241-
},
2242-
{
2243-
description: "Block first bid",
2244-
allBidRequests: []BidderRequest{
2245-
{BidderName: openrtb_ext.BidderAppnexus},
2246-
{BidderName: openrtb_ext.BidderOpenx},
2247-
{BidderName: openrtb_ext.BidderPubmatic},
2248-
{BidderName: openrtb_ext.BidderRubicon},
2249-
},
2250-
blockedBids: []int{0},
2251-
allowedBidRequests: []BidderRequest{
2252-
{BidderName: openrtb_ext.BidderOpenx},
2253-
{BidderName: openrtb_ext.BidderPubmatic},
2254-
{BidderName: openrtb_ext.BidderRubicon},
2255-
},
2256-
},
2257-
{
2258-
description: "Block middle bid",
2259-
allBidRequests: []BidderRequest{
2260-
{BidderName: openrtb_ext.BidderAppnexus},
2261-
{BidderName: openrtb_ext.BidderOpenx},
2262-
{BidderName: openrtb_ext.BidderPubmatic},
2263-
{BidderName: openrtb_ext.BidderRubicon},
2264-
},
2265-
blockedBids: []int{1},
2266-
allowedBidRequests: []BidderRequest{
2267-
{BidderName: openrtb_ext.BidderAppnexus},
2268-
{BidderName: openrtb_ext.BidderPubmatic},
2269-
{BidderName: openrtb_ext.BidderRubicon},
2270-
},
2271-
},
2272-
{
2273-
description: "Block last bid",
2274-
allBidRequests: []BidderRequest{
2275-
{BidderName: openrtb_ext.BidderAppnexus},
2276-
{BidderName: openrtb_ext.BidderOpenx},
2277-
{BidderName: openrtb_ext.BidderPubmatic},
2278-
{BidderName: openrtb_ext.BidderRubicon},
2279-
},
2280-
blockedBids: []int{3},
2281-
allowedBidRequests: []BidderRequest{
2282-
{BidderName: openrtb_ext.BidderAppnexus},
2283-
{BidderName: openrtb_ext.BidderOpenx},
2284-
{BidderName: openrtb_ext.BidderPubmatic},
2285-
},
2286-
},
2287-
{
2288-
description: "Block all bids",
2289-
allBidRequests: []BidderRequest{
2290-
{BidderName: openrtb_ext.BidderAppnexus},
2291-
{BidderName: openrtb_ext.BidderOpenx},
2292-
{BidderName: openrtb_ext.BidderPubmatic},
2293-
{BidderName: openrtb_ext.BidderRubicon},
2294-
},
2295-
blockedBids: []int{0, 1, 2, 3},
2296-
allowedBidRequests: []BidderRequest{},
2297-
},
2298-
{
2299-
description: "Block first two bids",
2300-
allBidRequests: []BidderRequest{
2301-
{BidderName: openrtb_ext.BidderAppnexus},
2302-
{BidderName: openrtb_ext.BidderOpenx},
2303-
{BidderName: openrtb_ext.BidderPubmatic},
2304-
{BidderName: openrtb_ext.BidderRubicon},
2305-
},
2306-
blockedBids: []int{0, 1},
2307-
allowedBidRequests: []BidderRequest{
2308-
{BidderName: openrtb_ext.BidderPubmatic},
2309-
{BidderName: openrtb_ext.BidderRubicon},
2310-
},
2311-
},
2312-
{
2313-
description: "Block middle two bids",
2314-
allBidRequests: []BidderRequest{
2315-
{BidderName: openrtb_ext.BidderAppnexus},
2316-
{BidderName: openrtb_ext.BidderOpenx},
2317-
{BidderName: openrtb_ext.BidderPubmatic},
2318-
{BidderName: openrtb_ext.BidderRubicon},
2319-
},
2320-
blockedBids: []int{1, 2},
2321-
allowedBidRequests: []BidderRequest{
2322-
{BidderName: openrtb_ext.BidderAppnexus},
2323-
{BidderName: openrtb_ext.BidderRubicon},
2324-
},
2325-
},
2326-
{
2327-
description: "Block last two bids",
2328-
allBidRequests: []BidderRequest{
2329-
{BidderName: openrtb_ext.BidderAppnexus},
2330-
{BidderName: openrtb_ext.BidderOpenx},
2331-
{BidderName: openrtb_ext.BidderPubmatic},
2332-
{BidderName: openrtb_ext.BidderRubicon},
2333-
},
2334-
blockedBids: []int{2, 3},
2335-
allowedBidRequests: []BidderRequest{
2336-
{BidderName: openrtb_ext.BidderAppnexus},
2337-
{BidderName: openrtb_ext.BidderOpenx},
2338-
},
2339-
},
2340-
}
2341-
2342-
for _, tt := range tests {
2343-
result := filterBidRequests(tt.allBidRequests, tt.blockedBids)
2344-
assert.Equal(t, tt.allowedBidRequests, result, tt.description)
2345-
}
2346-
}

0 commit comments

Comments
 (0)