Skip to content

Commit

Permalink
Send schema version as part of BIND messages
Browse files Browse the repository at this point in the history
  • Loading branch information
danieltabacaru committed Aug 4, 2023
1 parent fb5bdcc commit 074a4b9
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
12 changes: 11 additions & 1 deletion src/realm/sync/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,8 @@ class SessionWrapper final : public util::AtomicRefCountBase, public SyncTransac
std::function<SyncClientHookAction(SyncClientHookData data)> m_debug_hook;
bool m_in_debug_hook = false;

const uint64_t m_schema_version;

std::shared_ptr<SubscriptionStore> m_flx_subscription_store;
int64_t m_flx_active_version = 0;
int64_t m_flx_last_seen_version = 0;
Expand Down Expand Up @@ -803,6 +805,13 @@ util::Optional<ClientReset>& SessionImpl::get_client_reset_config() noexcept
return m_wrapper.m_client_reset_config;
}

uint64_t SessionImpl::get_schema_version() noexcept
{
// Can only be called if the session is active or being activated
REALM_ASSERT_EX(m_state == State::Active || m_state == State::Unactivated, m_state);
return m_wrapper.m_schema_version;
}

void SessionImpl::initiate_integrate_changesets(std::uint_fast64_t downloadable_bytes, DownloadBatchState batch_state,
const SyncProgress& progress, const ReceivedChangesets& changesets)
{
Expand Down Expand Up @@ -1230,6 +1239,7 @@ SessionWrapper::SessionWrapper(ClientImpl& client, DBRef db, std::shared_ptr<Sub
, m_client_reset_config{std::move(config.client_reset_config)}
, m_proxy_config{config.proxy_config} // Throws
, m_debug_hook(std::move(config.on_sync_client_event_hook))
, m_schema_version(config.schema_version)
, m_flx_subscription_store(std::move(flx_sub_store))
, m_migration_store(std::move(migration_store))
{
Expand Down Expand Up @@ -2122,7 +2132,7 @@ void Client::voluntary_disconnect_all_connections()

bool Client::wait_for_session_terminations_or_client_stopped()
{
return m_impl.get()->wait_for_session_terminations_or_client_stopped();
return m_impl->wait_for_session_terminations_or_client_stopped();
}


Expand Down
3 changes: 3 additions & 0 deletions src/realm/sync/client.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,9 @@ class Session {
bool simulate_integration_error = false;

std::function<SyncClientHookAction(const SyncClientHookData&)> on_sync_client_event_hook;

/// Schema version
uint64_t schema_version = -1; // = ObjectStore::NotVersioned
};

/// \brief Start a new session for the specified client-side Realm.
Expand Down
7 changes: 3 additions & 4 deletions src/realm/sync/noinst/client_impl_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,10 +204,8 @@ ClientImpl::ClientImpl(ClientConfig config)
REALM_ASSERT_EX(m_socket_provider, "Must provide socket provider in sync Client config");

if (m_one_connection_per_session) {
// FIXME: Re-enable this warning when the load balancer is able to handle
// multiplexing.
// logger.warn("Testing/debugging feature 'one connection per session' enabled - "
// "never do this in production");
logger.warn("Testing/debugging feature 'one connection per session' enabled - "
"never do this in production");
}

if (config.disable_upload_activation_delay) {
Expand Down Expand Up @@ -1861,6 +1859,7 @@ void Session::send_bind_message()
if (auto migrated_partition = get_migration_store()->get_migrated_partition()) {
bind_json_data["migratedPartition"] = *migrated_partition;
}
bind_json_data["schema_version"] = get_schema_version();
if (logger.would_log(util::Logger::Level::debug)) {
std::string json_data_dump;
if (!bind_json_data.empty()) {
Expand Down
3 changes: 3 additions & 0 deletions src/realm/sync/noinst/client_impl_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -927,6 +927,9 @@ class ClientImpl::Session {
// transfer from the server.
util::Optional<ClientReset>& get_client_reset_config() noexcept;

/// Returns the schema version the synchronization session connects with to the server.
uint64_t get_schema_version() noexcept;

/// \brief Initiate the integration of downloaded changesets.
///
/// This function must provide for the passed changesets (if any) to
Expand Down

0 comments on commit 074a4b9

Please sign in to comment.