@@ -313,6 +313,10 @@ inline constexpr size_t write_clear_range_approximate_size(size_t begin_size, si
313313
314314} // anonymous namespace
315315
316+ std::string_view KNOB_LOAD_BALANCE_ZONE_ID_LOCALITY_ENABLED =
317+ " load_balance_zone_id_locality_enabled=1" ;
318+ std::string_view KNOB_LOAD_BALANCE_DC_ID_LOCALITY_ENABLED = " load_balance_dc_id_locality_enabled=1" ;
319+
316320// Ref https://apple.github.io/foundationdb/api-error-codes.html#developer-guide-error-codes.
317321constexpr fdb_error_t FDB_ERROR_CODE_TIMED_OUT = 1004 ;
318322constexpr fdb_error_t FDB_ERROR_CODE_TXN_TOO_OLD = 1007 ;
@@ -406,6 +410,33 @@ int Network::init() {
406410 LOG (INFO) << " set fdb external client directory: " << config::fdb_external_client_directory;
407411 }
408412
413+ if (config::enable_fdb_locality_load_balance) {
414+ if (!config::fdb_zone_id.empty ()) {
415+ err = fdb_network_set_option (
416+ FDB_NET_OPTION_KNOB,
417+ (const uint8_t *)KNOB_LOAD_BALANCE_ZONE_ID_LOCALITY_ENABLED.data (),
418+ KNOB_LOAD_BALANCE_ZONE_ID_LOCALITY_ENABLED.size ());
419+ if (err) {
420+ LOG (WARNING) << " failed to set fdb load balance zone id locality enabled, err: "
421+ << fdb_get_error (err);
422+ return 1 ;
423+ }
424+ LOG (INFO) << " set fdb load balance zone id locality enabled" ;
425+ }
426+ if (!config::fdb_dc_id.empty ()) {
427+ err = fdb_network_set_option (
428+ FDB_NET_OPTION_KNOB,
429+ (const uint8_t *)KNOB_LOAD_BALANCE_DC_ID_LOCALITY_ENABLED.data (),
430+ KNOB_LOAD_BALANCE_DC_ID_LOCALITY_ENABLED.size ());
431+ if (err) {
432+ LOG (WARNING) << " failed to set fdb load balance dc id locality enabled, err: "
433+ << fdb_get_error (err);
434+ return 1 ;
435+ }
436+ LOG (INFO) << " set fdb load balance dc id locality enabled" ;
437+ }
438+ }
439+
409440 // ATTN: Network can be configured only once,
410441 // even if fdb_stop_network() is called successfully
411442 err = fdb_setup_network (); // Must be called only once before any
@@ -457,14 +488,38 @@ void Network::stop() {
457488// =============================================================================
458489
459490int Database::init () {
460- // TODO: process opt
461491 fdb_error_t err = fdb_create_database (cluster_file_path_.c_str (), &db_);
462492 if (err) {
463493 LOG (WARNING) << __PRETTY_FUNCTION__ << " fdb_create_database error: " << fdb_get_error (err)
464494 << " conf: " << cluster_file_path_;
465495 return 1 ;
466496 }
467497
498+ if (config::enable_fdb_locality_load_balance) {
499+ if (!config::fdb_zone_id.empty ()) {
500+ err = fdb_database_set_option (db_, FDB_DB_OPTION_MACHINE_ID,
501+ (const uint8_t *)config::fdb_zone_id.c_str (),
502+ config::fdb_zone_id.size ());
503+ if (err) {
504+ LOG (WARNING) << " failed to set FDB_DB_OPTION_MACHINE_ID: " << fdb_get_error (err)
505+ << " , zone_id: " << config::fdb_zone_id;
506+ return 1 ;
507+ }
508+ LOG (INFO) << " set FDB_DB_OPTION_MACHINE_ID (zone_id): " << config::fdb_zone_id;
509+ }
510+ if (!config::fdb_dc_id.empty ()) {
511+ err = fdb_database_set_option (db_, FDB_DB_OPTION_DATACENTER_ID,
512+ (const uint8_t *)config::fdb_dc_id.c_str (),
513+ config::fdb_dc_id.size ());
514+ if (err) {
515+ LOG (WARNING) << " failed to set FDB_DB_OPTION_DATACENTER_ID: " << fdb_get_error (err)
516+ << " , dc_id: " << config::fdb_dc_id;
517+ return 1 ;
518+ }
519+ LOG (INFO) << " set FDB_DB_OPTION_DATACENTER_ID (dc_id): " << config::fdb_dc_id;
520+ }
521+ }
522+
468523 return 0 ;
469524}
470525
0 commit comments