Skip to content

Commit 04dda54

Browse files
authored
Create a database-only shared library (#1521)
* Build and test a database-only shared library
1 parent 98da2de commit 04dda54

File tree

20 files changed

+382
-271
lines changed

20 files changed

+382
-271
lines changed

production/cmake/gaia.cmake

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ cmake_minimum_required(VERSION 3.16)
1414
# - GAIA_ROOT: Gaia root directory. Default: /opt/gaia.
1515
# - GAIA_INC: Gaia include directory. Default: ${GAIA_ROOT}/include.
1616
# - GAIA_BIN: Gaia bin directory. Default: ${GAIA_ROOT}/bin.
17-
# - GAIA_LIB_DIR: libgaia.so directory. Default: ${GAIA_ROOT}/lib.
17+
# - GAIA_LIB_DIR: libgaia.so and libgaia_db.so directory. Default: ${GAIA_ROOT}/lib.
1818
# - GAIA_LIB: Automatically set by CMake if libgaia.so is found.
19+
# - GAIA_DB_LIB: Automatically set by CMake if libgaia_db.so is found.
1920
# - GAIA_GAIAC_CMD: The gaiac command. Default: ${GAIA_BIN}/gaiac.
2021
# - GAIA_GAIAT_CMD: The gaiat command. Default: ${GAIA_BIN}/gaiat.
2122
# - GAIA_DEFAULT_DIRECT_ACCESS_GENERATED_DIR: The process_schema() function puts the generated Direct Access code
@@ -64,6 +65,11 @@ if(NOT GAIA_LIB)
6465
message(FATAL_ERROR "Gaia library is not found!")
6566
endif()
6667

68+
find_library(GAIA_DB_LIB gaia_db PATHS ${GAIA_LIB_DIR})
69+
if(NOT GAIA_DB_LIB)
70+
message(FATAL_ERROR "Gaia database-only library is not found!")
71+
endif()
72+
6773
if(NOT DEFINED GAIA_DEFAULT_DIRECT_ACCESS_GENERATED_DIR)
6874
set(GAIA_DEFAULT_DIRECT_ACCESS_GENERATED_DIR ${CMAKE_BINARY_DIR}/gaia_generated/direct_access)
6975
file(MAKE_DIRECTORY ${GAIA_DEFAULT_DIRECT_ACCESS_GENERATED_DIR})

production/cmake/gaia_internal.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ function(add_example)
441441

442442
# Not all the examples have a ruleset file.
443443
if(DEFINED ARG_RULESET_FILE)
444+
set(GAIA_LIB_NAME "gaia")
444445
get_filename_component(RULESET_NAME ${ARG_RULESET_FILE} NAME)
445446
string(REPLACE ".ruleset" "" RULESET_NAME ${RULESET_NAME})
446447

@@ -458,14 +459,16 @@ function(add_example)
458459
endif()
459460

460461
string(APPEND ARG_SRC_FILES ";" ${GAIA_GENERATED_CODE}/rules/${RULESET_NAME}/${RULESET_NAME}_ruleset.cpp)
462+
else()
463+
set(GAIA_LIB_NAME "gaia_db")
461464
endif()
462465

463466
add_executable(${ARG_NAME}
464467
${ARG_SRC_FILES}
465468
)
466469

467470
target_link_libraries(${ARG_NAME}
468-
gaia
471+
"${GAIA_LIB_NAME}"
469472
"${DAC_LIB_NAME}"
470473
Threads::Threads
471474
)

production/db/core/src/gaia_ptr_api.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -424,29 +424,31 @@ void update_payload(gaia_ptr_t& obj, size_t data_size, const void* data)
424424
return;
425425
}
426426

427-
auto new_data = reinterpret_cast<const uint8_t*>(data);
428-
auto old_data = reinterpret_cast<const uint8_t*>(old_this->data());
429-
430-
field_position_list_t changed_fields = compute_payload_diff(obj.type(), old_data, new_data);
431-
432427
const type_metadata_t& metadata = type_registry_t::instance().get(obj.type());
433-
if (metadata.has_value_linked_relationship())
428+
if (client_t::has_commit_trigger() || metadata.has_value_linked_relationship())
434429
{
435-
auto_connect(
436-
obj.id(),
437-
obj.type(),
438-
type_id_mapping_t::instance().get_table_id(obj.type()),
439-
obj.references(),
440-
new_data,
441-
changed_fields);
442-
}
430+
auto new_data = reinterpret_cast<const uint8_t*>(data);
431+
auto old_data = reinterpret_cast<const uint8_t*>(old_this->data());
432+
field_position_list_t changed_fields = compute_payload_diff(obj.type(), old_data, new_data);
443433

