github EchoVault/SugarDB v0.1.0

latest releases: v0.12.0, v0.11.3, v0.11.2...
6 months ago

Changelog

  • d787489 Accept server flags to toggle TLS
  • 56e7fb9 Add indirection to acl plugin commands
  • 48bf138 Adde scaffolding for sorted set command handling
  • ff2d579 Added '\r\n\r\n' delimiter to server.go error returned to the client
  • 52eaa6b Added 2 nodes in docker-compose for cluster testing
  • 901dbe3 Added ACL check for IncludedCategories and ExcludedCategories
  • 5ef457c Added ACL implementation in list of TODO
  • b7d5693 Added Equals receiver funcion on SortedSet to compare deep equality of two sorted sets. Created unit test for ZMPOP command handler
  • f3d36b3 Added Error to decoded types. Removed cmd_functions.go as it is replaced by plugin system. Consolidated get and set plugins into one plugin setget that handles GET, SET and MGET commands. Plugins can declare multiple commands that they handle.
  • 035f74c Added GETRANGE command with the same functionality as SUBSTR command
  • 3db4a35 Added GPL v3 License
  • 553f136 Added Get, GetRandom and Pop method implementations to set data type
  • 1f22c59 Added GetAllCommands method to server interface. Implemented ACL CAT command
  • 29b7d80 Added KeepAlive config in tcp listener. Implemented delete user functionality from ACL.
  • 42c145e Added KeyExtractionFunc for all commands and sub commands to extract keys for ACL authorization. Deleted genpass command.
  • 53a6a59 Added Merge and Replace methods to ACL user struct to aid user updating upon load and for other potential user cases. Implemented handler for ACL load command.
  • 8e60d00 Added README.md
  • 52441bd Added SETNX command
  • c3efc73 Added TODO comment for ending RaftJoin broadcast
  • 69e3afc Added TODO comment for proxying requests sent to non-leader node
  • ef140c8 Added array serialization to encode function. Moved message reading to utils packages as it's used by both server and client
  • c6b11b2 Added badge for coverage report
  • ec65822 Added basic description to README.md
  • 3961b3e Added basic support for string, int, and float values
  • 0e37052 Added bootstrapCluster arg for server. This argument is what will determine if the server bootstraps a raft cluster. CreateKeyAndLock function will now wither create a lock or obtain an existing lock.
  • be27c5c Added categories to set commands
  • acb7cd6 Added command categories in utils/types.go and in each of the current modules and commands
  • e0f6ca8 Added comment to explain the function of the Subtract receiver function of Set
  • cec1366 Added conditions to normalising user
  • 15d289c Added config flags to choose between aof restore and snapshot restore in standalone mode.
  • 97f0f14 Added configuration options for snapshot threshold and snapshot interval
  • 26dfe5d Added connection category to subscribe and unsubscribe commands
  • ed4ff70 Added cover image
  • 04f0d92 Added encoding function for integers. Added functionality for mget.
  • 76c4226 Added eviction policy to feature roadmap
  • 12c78a4 Added feature roadmap entries to README.md
  • 988d74d Added fix to linked list Contains method to prevent nil pointer panic
  • 90782ea Added glob pattern matching in acl with the gobwas/glob package
  • 973127e Added go report badge. Removed center tags for banner image and changed img tag width to match image width
  • cb896af Added go report card generation to project
  • f7164cf Added goreleaser workflow to create releases on tag pushes
  • cd3bf4f Added handler scaffolds for acl subcommands and auth command.
  • 5b6946d Added infinity scores to ZADD command test
  • 01a8db2 Added log statement for restoring snapshot
  • 0057081 Added message channels for Channel and ConsumerGroup. Created Start Method for Chanel and Consumer group that initializes an infinite loop listen to message channel
  • b818b73 Added null response to +ACK command in ping plugin
  • b26743b Added numbering to last test case in ZRANGE test table
  • e13b4ec Added os interrupt signal
  • cab70ca Added package for SortedSet data type with no scaffolding for commands (will be implemented in the future).
  • 58d6664 Added plugins folder location in config for the server. Created get and ser plugin files. Created server function to load plugins. Moved Makefile inside server folder to build and run server.
  • e9d78ba Added readme file
  • f30decf Added remove functionality for circular linked list and implemented contains function
  • c1a4957 Added requirePass and password server configuration options to set password for default user
  • 1d36d2c Added resetpass, nocommands, resetkeys and resetchannels directives in ACL DSL
  • 40be716 Added resp package for encoding and decoding resp messages. Created encoding functions for the following commands: ping, set, setnx, get, mget, incr, incrby, incrbyfloat. Created utils packages for shared utility functions.
  • 1d5b0f6 Added separation between badges and banner in Readme.md
  • d1953c8 Added serialization package. Encode user input.
  • bb74a5b Added server and client configurations to support cluser identification and specific cluster node connection. Implemented starting of new raft node.
  • bdebdea Added snapshot interval value to raft configuration
  • 04b3a4a Added structured logging to the feature milestone list
  • 1350b3a Added test case for ZPOPMIN and ZPOPMAX command handlers
  • d7fd5b4 Added test for HRANDFIELD handler
  • 82b2cfc Added test for HVALS handler
  • 2ab8e09 Added test for LMOVE handler
  • 671a1ce Added test for allowing/disallowing repeated elements when getting random elements from the set
  • 53a39a4 Added testify package. Created AddOrUpdate set method in sorted set
  • 0549bcc Added tests for SET, GET, and MGET commands
  • c370833 Added tests for handleStrLen function
  • 5bb7d19 Added tests for handleSubStr handler
  • ed81ad2 Added tidwall/resp package for testing server modules
  • bb5ea92 Added unit test for ZDIFFSTORE command handler
  • 4792516 Added unit test for ZREMRANGEBYLEX command handler
  • 71cf493 Added write permission to go.yml workflow
  • b3fdc11 Allow commands if password is not required. Create directories for preamble and append stores if they do not exist
  • d9bb9a5 Broadcast RafJoinSuccessMessage when server requesting to join is found in configuration. Initialize raft before memberlist.
  • 39bf074 Call ACL Authorize for command before processing. Call ACL Authenticate when auth command is triggered.
  • e3b2edb Call server NewServer contructor and pass config that includes commands, ACL and PubSub instances
  • 044edff Capture cancel signal to gracefully shut down server
  • 8f6f23a Changed Circular attribute name to Ring attribute name for linked list
  • 4a7753a Changed NewPlugin function to Command that returns []utils.Command directly
  • dff8094 Changed bgsave command to save and bgrewriteaof to rewriteaof because these functions will only be ran concurrently and never on the main thread. Implented AOF command logging in AOFEngine which creates a new log file if one does not exist and append to the file if one is found.
  • 8c35d3b Changed config json and yaml tags to PascalCase from camelCase
  • 16892ab Changed go version in go.yml
  • 6b6c4ba Changed port to 7480 as 6379 is already in use by Redis
  • 1c8b617 Channel publish command returns OK instead of PUBLISH_OK
  • 8b46407 Check if key exists before fetching value on get commands
  • 81dc632 Code formatting
  • 7e55fd4 Code formatting: declare writer and reader on the same line
  • f0a9a69 Comment refactoring in memberlist.go
  • dcdb35a Comment update in MSET handler
  • c16aa7a Compacted test cases for MGET into one array
  • 19b4f56 Conditionally broadcast join message only when the follower hasn't yet joined the raft cluster.
  • 3043923 Consolidated encode and decode serialization functions into one file
  • ab366c4 Craeted AppendStore and PreambleStore engines
  • 60aa812 Create codeql.yml
  • 3f2a89a Create go.yml
  • aea3fee Created ACL and PubSub interface to allow indirection in Server struct definition
  • 53ade87 Created ACL and PubSub interfaces to be used in Server struct definition to avoid future circular imports in acl and pubsub packages
  • 8d7fe02 Created AppendReadWriter and PreambleReadWriter interfaces for file handling in the log and preamble packages respectively. Seek to the beginning of the preamble file after truncating.
  • c101b18 Created ApplyRequest and ApplyResponse types to handle calls and responses to raft.Apply. In-Memory state between nodes is now synchronized.
  • 71d82da Created LinkedListOptions for initializing linked list options
  • 0708893 Created MergeUsers function for merging users with the same username using sensible defaults.
  • e529142 Created User methods for normalising fields and removing debug print statement in SetUser
  • b158973 Created a test case for SMEMBERS command handler
  • 63fcb49 Created admin commands module. Added bgsave command without implementation.
  • 3c5d6fe Created basic handling for taking snapshots. Will implemented error when snapshot in progress and propagation of snapshot command to the rest of the cluster
  • 0bcbff4 Created context object for server and connection. Pass ServerID and ConnectionID to raft Apply and reconstruct context object there for commands. KeyLock and KeyRLock now make use of TryLock in an attempt to acquire the lock until context is done. This is to allow a process to cancel an atomic transaction in the event of a deadlock
  • 67697e0 Created coverage folder in .github directory
  • a3bb3e9 Created divide & conquer Intersect function to calculate the intersection between 2 sorted sets. Used new Intersect function to calculate intersection in ZINTER command handler. Implemented unit test for ZINTER command handler.
  • 58cf302 Created encoding functions for simple string and error.
  • d0ef186 Created handler for LTRIM command
  • b1893c1 Created hash module test file skeleton
  • b664568 Created internal plugin for handling ACL commands. Load ACL commands in server in LoadPlugins receiver function
  • d456ce1 Created key extraction functions to be used in command slice and command handlers
  • c497735 Created key_funcs file for strings module to hold key extraction functions
  • dd31bfc Created linked list util type
  • f744ed8 Created list plugin with comprehensive list of commands to be handled by the plugin
  • 0baece9 Created makefile
  • c74298a Created new module for hash data type
  • f82508e Created new pubsub module. Refactored LoadPlugins method to LoadModules
  • d62fb1b Created package for containing SnapshotStore implementations
  • 3f39a23 Created plugin for PING command
  • 20cce40 Created plugin for pubsub functionality
  • b91af6a Created scaffolding for pub/sub feature
  • c8cc156 Created server and client sub-folders
  • 9672788 Created skeleton for sqlite3 snapshot
  • eef1cd1 Created skeleton tests for all the handlers in the list module
  • b89f436 Created test case for SMISMEMBER command handler
  • 55ee37a Created test case for SMOVE command handler
  • c809d7b Created test case for SUNIONSTORE command handler
  • 7f8ff5a Created test file for list commands
  • 51e88c3 Created test file for sorted_set commands
  • 7356cf3 Created test file for string commands
  • fc6d81f Created test file for string module
  • 93bca79 Created test for LLEN handler
  • ee0c7aa Created test for LTRIM command handler
  • 8077993 Created test for SADD command handler
  • a8b47d7 Created test skeleton for ping commands
  • 2a5e856 Created test skeleton for set type
  • a84d1b4 Created test skeleton for sorted set test suite
  • 045691a Created unit test case for ZRANGE command handler
  • b5cadf4 Created writer mock. Created mock server. Added test for ping command plugin.
  • 737dacd Deleted PING module test, this will be re-instated later with a fresh implementation
  • 4807c9a Deleted custom linked list implementation. Implemented ring from container package for consumer group rotation
  • d2e602e Deleted mock package as there's no longer a need to mock the server for tests. Tests can use the actual server instance
  • e7c7cf1 Deleted plugin folder. Removed nested plugin in command list for modules. Moved PubSub feature from plugin folder to modules folder.
  • bb24c4a Deleted pubsub.go file. Removed pubSub property in Server struct. Refactored error handling in raft Apply method
  • 3ccf8a0 Display count when new members are added ot sorted set. This only applies to new members that are actually applied and not members that remain unchanged
  • 4e4f46d Dockerfile build copy from linux subdirecotry of bin folder
  • 69d558e Edited makefile test command to include code coverate stats
  • fc7270c Enabled CGO for plugin cross compilation
  • d4068c1 Enabled plugin loading
  • 16e6852 Extract command|subcommand, categories and keys from attempted action in acl AuthorizeConnection method
  • 888908d Extracted KeyFuncs in etc module
  • 019fb39 Extracted command handler function for reuse in both the handleConnection function and the RestoreAOF function in the AOF engine.
  • ca38041 Extracted key function in sorted_set module
  • d3802a3 Extracted key functions from set module
  • ff8de0f Extracted key functions in hash module
  • 0306c4f Extracted key functions in list module
  • a8fde28 Extracted raft apply function to its own method for reusability
  • dac7516 Extracted the plugin command handler into its own function
  • f1ce1ba First commit
  • 5fea54f Fixed HGETALL flaky test
  • cb9de7a Fixed PING echo command
  • ce42d65 Fixed PING test to account for handlePing change
  • 378a0d8 Fixed bug with linked list remove that caused a segmentation violation when trying to remove a non-existent list element. Replaced *net.Conn slice in pubsub consumer group implementation with circular linked list
  • f6012f3 Fixed bugs with Contains and Remove methods of LinkedList
  • 4084950 Fixed comment in AuthorizeConnection
  • 1ce7257 Fixed comment typo
  • 93a1992 Fixed flaky HVALS test
  • 9fd074d Fixed fmt.Errorf format error
  • a18ce4c Fixed initilization of allow-lists on acl users
  • 532c400 Fixed logical bug with SDIFF command where the base set would be randomised among the list of keys provided. Now, only the first key provided will always be used as the base set for the difference calculation. Implemented test for SDIFF command
  • e5729a4 Fixed typo in memberlist.go file in memberlist package
  • 2c71191 ForwardDataMutation method accepts connectionID. This will be passed to the raft.Apply method
  • af37cfe Get range HandlerFunc set to handleSubstr as it has the same functionality
  • ce0eabf GetState receiver function now checks wether there's an active copy or state mutation before proceeding with the copy. Handling of write commands is delayed until state copy is complete.
  • c64a130 Handle commands in standalone mode
  • c7bacc6 If circular linked list only has one element, iterator should return that element on each call. Add head nil check in linked list Contains method to prevent nil pointer exception.
  • 6d2f515 Imlemented LPUSHX and RPUSHX commands
  • ef64c66 Imlemented ZUINIONSTORE command
  • 7e59de2 Implement checking wether snapshot is in progress before continuing
  • e1e89f4 Implement raft and memberlist shutdown
  • b32292d Implemented command that returns all the commands in the server
  • 5e16a8f Implemented ACL GETUSER command handler
  • 1382ef4 Implemented ACL Init on server. Implemented reading of ACL from JSON and YAML files into user list in memory.
  • 30e70e3 Implemented ACL SAVE command
  • 1446573 Implemented ACL USERS command
  • 558f5f0 Implemented ACL authorization for IncludedCommand and ExcludedCommands
  • 772345a Implemented ACL authorization for IncludedKeys, IncludedReadKeys and IncludedWriteKeys
  • 8a965af Implemented ACL authorization for pubsub commands
  • 10eddac Implemented ACL user normalisation
  • 5e6f238 Implemented HDEL command
  • eefc032 Implemented HEXISTS command
  • 97a1789 Implemented HGET test
  • a5f94de Implemented HGETALL command
  • 1229538 Implemented HKEYS command
  • 6cb99bd Implemented HLEN and HKEYS handler tests
  • f9450a4 Implemented HLEN command
  • 1520b21 Implemented HRANDFIELD command
  • d83efc2 Implemented HSET, HSETNX, and HGET commands for hash type
  • baf0fae Implemented HSTRLEN command
  • c8f71b3 Implemented HVALS command
  • 0e9a2a5 Implemented HandlePing test and changed ping response to return BulkString instead of SimpleString
  • d460116 Implemented INCRBY and INCRBYFLOAT commands
  • 38bf510 Implemented LINDEX command
  • 17ab92f Implemented LINDEX handler test
  • 1e4aa42 Implemented LMOVE command
  • f0c3526 Implemented LPOP and RPOP commands
  • 2ea87c6 Implemented LPUSH, RPUSH, and LRANGE commands
  • fb598ce Implemented LREM command
  • 7cd04a6 Implemented LSET command
  • 1760017 Implemented LTRIM command
  • 99b9aec Implemented MSET command handler. Bugfix for pubsub consumer groups where the last user unsubscribing would lead to overflowing of the call stack on SendMessage function
  • 25b2cb7 Implemented RewriteLog functionality and defined handler for REWRITE AOF command.
  • bdd5f4e Implemented SADD command
  • af29474 Implemented SDIFF and SDIFFSTORE commands
  • b6ecad9 Implemented SETRANGE command
  • c3e1c5d Implemented SINTER command
  • 2690aa4 Implemented SISMEMBER command handler
  • 4e57e42 Implemented SMEMBERS command
  • 14e5821 Implemented SMISMEMBER command
  • ccc3266 Implemented SMOVE command
  • 02aaba5 Implemented SPOP command. Implemented SRANDMEMBER command. Added utility function to get absolute integer.
  • 177e287 Implemented SREM command
  • cc0c4b3 Implemented SUBSTR command which returns a substring from a string value
  • 94d4f84 Implemented SUNION command
  • e6900e8 Implemented Snapshot and AOF utils.Server interface methods on mock server with No-OP implementations
  • 84220cd Implemented TLS support
  • 9b58fbc Implemented ZCARD command
  • 6cab617 Implemented ZCOUNT command
  • edcbfb3 Implemented ZDIFF command
  • 505f4af Implemented ZDIFFSTORE command
  • 26ac91e Implemented ZINTERSTORE command
  • 778811c Implemented ZLEXCOUNT command
  • f08488a Implemented ZLEXCOUNT command
  • 40325d4 Implemented ZMPOP command
  • d2290fe Implemented ZMSCORE command
  • 766d375 Implemented ZPOPMIN and ZPOPMAX commands
  • d3e62ea Implemented ZRANDMEMBER command
  • 9be6e8d Implemented ZRANGE command
  • 1410012 Implemented ZRANGESTORE command
  • 835f881 Implemented ZRANK command
  • 0a3aed0 Implemented ZREM command for sorted set
  • 43df636 Implemented ZREMRANGEBYLEX command
  • 55f9c86 Implemented ZREMRANGEBYRANK command
  • 3190835 Implemented ZREMRANGEBYSCORE command
  • f3518a1 Implemented ZREVRANK command
  • c2220e0 Implemented ZSCORE command
  • 3634914 Implemented ZUNION command
  • 4eb7d75 Implemented ability to specify JSON to YAML config file. Added package to decode yaml config file. Read config file and load values into server config.
  • 70d8ad8 Implemented basic raft server and cluster bootstraping
  • ecf3fb9 Implemented built in slice utility function to enhance the acl authorization flow
  • 128fa1a Implemented change on Union function from receiver function to a regular function that uses divide and conquer to merge sets into a union
  • c3194b0 Implemented connection authentication and ACL WHOAMI command
  • 19c9b40 Implemented connection registration ACL method
  • ed735b9 Implemented divide & conquer function for calculating the union of multiple sets. Implemented unit test for ZUNION command handler
  • 102648e Implemented file sync in snapshot engine and aof engine
  • 989e19e Implemented functionality to add voter to raft cluster upon leader receiving join request broadcast. Servers broadcast join cluster message until they receive a message confirming they have successfully joined.
  • 77b21b4 Implemented handler for ACL LIST command
  • 9f33f9e Implemented keyspace interface methods on mock server
  • 74fea27 Implemented llen command
  • 69c9170 Implemented mTLS listener to verify client certificates.
  • 88fb1d7 Implemented modules interface methods for mock server
  • f9ae878 Implemented multiple server cert/key pairs. Implemented mTLS for verifying client using multiple pem files.
  • 2e0160b Implemented mutation propagation from follower node to leader node
  • 2bdfc2e Implemented options pattern for AOF engine
  • 0a0be8e Implemented periodic snapshot in standalone mode based on threshold and interval
  • a081971 Implemented restore function in standalone snapshot engine
  • a9c26ff Implemented scaffolding for set data type
  • 515168c Implemented set data type
  • 4e12064 Implemented snapshot persistence on raft layer
  • 46e703a Implemented strlen command
  • fa27a06 Implemented test case for SRANDMEMBER command handler
  • f5015a8 Implemented test case for ZADD command handler. Added error returns for incompatible flags in ZADD commands
  • 3de114c Implemented test case for ZINCRYBY command handler
  • 9a4f58a Implemented test case for ZRANGESTORE command handler
  • 50e905b Implemented test for HDEL handler
  • c39cb57 Implemented test for HEXISTS handler
  • 52529b5 Implemented test for HGETALL handler
  • 7c06869 Implemented test for HSET handler
  • 73e7b7e Implemented test for HSTRLEN handler
  • 2282c32 Implemented test for LPOP and RPOP handler
  • a1250a7 Implemented test for LPUSH command handler
  • b990755 Implemented test for LRANGE handler
  • c8209e1 Implemented test for LREM command
  • 92d824b Implemented test for RPUSH command handler
  • 93bd7c9 Implemented test for SINTERCARD command handler. Added logic to terminate the intersect calculation percisely when limit is reached rather than estimating
  • 36a64df Implemented test for SINTERSTORE command handler
  • 486fbb7 Implemented test for SISMEMBER handler function
  • 55b2472 Implemented test for SUNION command handler
  • 6bb3c83 Implemented test for ZCOUNT command handler
  • 59b9e5d Implemented test for ZDIFF command handler
  • 00c0fb5 Implemented test for ZLEXCOUNT command handler
  • f292025 Implemented test for ZMSCORE command handler
  • 6a483de Implemented tests for GET and MGET commands
  • fc5e992 Implemented tests for LSET handler
  • accd8a4 Implemented tests for SCARD command handler
  • 881b951 Implemented tests for SET, SETNX and MSET commands
  • f2e32d8 Implemented truncate of preamble and aof files
  • 3097826 Implemented unit tes for ZUNIONSTORE command handler
  • a8bee4b Implemented unit test for SREM command handler
  • 4e2d34b Implemented unit test for ZCARD command handler
  • 438988d Implemented unit test for ZRANDMEMBER command handler
  • 464f8cd Implemented unit test for ZRANK command handler
  • ba61e10 Implemented unit test for ZREM command handler
  • 3c85f98 Implemented unit test for ZREMRANGEBYSCORE command handler
  • 11a68c9 Implemented unit test for ZSCORE command handler
  • 4542f40 Implemented zincrby command
  • 14ead95 Implented SUNION command
  • 81f0ac9 Include server Dockerfile
  • de1f968 Installed boltdb for logstore and stablestore
  • 5f3a0ae Installed go-retry for retrying various actions on the server. Created RetryBackoff function to create the retry policy on demand.
  • e3780c7 Installed hashicorp raft
  • 5507f32 Installed memberlist package to for cluster member discovery.
  • 505a5bc Introduces HandlerFunc into Command and SubCommand types
  • 10312a5 MSET command does not allow uneven key/value pair matching
  • 4d4842f Made test case for SPOP command handler
  • 3e9f921 Made unit test for ZREMRANGEBYRANK command handler
  • 4875124 Makefile formatting
  • c23c301 Merge branch 'main' into chore/module-tests
  • 16f2b91 Merge branch 'main' into chore/module-tests
  • 6024b42 Merge branch 'main' into feature/sorted-set
  • a11a5b4 Moved CreateUser function int into user.go
  • 40d9989 Moved GET, MGET commands into a separate plugin. Introduced, Key-level locks instead of store-wide locks when retrieving/updating values.
  • e6a107f Moved OK and WRON_ARGS_RESPONSE to utils const file
  • 490bddf Moved aof and snapshot packages into server directory.
  • 9d90dd2 Moved authentication check above pubsub authorization
  • deda504 Moved configuration parsing to utils package as it's shared by both client and server
  • acc3e19 Moved get, list, ping, set, and string plugins into internal modules folder. This should simplify future testing efforts.
  • 954bd5e Moved mock file to its own mock package
  • 49da81d Moved raft init logic to raft.go file
  • 91e1ba5 Moved serialization functions to utils.
  • 83bd37f Moved server and client configs into their separate folders instead of in a shared utils folder
  • 2cc4494 Moved server config files into utils package. Added PluginsDir config. Updated Dockerfile to use plain alpine image as a base and move pre-compiled executable instead of building and compiling within the image build process.
  • af31564 Only initialize memberlist and raft when the server is part of a cluster(started with bootstrapCluster or joinAddr args provided).
  • f4432a4 Pass context to DeleteUser and AuthenticateUser
  • dc5ff98 Pass server args in docker-compose
  • 9e52392 Persist snapshots to disk
  • 5668b75 Pre-compile globs for matching during authorization in acl
  • 3e9f694 Prevent unauthorized connections from running commands when requirepass is true
  • 9e0bffe README list
  • 5fa6bc8 Re-enabled all the nodes in docker-compose
  • 02351a3 Re-enabled cluster instances in docker-compose
  • 0134722 Re-endabled SINTERCARD command
  • b1a6aa0 Re-instated file snapshot store
  • 3886cba Re-instated plugin model for commands. Re-instared makefile.
  • eb188de Read server response immediately after sending command in the same goroutine. The previous implementation had the server reads happening on a different goroutine.
  • eb00492 Refactor
  • f304142 Refactor list module to add new delimiter '\r\n' to responses and improve code readability and error handling
  • 4d6ee2e Refactored ZRANGE and ZRANGESTORE command handlers
  • 1ac9411 Refactored broadcast for joining raft cluster. Instead of broadcasting repeatedly with a ticker, the message will be relayed using gossip protocol until it reaches the raft leader. Created scaffolding for forwarding mutation commands from replica nodes to leader node.
  • 5f39a64 Refactored command modules to always accept connection parameter in order to streamline command processing. Updated server command list and enabled subcommands and granular cluster sync for individual subcommands. Renamed "set" packate to "etc" as "set" will be used for the set data type in the future.
  • 469cf34 Refactored comments in pubsub.go file
  • c825602 Refactored memberlist and raft layers into their own packages
  • eed0816 Refactored plugin structure to allow specification of categories, whether to handle with connection, and whether to sync with the replication cluster Refactored command handling logic.
  • 2fd757e Refactored server.data to use sync.Map instead of custom map + mutex implementation
  • 323bb0b Refactored tests to remove repeated logic
  • 2ca2415 Remove LoadModules and LoadCommands methods from server/modules.go. The commands will be injected into the server from the caller through the NewServer constructor
  • db3991a Removed 'Bitfield support' from feature roadmap README.md as it's part of Bitmap support
  • 135b3ea Removed 'Key' config
  • 4d1569d Removed /wiki in repo path on coverage badge
  • fe67c45 Removed 10 second wait time to simulate slow transaction in MSET command handler
  • 06822f1 Removed 5 second wait in snapshot persistence method
  • 6cfea5a Removed CustomWriter implementation
  • 1f91ac1 Removed FetchData from msg.Action in memberlist notify. This is because pure fetch commands can be carried out on any node without involving the leader or any other cluster members. MutateData has been left in the code for the purpose of propagating changes from a follower to a leader in the future.
  • a3c7298 Removed IncludedKeys property on user. Keys that are included in both read and write keys will be considered RW
  • b9befc2 Removed MSETNX command from set plugin. Created string plugin for handling string operations
  • 9b830f9 Removed Makefile. Added plugins config
  • d0caebf Removed Plugin property from Command type and removed json tags from Command and SubCommand structs
  • 6cb38ee Removed Plugin struct and it's receiver functions in all the modules
  • 974fc24 Removed client subdirectory from monorepo into its own repository. Renamed "server" subdirectory to "src" as this entire derectory now only has server code. Removed "bin" directory to project root. Moved Dockerfile to project root.
  • 77e6aab Removed codeql github workflow
  • 31c860a Removed commands array field in Plugin struct for ACL comands
  • 69a86e4 Removed config print statement
  • 611eaad Removed coverage file and output-dir config in coverage report workflow
  • 412aec5 Removed debug print loop in ConsumerGroup Start method
  • b1a68ac Removed debug print of store and key locks map
  • f7df7f8 Removed default condition in NotifyMsg switch statement
  • 3348c8e Removed example badge and added CodeQL workflow badge
  • 34022bc Removed fmt.Println statement on LoadPlugin function. Removed utils package import from plugins to reduce coupling between plugin and utils package
  • 9017f12 Removed http options flag as it will not be used for now. Moved server cluster receiver functions into cluster.go. Moved keyspace receiver functions into keyspace.go. Moved module and command loading into modules.go. Updated Dockerfile and docker-compose to remove http flag to server.
  • e4f8a4a Removed indirection of ACLPlugin inside of ACL struct
  • 6038d72 Removed mutex on pubsub container
  • fbb0b8d Removed plugin-dir cli flag as its not used
  • b1fec4a Removed print statement in simple string encoding function
  • 5db0164 Removed printing of pubsub in pubsub/commands.go module
  • 83f0709 Removed restore context parameters in AOFEngine
  • 00991e5 Removed server alias for mock server import in ping test file
  • dcdf885 Removed server print statement
  • 9077742 Removed test files in commands plugins
  • feaacab Removed unnecessary tcp listener before initializing raft server
  • 782bc90 Removed unnecessary tidwall/resp import and Decode in ping test
  • 181844c Removed unused ContainsMutual utils function
  • 48cc85e Removed unused ContainsMutual utils function
  • 501a435 Removed unused Plugin declarations
  • 59a913b Removed unused code in SINTERSTORE command handler
  • ae73169 Removed unused mutex
  • 524bb3b Removed unused packages. Implemented ZADD command on sorted sets
  • c8a2700 Remvoed CGO_ENABLED env var on go build command in makefile
  • 4b980cc Remvoved response skipping for +ack message from client.
  • 734e19a Renamed MockData and MockServer to Data and Server respectively
  • 27d2277 Renamed NewPlugin function to a Command that returns []utils.Command directly
  • af22c16 Renamed NewPlugin function to a Command that returns []utils.Command directly
  • 117650b Renamed NewPlugin function to a Command that returns []utils.Command directly
  • 2113a5b Renamed NewPlugin function to a Command that returns []utils.Command directly
  • 1a0b294 Renamed NewPlugin function to a Command that returns []utils.Command directly
  • c849b3c Renamed NewPlugin function to a Command that returns []utils.Command directly
  • 71bbaee Renamed NewPlugin function to a Command that returns []utils.Command directly
  • 4a41dc1 Renamed NewPlugin function to a Command that returns []utils.Command directly
  • a0432df Renamed NewPlugin function to a Command that returns []utils.Command directly
  • cf9ff72 Renamed NewPlugin function to a Command that returns []utils.Command directly
  • b0375f2 Renamed dev dockerfile to 'Dockerfile.dev'
  • 42eaecd Renamed hash INCRBY handler function to HINCRBY to match the naming convention in the module. Created test for HINCRBY handler function
  • 78aa9a8 Renamed memebrlist_layer directory to memberlist. Renamed raft_layer directory to raft. Created snapshot and aof packages to handle snapshots in standalone mode and aof package to handle append-only function. Created server package that will contain the server logic.
  • 6193ec4 Renamed plugin folder to 'plugins' from 'pugins' to fix build error
  • 323c6ca Reorganised functions in set.go
  • 094d44c Repetetive broadcast of raft join request message until a join signal is received on a dedicated channel. Handle multiple types of Actions in NotifyMsg. Added function to check if the current server is the raft leader.
  • 58ecde9 Replaced '\r\n\n' delimiters in command handler responses with '\r\n\r\n' delimiter
  • ce14f59 Replaced all instances of utils.Contains with slices.Contains. Deleted Contains function from the utils.go file. Replaced bufio.ReadWriter with io.Reader and io.Writer respectively. Updated PubSub module to remove posibility of not passing a channel name when subscribing or publishing.
  • 86fcfad Replaces utils.Contains with slices.Contains in modules/acl/user.go
  • db344c9 Reset NoKeys when keys are added
  • 9d9bcc7 Restore state from snapshot upon restart
  • 6f8a84e Return 'nil' when value is not found
  • 65e53f1 Return NodeMeta data
  • e0e865f Return PONG response from server
  • 9e0291d Return error from GetConfig function
  • 771b1d4 Return from the broadcastRaftAddress goroutine if we've already joined the cluster
  • f707f36 Scaffolding for LREM command
  • d4a5997 Scrapped plugin design in favour of simple command interfaces. Setup docker build process for running server. Deleted test files.
  • 0b1c76f Send RESP encoded message with double quotes and escaped delimiters to server
  • 6a5cac5 Separate plugin util functions and new file for pubsub type in pubsub plugin. Removed dependency on server utils in pubsub plugin
  • d44c76d Server log differentiates between starting TLS and mTLS server. Removed TLS minimum version in tls config.
  • f94bf66 Server now handles client requests to subscribe to channel and channel consumer groups. Only allow subscribtion to a channel or consumer group if the connection is not already subscribed.
  • 0171289 Set default dataDir config. Set INMEMORY env var of docker containers to false. Added volumes folder to gitignore
  • b781a80 Set up check for nokeys
  • 67d8f9f Set up memberlist cluster with message broadcasting.
  • ab86694 Show nopass flag in ACL LIST command
  • 261cb71 Simplified encoding on client side by removing all explicit command cases. Encode RESP message directly instead of using resp package. Encode error directly on core server instead of using Encode helper function.
  • 4a2b9a3 Skip ping command when authorizing commands in ACL
  • 04ddd46 Start goroutine in AOF engine to log queued commands
  • 4895b10 Sync snapshot command across cluster
  • c606353 Unmarked checkboxed in readme
  • 3cd9da2 Untrack docker-compose.yaml and Dockerfile
  • b437f48 Update Go version
  • f700ea8 Update README.md
  • 5545e06 Update README.md
  • 2a147ec Update README.md
  • 0ff63a0 Update README.md
  • db913ec Update README.md
  • 52afde3 Update README.md
  • 18e415c Update README.md to include Go build status badge
  • fa6328a Update README.md to remove [] around CodeQL workflow
  • 04d319f Updated .gitignore
  • ca7ada5 Updated AdaptType function in utils to use big float and int64 for number coversions. Updated setget and setget_test to account for new number formatting change.
  • 4fc70d2 Updated HGET to return correct encoding for nil response
  • 41efc1e Updated Intersection function from a receiver function to a standalone function that accepts a limit integer and a list of sets as a variadic param. The function now uses a divide and conquer approch to calculate the intersection of multiple sets. Implemented test for SINTER handler.
  • 09dd17a Updated Intersection method of Set to fix bugs in finding intersection of more than one set. Implemented SINTERCARD command
  • e8df5bb Updated Makefile to build for linux/amd64
  • 8f44a92 Updated README with new TODO features
  • 6cb3bfb Updated README.md
  • 92bb913 Updated README.md
  • 5e361b7 Updated README.md
  • e505361 Updated README.md
  • 41e79c7 Updated README.md file
  • b468997 Updated README.md file
  • 53542a3 Updated README.md file included features
  • d31acfb Updated Raft snapshot to also persist last saved unix timestamp in milliseconds. This timestamp is re-loaded when the server is re-started. Created standalone snapshot flow including manifest file that is used to determine whether another snapshot should be taken based on the hashed contents of the snapshot.
  • bb2d44f Updated ReadMessage function in utils
  • 4535434 Updated SDIFFSTORE to match logic in SDIFF and implemented test for SDIFFSTORE
  • cd3755c Updated SortedSet Subtract method to remove returned error
  • 02f0977 Updated client to enter listening state after subscribing to a channel. Updated client decode helper function to accomodate BulkStrings. Enabled handling for unsubscribe command on server. Updated handling of 'publish' command in raft Apply method to prevent index panic when attempting to publish to all channels. Implemented message sending to all direct channel subscribers, waiting of ACK and removing any subscriber that does not return an ACK. For channels, Subscribe and Unsubscribe methods now make use of a RWMutex. Message handler makes use of this mutex to by acquiring a RLock before looping through the subscribers and attempting to send the message to each one.
  • c0b3fe3 Updated config file to log config file close error
  • 18f947c Updated coverage badge
  • 4bf3168 Updated coverage report config
  • 390e927 Updated description for sdiff command
  • 5bb5d54 Updated docker-compose to include MTLS, CERT_KEY_PAIR and CLIENT_CA for cluster nodes. Uncommented cluster nodes
  • 5e1e362 Updated flags from camelCase to kebab-case
  • 104dea7 Updated go.yml and codeql.yml workflow scripts
  • 406f898 Updated goreleaser script to use brew.repository instead of brew.tap
  • 42d9bf1 Updated handleSetRange logic and added some test cases.
  • e1dcc80 Updated key lock logic in set command plugin. Added skeleton for MSET command handler function.
  • d06cda7 Updated list command set to use new key-level lock system
  • 7715928 Updated mget command handler to use safer concurrency control
  • 1c00706 Updated module name to echovault
  • 4f10d51 Updated plugin command files to return message bytes or errors instead of writing to the connection directly. Added test for ping, set, get and mget commands.
  • ed73a4c Updated raft snapshot persist and restore to work with sync.Map instead of regulart Map
  • b1af2c9 Updated server.go file to remove import from acl and pubsub packages. Use ACL and PubSub interfaces instead. Created NewServer function that returns and instance on server
  • 69df2b9 Updated vals variable name into values for more clarity
  • d82a6a9 Use UDP dial to find default address for outbound traffic. Set default bindAddr if it has not been explicitly provided be the user.
  • 9e1b3e7 Use args in build-plugins and build-server sections of Makefile to allow easy plugin of build for different platform. Updated dockerfile to specify which platform to emulate.
  • 903bc34 Use key extarction function in ZINCRBY command handler
  • 5b2a0c1 Use reference for User instead of copying values in Connection type
  • bc4ce05 User proper boolean value passing in Dockerfile CMD command. Pass key, cert and set TLS env variable to true in docker-compose file to enable tls mode.
  • c843093 Validate flags for tls mode
  • 0e657ba ZINTERSTORE command handler now uses new Intersect divide & conquer function instead of the old Intersect receiver function. Intersect receiver function on SortedSet reference has been deleted as it's no longer in use. Added test for ZINTERSTORE command handler.
  • c54619d string command handlers now use their corresponding key funcs instead of manually extracting keys in the handler
  • ef5e429 write-all permision to go.yml workflow

Don't miss a new SugarDB release

NewReleases is sending notifications on new releases.