Skip to content

Commit f40f0c3

Browse files
Support MySql driver (prebid#2356)
1 parent 563f6c6 commit f40f0c3

21 files changed

+1882
-536
lines changed

config/config.go

+165-36
Original file line numberDiff line numberDiff line change
@@ -850,20 +850,6 @@ func SetupViper(v *viper.Viper, filename string, bidderInfos BidderInfos) {
850850
v.SetDefault("stored_requests.filesystem.enabled", false)
851851
v.SetDefault("stored_requests.filesystem.directorypath", "./stored_requests/data/by_id")
852852
v.SetDefault("stored_requests.directorypath", "./stored_requests/data/by_id")
853-
v.SetDefault("stored_requests.postgres.connection.dbname", "")
854-
v.SetDefault("stored_requests.postgres.connection.host", "")
855-
v.SetDefault("stored_requests.postgres.connection.port", 0)
856-
v.SetDefault("stored_requests.postgres.connection.user", "")
857-
v.SetDefault("stored_requests.postgres.connection.password", "")
858-
v.SetDefault("stored_requests.postgres.fetcher.query", "")
859-
v.SetDefault("stored_requests.postgres.fetcher.amp_query", "")
860-
v.SetDefault("stored_requests.postgres.initialize_caches.timeout_ms", 0)
861-
v.SetDefault("stored_requests.postgres.initialize_caches.query", "")
862-
v.SetDefault("stored_requests.postgres.initialize_caches.amp_query", "")
863-
v.SetDefault("stored_requests.postgres.poll_for_updates.refresh_rate_seconds", 0)
864-
v.SetDefault("stored_requests.postgres.poll_for_updates.timeout_ms", 0)
865-
v.SetDefault("stored_requests.postgres.poll_for_updates.query", "")
866-
v.SetDefault("stored_requests.postgres.poll_for_updates.amp_query", "")
867853
v.SetDefault("stored_requests.http.endpoint", "")
868854
v.SetDefault("stored_requests.http.amp_endpoint", "")
869855
v.SetDefault("stored_requests.in_memory_cache.type", "none")
@@ -880,17 +866,6 @@ func SetupViper(v *viper.Viper, filename string, bidderInfos BidderInfos) {
880866
// PBS is not in the business of storing video content beyond the normal prebid cache system.
881867
v.SetDefault("stored_video_req.filesystem.enabled", false)
882868
v.SetDefault("stored_video_req.filesystem.directorypath", "")
883-
v.SetDefault("stored_video_req.postgres.connection.dbname", "")
884-
v.SetDefault("stored_video_req.postgres.connection.host", "")
885-
v.SetDefault("stored_video_req.postgres.connection.port", 0)
886-
v.SetDefault("stored_video_req.postgres.connection.user", "")
887-
v.SetDefault("stored_video_req.postgres.connection.password", "")
888-
v.SetDefault("stored_video_req.postgres.fetcher.query", "")
889-
v.SetDefault("stored_video_req.postgres.initialize_caches.timeout_ms", 0)
890-
v.SetDefault("stored_video_req.postgres.initialize_caches.query", "")
891-
v.SetDefault("stored_video_req.postgres.poll_for_updates.refresh_rate_seconds", 0)
892-
v.SetDefault("stored_video_req.postgres.poll_for_updates.timeout_ms", 0)
893-
v.SetDefault("stored_video_req.postgres.poll_for_updates.query", "")
894869
v.SetDefault("stored_video_req.http.endpoint", "")
895870
v.SetDefault("stored_video_req.in_memory_cache.type", "none")
896871
v.SetDefault("stored_video_req.in_memory_cache.ttl_seconds", 0)
@@ -904,17 +879,6 @@ func SetupViper(v *viper.Viper, filename string, bidderInfos BidderInfos) {
904879
v.SetDefault("stored_video_req.http_events.timeout_ms", 0)
905880
v.SetDefault("stored_responses.filesystem.enabled", false)
906881
v.SetDefault("stored_responses.filesystem.directorypath", "")
907-
v.SetDefault("stored_responses.postgres.connection.dbname", "")
908-
v.SetDefault("stored_responses.postgres.connection.host", "")
909-
v.SetDefault("stored_responses.postgres.connection.port", 0)
910-
v.SetDefault("stored_responses.postgres.connection.user", "")
911-
v.SetDefault("stored_responses.postgres.connection.password", "")
912-
v.SetDefault("stored_responses.postgres.fetcher.query", "")
913-
v.SetDefault("stored_responses.postgres.initialize_caches.timeout_ms", 0)
914-
v.SetDefault("stored_responses.postgres.initialize_caches.query", "")
915-
v.SetDefault("stored_responses.postgres.poll_for_updates.refresh_rate_seconds", 0)
916-
v.SetDefault("stored_responses.postgres.poll_for_updates.timeout_ms", 0)
917-
v.SetDefault("stored_responses.postgres.poll_for_updates.query", "")
918882
v.SetDefault("stored_responses.http.endpoint", "")
919883
v.SetDefault("stored_responses.in_memory_cache.type", "none")
920884
v.SetDefault("stored_responses.in_memory_cache.ttl_seconds", 0)
@@ -1039,6 +1003,7 @@ func SetupViper(v *viper.Viper, filename string, bidderInfos BidderInfos) {
10391003
migrateConfigPurposeOneTreatment(v)
10401004
migrateConfigSpecialFeature1(v)
10411005
migrateConfigTCF2PurposeFlags(v)
1006+
migrateConfigDatabaseConnection(v)
10421007

10431008
// These defaults must be set after the migrate functions because those functions look for the presence of these
10441009
// config fields and there isn't a way to detect presence of a config field using the viper package if a default
@@ -1190,6 +1155,170 @@ func migrateConfigTCF2PurposeEnabledFlags(v *viper.Viper) {
11901155
}
11911156
}
11921157

1158+
func migrateConfigDatabaseConnection(v *viper.Viper) {
1159+
1160+
type QueryParamMigration struct {
1161+
old string
1162+
new string
1163+
}
1164+
1165+
type QueryMigration struct {
1166+
name string
1167+
params []QueryParamMigration
1168+
}
1169+
1170+
type Migration struct {
1171+
old string
1172+
new string
1173+
fields []string
1174+
queryMigrations []QueryMigration
1175+
}
1176+
1177+
queryParamMigrations := struct {
1178+
RequestIdList QueryParamMigration
1179+
ImpIdList QueryParamMigration
1180+
IdList QueryParamMigration
1181+
LastUpdated QueryParamMigration
1182+
}{
1183+
RequestIdList: QueryParamMigration{
1184+
old: "%REQUEST_ID_LIST%",
1185+
new: "$REQUEST_ID_LIST",
1186+
},
1187+
ImpIdList: QueryParamMigration{
1188+
old: "%IMP_ID_LIST%",
1189+
new: "$IMP_ID_LIST",
1190+
},
1191+
IdList: QueryParamMigration{
1192+
old: "%ID_LIST%",
1193+
new: "$ID_LIST",
1194+
},
1195+
LastUpdated: QueryParamMigration{
1196+
old: "$1",
1197+
new: "$LAST_UPDATED",
1198+
},
1199+
}
1200+
1201+
queryMigrations := []QueryMigration{
1202+
{
1203+
name: "fetcher.query",
1204+
params: []QueryParamMigration{queryParamMigrations.RequestIdList, queryParamMigrations.ImpIdList, queryParamMigrations.IdList},
1205+
},
1206+
{
1207+
name: "fetcher.amp_query",
1208+
params: []QueryParamMigration{queryParamMigrations.RequestIdList, queryParamMigrations.ImpIdList, queryParamMigrations.IdList},
1209+
},
1210+
{
1211+
name: "poll_for_updates.query",
1212+
params: []QueryParamMigration{queryParamMigrations.LastUpdated},
1213+
},
1214+
{
1215+
name: "poll_for_updates.amp_query",
1216+
params: []QueryParamMigration{queryParamMigrations.LastUpdated},
1217+
},
1218+
}
1219+
1220+
migrations := []Migration{
1221+
{
1222+
old: "stored_requests.postgres",
1223+
new: "stored_requests.database",
1224+
fields: []string{
1225+
"connection.dbname",
1226+
"connection.host",
1227+
"connection.port",
1228+
"connection.user",
1229+
"connection.password",
1230+
"fetcher.query",
1231+
"fetcher.amp_query",
1232+
"initialize_caches.timeout_ms",
1233+
"initialize_caches.query",
1234+
"initialize_caches.amp_query",
1235+
"poll_for_updates.refresh_rate_seconds",
1236+
"poll_for_updates.timeout_ms",
1237+
"poll_for_updates.query",
1238+
"poll_for_updates.amp_query",
1239+
},
1240+
queryMigrations: queryMigrations,
1241+
},
1242+
{
1243+
old: "stored_video_req.postgres",
1244+
new: "stored_video_req.database",
1245+
fields: []string{
1246+
"connection.dbname",
1247+
"connection.host",
1248+
"connection.port",
1249+
"connection.user",
1250+
"connection.password",
1251+
"fetcher.query",
1252+
"initialize_caches.timeout_ms",
1253+
"initialize_caches.query",
1254+
"poll_for_updates.refresh_rate_seconds",
1255+
"poll_for_updates.timeout_ms",
1256+
"poll_for_updates.query",
1257+
},
1258+
queryMigrations: queryMigrations,
1259+
},
1260+
{
1261+
old: "stored_responses.postgres",
1262+
new: "stored_responses.database",
1263+
fields: []string{
1264+
"connection.dbname",
1265+
"connection.host",
1266+
"connection.port",
1267+
"connection.user",
1268+
"connection.password",
1269+
"fetcher.query",
1270+
"initialize_caches.timeout_ms",
1271+
"initialize_caches.query",
1272+
"poll_for_updates.refresh_rate_seconds",
1273+
"poll_for_updates.timeout_ms",
1274+
"poll_for_updates.query",
1275+
},
1276+
queryMigrations: queryMigrations,
1277+
},
1278+
}
1279+
1280+
for _, migration := range migrations {
1281+
driverField := migration.new + ".connection.driver"
1282+
if !v.IsSet(migration.new) && v.IsSet(migration.old) {
1283+
glog.Warning(fmt.Sprintf("%s is deprecated and should be changed to %s", migration.old, migration.new))
1284+
glog.Warning(fmt.Sprintf("%s is not set, using default (postgres)", driverField))
1285+
v.Set(driverField, "postgres")
1286+
1287+
for _, field := range migration.fields {
1288+
oldField := migration.old + "." + field
1289+
newField := migration.new + "." + field
1290+
if v.IsSet(oldField) {
1291+
glog.Warning(fmt.Sprintf("%s is deprecated and should be changed to %s", oldField, newField))
1292+
v.Set(newField, v.Get(oldField))
1293+
}
1294+
}
1295+
1296+
for _, queryMigration := range migration.queryMigrations {
1297+
oldQueryField := migration.old + "." + queryMigration.name
1298+
newQueryField := migration.new + "." + queryMigration.name
1299+
queryString := v.GetString(oldQueryField)
1300+
for _, queryParam := range queryMigration.params {
1301+
if strings.Contains(queryString, queryParam.old) {
1302+
glog.Warning(fmt.Sprintf("Query param %s for %s is deprecated and should be changed to %s", queryParam.old, oldQueryField, queryParam.new))
1303+
queryString = strings.ReplaceAll(queryString, queryParam.old, queryParam.new)
1304+
v.Set(newQueryField, queryString)
1305+
}
1306+
}
1307+
}
1308+
} else if v.IsSet(migration.new) && v.IsSet(migration.old) {
1309+
glog.Warning(fmt.Sprintf("using %s and ignoring deprecated %s", migration.new, migration.old))
1310+
1311+
for _, field := range migration.fields {
1312+
oldField := migration.old + "." + field
1313+
newField := migration.new + "." + field
1314+
if v.IsSet(oldField) {
1315+
glog.Warning(fmt.Sprintf("using %s and ignoring deprecated %s", newField, oldField))
1316+
}
1317+
}
1318+
}
1319+
}
1320+
}
1321+
11931322
func setBidderDefaults(v *viper.Viper, bidder string) {
11941323
adapterCfgPrefix := "adapters." + bidder
11951324
v.BindEnv(adapterCfgPrefix+".disabled", "")

0 commit comments

Comments
 (0)