444-
obj.finalize_update(old_offset);
434+
if (metadata.has_value_linked_relationship())
435+
{
436+
auto_connect(
437+
obj.id(),
438+
obj.type(),
439+
type_id_mapping_t::instance().get_table_id(obj.type()),
440+
obj.references(),
441+
new_data,
442+
changed_fields);
443+
}
445444

446-
if (client_t::is_valid_event(obj.type()))
447-
{
448-
client_t::log_event(triggers::event_type_t::row_update, obj.type(), obj.id(), changed_fields);
445+
if (client_t::has_commit_trigger() && client_t::is_valid_event(obj.type()))
446+
{
447+
client_t::log_event(triggers::event_type_t::row_update, obj.type(), obj.id(), changed_fields);
448+
}
449449
}
450+
451+
obj.finalize_update(old_offset);
450452
}
451453

452454
void remove(gaia_ptr_t& object, bool force)

production/db/inc/core/db_client.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class client_t
7373
static inline gaia_txn_id_t get_current_txn_id();
7474
static void clear_shared_memory();
7575
static inline void set_commit_trigger(triggers::commit_trigger_fn trigger_fn);
76+
static inline bool has_commit_trigger();
7677
static inline bool is_ping_session_open();
7778
static inline bool is_ddl_session_open();
7879

production/db/inc/core/db_client.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ inline void client_t::set_commit_trigger(triggers::commit_trigger_fn trigger_fn)
3333
s_txn_commit_trigger = trigger_fn;
3434
}
3535

36+
inline bool client_t::has_commit_trigger()
37+
{
38+
return (s_txn_commit_trigger != nullptr);
39+
}
40+
3641
inline int client_t::get_session_socket_for_txn()
3742
{
3843
return s_session_socket;

production/examples/direct_access/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ add_executable(direct_access
3131

3232
target_add_gaia_generated_sources(direct_access)
3333
target_include_directories(direct_access PRIVATE ${GAIA_INC})
34-
target_link_libraries(direct_access PRIVATE ${GAIA_LIB} Threads::Threads)
34+
target_link_libraries(direct_access PRIVATE ${GAIA_DB_LIB} Threads::Threads)

production/examples/direct_access_multithread/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ add_executable(direct_access_multithread
3131

3232
target_add_gaia_generated_sources(direct_access_multithread)
3333
target_include_directories(direct_access_multithread PRIVATE ${GAIA_INC})
34-
target_link_libraries(direct_access_multithread PRIVATE ${GAIA_LIB} Threads::Threads)
34+
target_link_libraries(direct_access_multithread PRIVATE ${GAIA_DB_LIB} Threads::Threads)

production/examples/direct_access_vlr/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ add_executable(direct_access_vlr
3131

3232
target_add_gaia_generated_sources(direct_access_vlr)
3333
target_include_directories(direct_access_vlr PRIVATE ${GAIA_INC})
34-
target_link_libraries(direct_access_vlr PRIVATE ${GAIA_LIB} Threads::Threads)
34+
target_link_libraries(direct_access_vlr PRIVATE ${GAIA_DB_LIB} Threads::Threads)

production/examples/hello/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ add_executable(hello
4141
target_add_gaia_generated_sources(hello)
4242
target_include_directories(hello PRIVATE ${GAIA_INC})
4343
target_link_directories(hello PRIVATE ${GAIA_LIB_DIR})
44-
target_link_libraries(hello PRIVATE gaia rt Threads::Threads)
44+
target_link_libraries(hello PRIVATE ${GAIA_LIB} rt Threads::Threads)

production/examples/incubator/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ add_executable(incubator
4141
target_add_gaia_generated_sources(incubator)
4242
target_include_directories(incubator PRIVATE ${GAIA_INC})
4343
target_link_directories(incubator PRIVATE ${GAIA_LIB_DIR})
44-
target_link_libraries(incubator PRIVATE gaia rt Threads::Threads)
44+
target_link_libraries(incubator PRIVATE ${GAIA_LIB} rt Threads::Threads)

0 commit comments

Comments
 (0)