Skip to content

src/crdt/crdt_options.hpp

Namespaces

Name
sgns
sgns::crdt

Classes

Name
struct sgns::crdt::CrdtOptions
Options holds configurable values for CrdtDatastore.

Source code

#ifndef SUPERGENIUS_CRDT_OPTIONS_HPP
#define SUPERGENIUS_CRDT_OPTIONS_HPP

#include "base/buffer.hpp"
#include "base/logger.hpp"
#include "crdt/hierarchical_key.hpp"
#include <functional>

namespace sgns::crdt
{
  struct CrdtOptions
  {
    using Buffer = base::Buffer;
    using Logger = base::Logger;


    Logger logger = nullptr;

    long long rebroadcastIntervalMilliseconds = 0;

    long long dagSyncerTimeoutSec = 0;

    int numWorkers = 0;


    enum class VerifyErrorCode
    {
      Success = 0, // 0 should not represent an error
      InvalidRebroadcastInterval, // invalid RebroadcastInterval
      LoggerUndefinied, // the Logger is undefined
      BadNumberOfNumWorkers, // bad number of NumWorkers
      InvalidDAGSyncerTimeout, // invalid DAGSyncerTimeout
    };

    static std::shared_ptr<CrdtOptions> DefaultOptions()
    {
      auto options = std::make_shared<CrdtOptions>();
      options->logger = base::createLogger("CrdtDatastore");
      options->rebroadcastIntervalMilliseconds = 60000; // 10s
      options->dagSyncerTimeoutSec = 300; // 5 mins
      options->numWorkers = 1;
      return options;
    }

    outcome::result<VerifyErrorCode> Verify() const
    {
      if (rebroadcastIntervalMilliseconds <= 0)
      {
        return VerifyErrorCode::InvalidRebroadcastInterval;
      }
      if (numWorkers <= 0)
      {
        return VerifyErrorCode::BadNumberOfNumWorkers;
      }
      if (dagSyncerTimeoutSec < 0)
      {
        return VerifyErrorCode::InvalidDAGSyncerTimeout;
      }
      return VerifyErrorCode::Success;
    }

    bool operator==( const CrdtOptions &rhs ) const
    {
      return logger == rhs.logger && rebroadcastIntervalMilliseconds == rhs.rebroadcastIntervalMilliseconds;
    }

    bool operator!=( const CrdtOptions &rhs ) const
    {
      return !operator==( rhs );
    }

  };
} // namespace sgns::crdt

#endif //SUPERGENIUS_CRDT_OPTIONS_HPP

Updated on 2026-03-04 at 13:10:44 -0800