Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
95bab24
chore: Implement architecture diagram for data store.
kinyoklion Jul 6, 2023
a4b2c8c
Updates types for get methods on IDataStore.
kinyoklion Jul 6, 2023
d368988
Update collection types.
kinyoklion Jul 6, 2023
48bfc55
Merge branch 'server-side' into rlamb/data-store-arch
kinyoklion Jul 6, 2023
758e825
feat: Implement basic store.
kinyoklion Jul 6, 2023
6914703
Overloads for upsert and add extra const qualifiers.
kinyoklion Jul 6, 2023
c74f508
Merge branch 'rlamb/data-store-arch' of github.com:launchdarkly/cpp-s…
kinyoklion Jul 6, 2023
cd1ec6f
Merge branch 'rlamb/data-store-arch' into rlamb/basic-store-implement…
kinyoklion Jul 6, 2023
e82dc04
Basic data store and data source update sink interfaces.
kinyoklion Jul 6, 2023
54499d6
Start adding change notifier.
kinyoklion Jul 7, 2023
1df05f9
Merge branch 'server-side' into rlamb/basic-store-implementation
kinyoklion Jul 7, 2023
5221784
Add empty implementation file.
kinyoklion Jul 7, 2023
e9734bc
Start adding memory store
kinyoklion Jul 7, 2023
b53b004
Basic memory store functionaliy.
kinyoklion Jul 7, 2023
1d07b00
Add memory store tests.
kinyoklion Jul 7, 2023
58d284f
Add tests for dependency tracker.
kinyoklion Jul 10, 2023
f6b9558
Split implementation and cleanup clang issues.
kinyoklion Jul 10, 2023
d4a2a9d
Refactoring and continue implementation of the data store updater.
kinyoklion Jul 10, 2023
091bcb8
Code cleanup and more tests.
kinyoklion Jul 10, 2023
f3e0a5d
Add a test for using an old value after upsert.
kinyoklion Jul 10, 2023
0bd9846
Merge branch 'server-side' into rlamb/basic-store-implementation
kinyoklion Jul 10, 2023
2fcca51
Cleanup cmakelists.txt.
kinyoklion Jul 10, 2023
eedb155
Merge branch 'rlamb/basic-store-implementation' of github.com:launchd…
kinyoklion Jul 10, 2023
f2f4fe6
Add explainer comment for event handler.
kinyoklion Jul 10, 2023
2fb9abb
Linting
kinyoklion Jul 10, 2023
b33ae7f
Handle added and deleted. Add new test for update, add, delete, and u…
kinyoklion Jul 11, 2023
1e37fe3
Move IDataSource and make data_sources a consistent directory and nam…
kinyoklion Jul 11, 2023
7667740
Move data source status.
kinyoklion Jul 11, 2023
e2d205a
Reformatting.
kinyoklion Jul 11, 2023
0561288
Const
kinyoklion Jul 11, 2023
e530857
Update libs/server-sdk/src/data_store/data_store.hpp
kinyoklion Jul 11, 2023
e62258b
Merge branch 'rlamb/basic-store-implementation' of github.com:launchd…
kinyoklion Jul 11, 2023
057355e
Aliases and descriptors
kinyoklion Jul 11, 2023
a3614f7
More PR feedback updates.
kinyoklion Jul 11, 2023
e3fadc0
Fallthrough
kinyoklion Jul 11, 2023
b8fb098
Remove comment.
kinyoklion Jul 11, 2023
fe27583
More const and lint
kinyoklion Jul 11, 2023
7eb0023
Tidy
kinyoklion Jul 11, 2023
5cef5f3
More kind usage.
kinyoklion Jul 11, 2023
6618806
Fix namespace comment.
kinyoklion Jul 11, 2023
a0a62b2
Merge branch 'rlamb/basic-store-implementation' into rlamb/implement-…
kinyoklion Jul 12, 2023
1d309f5
Enable shared data source status.
kinyoklion Jul 12, 2023
1155970
Add missing newlines.
kinyoklion Jul 12, 2023
d83ea5a
Merge branch 'server-side' into rlamb/refactor-common-store-code
kinyoklion Jul 12, 2023
2c547ca
Lint
kinyoklion Jul 12, 2023
278487c
Attempt to appease lint.
kinyoklion Jul 12, 2023
fff7dbf
More cleanup
kinyoklion Jul 12, 2023
b274a35
More linting
kinyoklion Jul 12, 2023
6b272f0
Remove CRTP
kinyoklion Jul 12, 2023
367288c
Remove CRTP from tests.
kinyoklion Jul 12, 2023
d4f980f
Add missing cstdint header.
kinyoklion Jul 12, 2023
e91be14
Delete redundant folder.
kinyoklion Jul 12, 2023
36766ce
feat: Implement polling data source.
kinyoklion Jul 12, 2023
0fd89d9
Implement basic status handler and event handler.
kinyoklion Jul 12, 2023
8dc5567
Handle polling payload.
kinyoklion Jul 12, 2023
f2269bb
Implement polling.
kinyoklion Jul 12, 2023
fa5c96b
Merge branch 'server-side' into rlamb/implement-server-polling-data-s…
kinyoklion Jul 12, 2023
2178df6
Basic polling works.
kinyoklion Jul 13, 2023
ff4e5bf
cleanup
kinyoklion Jul 13, 2023
4d927d5
Revert unintended status change.
kinyoklion Jul 13, 2023
d0ee2ed
Correct status for server.
kinyoklion Jul 13, 2023
2698adc
Remove redundant base initializer.
kinyoklion Jul 13, 2023
e1266fc
Reformat data_source_status_manager.
kinyoklion Jul 13, 2023
cab59ea
Lint and cleanup.
kinyoklion Jul 13, 2023
03b9b27
Revert polling fix for alternate PR.
kinyoklion Jul 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion libs/client-sdk/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ add_library(${LIBNAME}
flag_manager/flag_updater.cpp
flag_manager/flag_change_event.cpp
data_sources/data_source_status.cpp
data_sources/data_source_status_manager.cpp
event_processor/event_processor.cpp
event_processor/null_event_processor.cpp
client_impl.cpp
Expand Down
129 changes: 0 additions & 129 deletions libs/client-sdk/src/data_sources/data_source_status_manager.cpp

This file was deleted.

89 changes: 11 additions & 78 deletions libs/client-sdk/src/data_sources/data_source_status_manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,89 +7,22 @@

#include <launchdarkly/client_side/data_source_status.hpp>
#include <launchdarkly/connection.hpp>
#include <launchdarkly/data_sources/data_source_status_manager_base.hpp>

namespace launchdarkly::client_side::data_sources {

/**
* Class that manages updates to the data source status and implements an
* interface to get the current status and listen to status changes.
*/
class DataSourceStatusManager : public IDataSourceStatusProvider {
class DataSourceStatusManager
: public internal::data_sources::DataSourceStatusManagerBase<
DataSourceStatus,
IDataSourceStatusProvider> {
public:
using DataSourceStatusHandler =
std::function<void(DataSourceStatus status)>;
DataSourceStatusManager() = default;

/**
* Set the state.
*
* @param state The new state.
*/
void SetState(DataSourceStatus::DataSourceState state);

/**
* If an error and state change happen simultaneously, then they should
* be updated simultaneously.
*
* @param state The new state.
* @param code Status code for an http error.
* @param message The message to associate with the error.
*/
void SetState(DataSourceStatus::DataSourceState state,
DataSourceStatus::ErrorInfo::StatusCodeType code,
std::string message);

/**
* If an error and state change happen simultaneously, then they should
* be updated simultaneously.
*
* @param state The new state.
* @param kind The error kind.
* @param message The message to associate with the error.
*/
void SetState(DataSourceStatus::DataSourceState state,
DataSourceStatus::ErrorInfo::ErrorKind kind,
std::string message);

/**
* Set an error with the given kind and message.
*
* For ErrorInfo::ErrorKind::kErrorResponse use the
* SetError(ErrorInfo::StatusCodeType) method.
* @param kind The kind of the error.
* @param message A message for the error.
*/
void SetError(DataSourceStatus::ErrorInfo::ErrorKind kind,
std::string message);

/**
* Set an error based on the given status code.
* @param code The status code of the error.
*/
void SetError(DataSourceStatus::ErrorInfo::StatusCodeType code,
std::string message);
// TODO: Handle error codes once the EventSource supports it. sc-204392

DataSourceStatus Status() const override;

std::unique_ptr<IConnection> OnDataSourceStatusChange(
std::function<void(data_sources::DataSourceStatus status)> handler)
override;

std::unique_ptr<IConnection> OnDataSourceStatusChangeEx(
std::function<bool(data_sources::DataSourceStatus status)> handler)
override;

DataSourceStatusManager();

private:
DataSourceStatus::DataSourceState state_;
DataSourceStatus::DateTime state_since_;
std::optional<DataSourceStatus::ErrorInfo> last_error_;

boost::signals2::signal<void(data_sources::DataSourceStatus status)>
data_source_status_signal_;
mutable std::recursive_mutex status_mutex_;
bool UpdateState(DataSourceStatus::DataSourceState const& requested_state);
~DataSourceStatusManager() override = default;
DataSourceStatusManager(DataSourceStatusManager const& item) = delete;
DataSourceStatusManager(DataSourceStatusManager&& item) = delete;
DataSourceStatusManager& operator=(DataSourceStatusManager const&) = delete;
DataSourceStatusManager& operator=(DataSourceStatusManager&&) = delete;
};

} // namespace launchdarkly::client_side::data_sources
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ class IDataSource {
IDataSource() = default;
};

} // namespace launchdarkly::client_side
} // namespace launchdarkly::data_sources
Loading