Skip to content

Releases: EchoVault/SugarDB

v0.9.0

08 Jul 12:21
Compare
Choose a tag to compare

Changelog

  • cab6c3f Added 'subject-name' in attestation generation step in release workflow
  • 88e23d9 Added Dockerfile.prod to docker build step
  • 05b42a8 Added multi-database support to the list of features in README.md
  • 854ebb0 Adding context to params.KeyExist
  • 6b490a8 Adding context to params.KeyExist
  • 4e0ab4e Adding tests for APPEND
  • 26224f1 Adding tests for APPEND
  • d755f6f Begining to implement Append command
  • eb80a8d Begining to implement Append command
  • af928b5 Changed namespace/repository to echovault/echovault in docker image push workflow.
  • 48615a5 Changed output directory for build step in go.yml workflow. Changed main directory in .goreleaser.yml config file
  • d896972 Changing APPEND command to write category
  • 2f7ba5f Changing APPEND command to write category
  • 0db35cb Deleted aof folder in echovault package
  • 32b3a6f Disable DockerHub login
  • 70e147d Enabled DockerHub login
  • f01a079 Fixed paths for ssl certs in docker-compose.yaml environments for all the nodes. Updated Dockerfile.dev build path. Updated Dockerfile.prod to produce a final alpine image instead of using homebrew.
  • 51198e3 Implementing APPEND command
  • b36d505 Implementing APPEND command
  • 194641c Merge branch 'main' of https://github.com/EchoVault/EchoVault into enhancement/62-append-command
  • 47bafa9 Merge pull request #84 from DMcP89/enhancement/62-append-command
  • bbd2f7e Merge pull request #85 from dotslashbit/issue-67
  • eb94269 Merge pull request #86 from EchoVault/chore/update-docs
  • feb2ffc Merge pull request #89 from EchoVault/fix/readme-package-name
  • a26144c Merge pull request #90 from EchoVault/chore/restructure
  • c6a85b6 Moved volumes folder to internal folder. Moved main.go file to the project's root instead of the cmd directory.
  • 7898e9a Pulling coverage file from latest main
  • 977131e Pulling coverage file from latest main
  • 1c5bcd3 Pulling coverage file from main
  • 08a6f5f Removed keyspace category for INCRBYFLOAT command
  • 715248d Removing coverage file
  • eae0db3 Uncommented cluster nodes in docker-compose.yml
  • fe73609 Update README.md
  • fa1be7c Updated README.md to include new commands
  • 7c70d6d Updated release.yml DOCKER_PASSWORD to DOCKER_TOKEN
  • a66ec34 Updated the go.yml workflow to build from the root directory. Added a job in the releast.yml workflow that publishes docker images to DockerHub and Container Registry
  • 82abf68 Use docker/login-action@v3 for login to DockerHub
  • 4a84c82 added comments
  • cb0488c added tests and fixed misplaced function
  • e3a2698 feat: INCRBYFLOAT command added
  • 19dc815 implementing appended for embedded api and started to write tests
  • fca160c implementing appended for embedded api and started to write tests
  • 8e4b3e8 starting implementation of append for embedded server
  • dd86ea6 starting implementation of append for embedded server
  • 3c9d025 updated tests

v0.8.0

02 Jul 17:22
b794a33
Compare
Choose a tag to compare

Changelog

  • 9c2b4d4 Added JSON and YAML tag for DiscoveryPort config option
  • 2bb6393 Added JSON and YAML tag for DiscoveryPort config option
  • dc9b33b Added ability to set the connection's database in SetConnectionInfo function. Implemented SELECT command to allow TCP connections to select a different database.
  • 850cb7c Added check for readKeys and writeKeys length before checking for authorization in acl module. Added tests for HELLO and SELECT client-server commands
  • 0111c67 Added command length tests for DECRBY command. Updated godoc comment for DecrBy embedded API method.
  • 9e49c35 Added command length tests for DECRBY command. Updated godoc comment for DecrBy embedded API method.
  • 5433b88 Added command length tests for INCRBY command. Renamed INCRBY key func. Return WRONG_ARG_RESPONSE from key funcs when commands are not the correct length.
  • db04465 Added command length tests for INCRBY command. Renamed INCRBY key func. Return WRONG_ARG_RESPONSE from key funcs when commands are not the correct length.
  • cccdd88 Added coverage report
  • d6162b2 Added database support for keyspace methods. Commented cache methods and standalone persistence initialisation until their implementations support databases as well.
  • f4fdc78 Added description for the HELLO command
  • 0bb4ce6 Added emebedded API methods to change Protocol and logical DB. Added comments to SwapDBs and Flush methods.
  • 8ad2714 Added godoc comment for Decr embedded API method.
  • 11450c7 Added godoc comment for Incr embedded API method.
  • a5cfdfd Added multi-database support for loggin and restoring in log engine. Added multi-database support for preamble snapshots and restoration in preamble engine. Added multi-database support for aof engine. Removed buffered channel from log and aof engines. Command logging is now synchronous. Added multi-database support for the raft layer's data replication.
  • 59143b4 Added multi-database support for loggin and restoring in log engine. Added multi-database support for preamble snapshots and restoration in preamble engine. Added multi-database support for aof engine. Removed buffered channel from log and aof engines. Command logging is now synchronous. Added multi-database support for the raft layer's data replication.
  • 295ef9d Added multi-database support in updateKeysInCache method
  • 182195e Added multi-database support to snapshot module
  • a309310 Added mutex for accessing number of nodes in memberlist layer.
  • 9745270 Added placeholders for adding protocol and database version in raft replication flow
  • 93a165e Added support for HELLO command. Load modules build from Dockerfile.dev into instances from docker-compose.yml. Fixed user loading from config file in ACL module.
  • 663c097 Added support for multiple databases on the evictKeysWithExpiredTTL function
  • ddea7ab Added tracking for embedded client connection info. Moved logic to determine which connection info to use into the handleCommand function.
  • 9b897b4 Added wrong args tests for RENAME command.
  • 33d7eb2 Caches and volatile key tracking slices for each database.
  • a3ef0ff Changed noOfNodesMut to RWMutex
  • 85e8a68 Close AOF engine files on shutdown. Close snapshot file after restoring snapshot on startup. Implemented tests for HELLO command in echovault package. Implemented tests for GetServerInfo in echovault package.
  • c37a523 Creating production dockerfile
  • e126dc5 Deleted coverage report
  • 081b4c7 Disabled adjustMemory memory until a multi-database implementation is done. Updated function signatures in handler params for built-in commands and for modules. Disabled snapshots and snapshot restoration until a multi-database implementation is done.
  • 325157a Disabled adjustMemory memory until a multi-database implementation is done. Updated function signatures in handler params for built-in commands and for modules. Disabled snapshots and snapshot restoration until a multi-database implementation is done.
  • 1d9ba10 Fixed typo in keyspace.go
  • 2223d00 Implemented FLUSHDB and FLUSHALL command to clear logical databases.
  • 1a8d231 Implemented FLUSHDB and FLUSHALL command to clear logical databases.
  • 9e4b61f Implemented SWAPDB command handler.
  • 8b8c235 Implemented test for INCR embedded API. Added test cases for incorrect commands length for INCR command. Fixed error checking on INCR commands test. RESP errors will be contained in the response object of the ReadValue method. The error object only contains an error when ReadValue failes.
  • 0246fb2 Implemented test for INCR embedded API. Added test cases for incorrect commands length for INCR command. Fixed error checking on INCR commands test. RESP errors will be contained in the response object of the ReadValue method. The error object only contains an error when ReadValue failes.
  • dcba579 Implemented test for SWAPDB command.
  • f867bca Implemented test for SWAPDB command.
  • 56f0a5c Implemented test for SelectDB and SetProtocol methods
  • ed6a571 Implemented tests for FLUSHDB and FLUSHALL commands
  • f14de2d Implemented tests for FLUSHDB and FLUSHALL commands
  • c4b4285 Initialise volatile key tracker on startup. Create a database if it does not exist when trying to set a value.
  • 591cc7e Merge branch 'main' into issue-64
  • 341b311 Merge branch 'main' into issue-66
  • 75baaa5 Merge pull request #73 from dotslashbit/issue-55
  • 83308ba Merge pull request #74 from dotslashbit/issue-66
  • f3cf011 Merge pull request #75 from EchoVault/fix/cluster-advertise
  • 5e193d4 Merge pull request #76 from DMcP89/50-production-docker-file
  • 5272edd Merge pull request #77 from dotslashbit/issue-63
  • e6b0c88 Merge pull request #78 from dotslashbit/issue-65
  • 67ea631 Merge pull request #79 from dotslashbit/issue-64
  • d7bcc3a Merge pull request #81 from dotslashbit/issue-58
  • b794a33 Merge pull request #83 from EchoVault/feature/multi-database
  • 21aabda Moved AUTH command from the acl module to the connection module. Added echo command to the list of commands that are skipped on ACL authorization.
  • d31cb10 Obtain a read lock on connection info before logging command.
  • 646f5be Re-implemented snapshot.go logic to persist and restore multi-database state
  • 9b0d590 Removed RaftBindPort config. Raft bind address and port are dynamically assigned on startup instead of configured manually. Replaced memberlist-port configuration with discovery-port.
  • 3d549a9 Removed RaftBindPort config. Raft bind address and port are dynamically assigned on startup instead of configured manually. Replaced memberlist-port configuration with discovery-port.
  • 70a1536 Removed duplicate test for INCRBY command
  • a102f90 Removed redeclared keyspace functions
  • 8ecb9ab Restore multi-database state in FSM in the raft layer
  • 13d86df Update README.md
  • 5a04bca Updated Embedded ACL test and enabled memory adjustment after key update
  • ed28ffc Updated INCRBy command handler
  • b98ddcd Updated coverage report
  • d787c6c Updated coverage report
  • 7a8a927 Updated coverage report
  • dcc1b4b Updated coverage report
  • 12b8b4d Updating prod docker file
  • b509e33 added coverage report
  • 51100a1 added coverage report
  • 1965f9b added echo command
  • 95f7175 added godoc comment for INCRBY command
  • fe9344d added godoc comment for INCRBY command
  • 2695920 added test for RENAME command
  • db42cf6 added test for RENAME command
  • 16f1aa4 added test for incrementHandler
  • 728dd86 added test for incrementHandler
  • 60bfd80 added tests
  • 587782b added tests
  • 73d84ea added tests
  • 3b70bb2 feat: INCR command added
  • 1e0625f feat: INCR command added
  • dfb5a0f feat: added DECR command support
  • 7bd98e6 feat: added DECR command support
  • 03f278c feat: added DECRBY command
  • 5f9c9a0 feat: added DECRBY command
  • 876ac0b feat: added DECRBY command
  • 3c338cf feat: added DECRBY command
  • 38ca643 feat: added RENAME command
  • cb8a501 feat:added INCRBY command
  • 10f01c1 fixed a bug on test
  • 2897ee3 fixed a bug on test
  • 90b3d40 fixed a bug on test
  • cebc72b fixed a bug on test
  • 50e88a8 fixed a bug on test
  • 3906568 handled case for key doesn't exist
  • 4dd3aa4 quit

v0.7.0

17 Jun 13:00
Compare
Choose a tag to compare

Changelog

  • b87c836 Added Makefile commands for building local binary
  • 0a4a3c0 Added TCP/UDP offload disabling in go.yml workflow
  • 3202120 Added client openssl files in order to faciliate MTLS testing. Implemented test of MTLS server.
  • 2d95de3 Added comments to clarify command handler types
  • 088900c Added contribution and code of conduct guides
  • f894a53 Added happy path test case for data replication
  • d27fb87 Added longer yields for file sync after snapshot and aof rewrite
  • 7e585dc Added supported commands links to README.md
  • 3bd09ab Added test coverage for empty command and write command to non-leader node
  • bb667cf Added test coverave + fixed some bugs with pubsub api methods.
  • 55b9bc6 Added test coverave for ACLSave and ACLLoad
  • 7691ec4 Added test coverave for sorted set api methods
  • ae5a675 Added test for TLS connection
  • e8840cb Added test for forward command
  • d4506ce Added tests for ACL LOAD and ACL SAVE commands.
  • 5de2cc8 Admin tests are no longer parallel as module loading interferes with other test results. ForwardCommand test now retries until all values are found in a quorum or a 5 second limit is reached.
  • b7e691b Changed default memberlist config to DefaultWANConfig
  • 7661ab1 Close TTL ticker after shutdown
  • 6f85116 Close client connection on quit command
  • 7807569 Created MakeCluster function to reuse logic for creating clusters. Created test files in raft and memberlist packages to add them to test coverage statistics.
  • 9f371ca Deleted debug fmt.Println statements
  • ef04bae Deleted raft and memberlist test files as there's no need to test internal raft and memberlist functionality. The cluster behaviour can be tested at the echovault package level.
  • 66b6c4b Disable TCP/UDP offloading in GH Action
  • e1d5e82 Disabled cluster test until a more efficient method is found.
  • 57d4718 Finished implementing multi stage build
  • 99be0fd Fixed data race issue when reading and writing ACL user data. Now, a write-lock is acquired before modifying the connection object as well in addition to the users list.
  • fdb3b87 Implemented ACL tests using test suites and server cleanup functions.
  • 15191dc Implemented new param methods and testing through resp connection in set commands package
  • 66b2842 Implemented tests for ACL permissions
  • 30b8b20 Implemented tests for api_acl.go file
  • 06ce6bf Instead of checking if a value is replicated across the entire cluster, only check if it's present in a cluster quorum. Fixed race conditions in pubsub API by replacing connections map with sync.Map
  • 3bb9a1a Merge branch 'chore/add-types-comments'
  • 8f249d7 Merge pull request #43 from EchoVault/chore/echovault-test
  • f81e947 Merge pull request #44 from EchoVault/chore/echovault-test
  • 66ac3b2 Merge pull request #45 from EchoVault/chore/echovault-test
  • aa99038 Merge pull request #46 from EchoVault/chore/echovault-test
  • cf874a3 Merge pull request #47 from EchoVault/chore/echovault-test
  • 3534ce6 Merge pull request #48 from EchoVault/chore/echovault-test
  • 1796004 Merge pull request #51 from EchoVault/fix/remove-in-memory-config
  • 05a23f4 Merge pull request #52 from DMcP89/49-multi-stage-docker-dev
  • 09d19b7 Merge pull request #53 from EchoVault/chore/remove-unused-makefile-commands
  • 39b9e64 Moved TCP SAVE/LASTSAVE test to admin module
  • 60f5d03 Only fail ForwardCommand test if there's an error present.
  • 33d6651 Removed --in-memory config flag. InMemory is now inferred from whether the data directory was provided.
  • df2b481 Removed ./testdata DataDir config parameter from setupServer in echovault test file. This parameter is now an empty string in order to force in-memory stores for raft store.
  • 7855726 Removed TCP/UDP offload disabling in go.yml workflow
  • 168e760 Removed --in-memory flag as it's will no longer be used.
  • ee13c29 Removed debug print statements in acl.go file
  • 502e804 Removed logic to get unexported methods from the echovault package in all tests.
  • 62bf589 Removed parallel testing for load command in acl api module
  • 695e777 Removed unused Makefile commands for building modules and echovault server. The build step is now handled by the dev dockerfile
  • dd323f6 Renamed config variable name in echovault_test.go
  • 5553874 Replaced all time.After instances to time.Ticker
  • 0108444 Replaced fmt.Println statements with log.Println. Return "empty command" error from handleCommand method if an empty command is passed to the server. Wait until connection is no longer nil in acl package tests.
  • 6afef55 Replaced time.After in snapshot and aof engines with ticker.
  • bc6537a Replaces use of time.Sleep with time.Ticker in echovault and echovault tests
  • 166e9a8 Shutdown raft nodes from the last one to the first one in echovault tests. This is to ensure the leader node is shutdown last.
  • 3c2b722 Starting to implement build stage for Dockerfile.dev
  • c5f168a Test standalone snapshot persist and restore
  • abee9ea Uncommented AddCommand method
  • 4912a21 Update README.md
  • 163cafd Update README.md
  • 7a6fbcd Update README.md
  • 98f4ca3 Updated CommandHandlerFuncParams docs comment
  • 93a616c Updated RAFT layer to use new keyspace methods. Fixed API methods for HSET and SINTERCARD to match new key overwriting behaviour.
  • 393700b Updated TLS/mTLS listener log
  • c7560ce Updated all test suites to include connection and server shutdown on cleanup.
  • 926a008 Updated generic and hash package tests to use tcp connection instead of calling the handler directly
  • 43361cd Updated keyspace methods' signatures and made them all private. Ditched lock-per-key for a store-wide rwmutex. Updated HandlerFuncParams to match new keyspace method signatures.
  • af8a002 Updated list command tests to use resp connection instead of directly invoking internal method
  • bdfaf54 Updated logic for loading acl config. If the config file does not exist, it will be created.
  • edf8288 Updated sorted_set commands package to use new keyspace methods and its tests to use resp connection instead of calling handler directly
  • e3ecc42 Updated string commands package to use new keyspace methods and resp connection for tests
  • b48ee54 Updated test suites to retry connection to tcp server. Use concurrency to setup cluster in Test_Cluster suite.
  • 4d56ee9 Use log.Println instead of log.Fatal upon failing to load ACl config
  • bbc53ff Use time.After instead of custom clock wrappet for TTL key eviction when creating a new EchoVault instance.
  • 9904fcd Wait for cluster followers to join cluster before proceeding with raft test in echovault package.
  • cb99ff8 rewriteAOF method in echovault.go now handles the rewrite synchronously. Removed newline character in Write method of append store. Added test case for REWRITEAOF command and restore from AOF.

v0.6.0

18 May 22:48
40fc986
Compare
Choose a tag to compare

Changelog

  • 7fb236e Added HGet to embedded API
  • aa7b5fa Added ZRemRangeByLex and ZRemRangeByRank to embedded API.
  • 28b4721 Added documentation section to README.md
  • d28bda9 Added makefile command to build modules for admins module tests. Implemented more sensible logic for testing the COMMANDS command instead of just printing each returned command. Implemented tests for MODULE LOAD, MODULE UNLOAD, and MODULE LIST commands. Implemented testdata folder cleanup after finishing admin command tests.
  • 291d4e9 Added makefile command to compile .so modules for testing in admin module
  • 26a709a Added test case for command handler in modules test in api_admin
  • 1981fe9 Added unit tests for COMMAND COUNT and COMMAND LIST commands in admin module
  • cf38d17 Disabled MODULE LIST command test
  • 229b108 Fixed data race in snapshot engine and lfu cache test
  • c5c1487 Fixed race condition in admin module commands tests by passing --race flag to build command for modules
  • 63524c0 Fixed type in admin module test file
  • a9c11ad Fixed users unlock in ACL LOAD command handler
  • 040f246 Implemented test for LRU cache implementation
  • df51142 Implemented test for LoadModule, ListModules, and UnloadModule. Added check for existence of module file using os.Stat before attempting to open the file. Added build-module-tests step in makefile to simplify building modules for unit and race tests
  • 475d46a Merge branch 'main' into update/README.md
  • aac4349 Merge branch 'update/README.md'
  • 362cbc3 Merge pull request #36 from EchoVault/chore/improve-test-coverage
  • 6ed59ef Merge pull request #38 from EchoVault/update/README.md
  • 3629a4a Merge pull request #39 from EchoVault/update/README.md
  • e8fe6b1 Merge pull request #41 from EchoVault/chore/fix-minor-issues
  • 40fc986 Merge pull request #42 from EchoVault/chore/fix-minor-issues
  • 1488384 Pop from LFU and LRU cache using heap.Pop instead of calling the Pop method of the cache directly. Implemented test for lfu cache
  • ba48a51 Re-enabled cleanup of testdata folder after completing Test_AdminCommand suite
  • 915c34d Refactored Write function of append store to use tidwall/resp to parse commands. AOF log no longer prints an empty line between each command. Return error on NewAppendStore instead of just logging. Implemented test for AppendStore
  • 193871e Removed test folder and moved all commands tests to their respective internal modules. Moved api tests into echovault package. This change has been made because the speratate test folder is not idiomatic and caused test coverage report to not be generated.
  • b3ceecf Removed unnecessary fmt.Println statement
  • baf5f3d Return error from preamble restore method instead of just logging it. Implemented test for AOF engine persist and restore flow.
  • c634b1b Return ok boolean instead of OK string in embedded api methods that return ok status. Updated tests to match new return types
  • 028f731 Update README.md
  • 0d57b72 Update README.md
  • cddbb08 Updated README.md
  • 655c2d8 Updated README.md to remove configuration and eviction sections as they will be contained in the docs website
  • 028fb7c Updated expired entry filter function to accept time boundary 'now'. Implemented tests for snapshot package
  • 270c5ef Use make scripts to run tests in build workflow
  • cfa8e35 Use path.Join instead of hardcoded path to load mdules in admin tests.

v0.5.0

07 May 15:09
eb386d5
Compare
Choose a tag to compare

Changelog

  • 54bed13 Added REMOVE_COMMAND method for removing commands or subcommands
  • dcb88ff Added condition to skip duplicate subcommands when adding a new command with subcommands
  • 851ca6d Added copyright text
  • 281c4f2 Added godoc commends for embedded methods and types to extend commands. Moved constants to internal directory
  • bdf6150 Added godoc comments for LoadModule, UnloadModule and ListModules methods
  • 000115c Created "loadmodules" args for loading ".so" modules into EchoVault. Moved types associated with embedded commands extension into api_admin.go file and deleted types.go file as it's no longer necessary. Updated docker-compose and Dockerfile.dev to pass .so modules to load on startup. Volumes folder is no longer ignores except for the nodes subfolder.
  • b6825c4 Created EXECUTE_COMMAND method that allows raw execution of loaded commands when in embedded mode
  • b439bd2 Created plugin.go file to handle loading and unloading of plugins to EchoVault
  • 44e4f06 Deleted ACL type from pkg types
  • 8baeaa9 Enable adding command with subcommands in ADD_COMMAND method
  • 6ad3b7b Exported EchoVault interface now onlu contains the keyspace methods. All other methods are private. Private methods are accessed using the reflect package in the test folder
  • 2291ba4 Implemented ADD_COMMAND method to add a custom command to echovault
  • 6a32f46 Implemented GetFreePort utility function to get free port for tests. Updated ACL and PubSub tests to use new GetFreePort functions instead of hardcoded ports
  • 8aed3a3 Implemented LoadModules method for loading modules into EchoVault. Implemented UnloadModules methods for removing module from EchoVault. Removed connection from plugin handler function parameters as it should not be modified by the module.
  • 0f6ae1c Implemented LoadModules method to load external modules at runtime. Implemented UnloadModules method to remove modules at runtime. Implemented ListModules method to list the current loaded modules. Implemented "MODULE LOAD", "MODULE UNLOAD", and "MODULE LIST" commands.
  • 1d56e98 Implemented tests for AddCommand, ExecuteCommand and RemoveCommand methods
  • fbf4782 Instead of passing in EchoVault instance to commands handler, we now pass a struct of params containing all the variables and functions used within the handler function. This removes the modules' dependency on the echovault package. Moved string command and api tests to test/modules/string
  • 8be29f7 Merge pull request #32 from EchoVault/refactor/handler-params
  • f017d65 Merge pull request #33 from EchoVault/feature/embedded-extensions
  • fd500d7 Merge pull request #34 from EchoVault/feature/shared-object-extension
  • eb386d5 Merge pull request #35 from EchoVault/chore/test-dynamic-ports
  • 97f4617 Moved all packages from /pkg directory to the root directory. Deleted /pkg directory. Pass keyspace functions to raft package instead of an EchoVault instance. This removes dependency on the echovault pakage from the raft package.
  • 3e04b7a Moved tests for module commands and apis into 'test' folder
  • d9d9160 Moved types.go file into the echovault package and deleted EchoVault interface as it's no longer in use
  • 1a7951f Removed EchoVault interface param from raft Opts
  • b6ddb43 Removed duplicate imports for set, sorted_set, pubsub and acl modules. Moved /modules from /pkg to /internal. Delted commands package: Commands will now be automatically loaded when an EchoVault instance is initialised.
  • c241cc0 Renamed *AccessKey type to better represent the response on *KeyExtractionFunc types
  • 24b5e6d Renamed LoadModules and UnloadModules to LoadModule and UnloadModule respectively because they both deal with one module at a time.
  • 6bf638e Renamed all api test files to api_test.go
  • 972cbe0 Renamed command API methods to use CamelCase
  • 276ca0f Trigger LoadModule methods in NewEchovault function using module paths from the configuration
  • f392303 Update README.md
  • 2b01c73 Update README.md

v0.4.1

20 Apr 20:10
3e8fd43
Compare
Choose a tag to compare

Changelog

  • 44b55c6 Add waitgroup to init server starter in pubsub commands module
  • a605a7b Added discord badge to README.md
  • fce0258 Added embedded parameter in handleCommand method which will cause handleCommand to skip ACL auth when it's true
  • 4ae8ff1 Added test for data race in go.yml github workflow
  • be44d23 Commend refactoring in pubsub module. Variable renaming in api_pubsub.go
  • 3bf9e25 Fixed race conditions in acl module tests
  • 16743a3 Implemented t.Run in generic, hash, list, and set module tests
  • 7b88122 KeyExtractionFunc now returns a struct that specidies channels, read keys and write keys that are accessed by the command. ACL authorization method now checks read keys against allowed read keys, write keys against allowed write keys and channels agains allowed channels.
  • 7a77d4f Leverage t.Run for sorted_set module tests
  • 9df42f2 Leverage t.Run in string module tests
  • c6b246e Merge pull request #21 from EchoVault/chore/fix-race-condition
  • bef3377 Merge pull request #25 from EchoVault/fix/key-extraction-func
  • 3e8fd43 Merge pull request #26 from EchoVault/fix/ebedded-acl-auth
  • de0bc98 Merged main branch
  • 2528082 Update README.md
  • ddd09ee Update README.md
  • 9b7d93f Update README.md
  • c2c887c Updated KeyExtractionFunc for all the modules
  • 2dc5bb9 _ for unsused context parameters in pubsub module
  • 64bbda6 wg.Done intead of wg.Add in goroutine that starts server in pubusub test module init function

v0.4.0

04 Apr 19:49
Compare
Choose a tag to compare

Changelog

  • f4d0f2e Added Go reference badge to README.md
  • 25ffb30 Added waitgroup for control flow on acl tests
  • 1e421cb Implemented a Clock interface that is injected everywhere time.Now and time.After are used.
  • 4fff666 Merge pull request #20 from EchoVault/enhancement/time-abstraction
  • 6e51097 Removed timeNow implementation in generic module. This will be replaced by a mock implementation of the time interface
  • e04aa0b Removed vendor flag in .goreleaser.yml
  • d8117e3 Removed vendor folder
  • 72e1445 Updated test coverage

v0.3.0

04 Apr 15:07
Compare
Choose a tag to compare

Changelog

  • 2a7d472 Add coverage file to tracked files
  • 4bc1f44 Added Apache 2.0 license header to all go files in src folder
  • 2d2e872 Added CodeCov coverage report generation
  • 1bd7147 Added Configuration and Eviction Sections in README.md
  • 0b90c93 Added DEL command for deleting keys from the store
  • 169fa39 Added GetLatestSnapshotTime to EchoVault interface as it's used in the admin module for the LASTSAVE command.
  • 8000cef Added RWMutex to keysWithExpiry in order to improve thread safety
  • f41e2f6 Added RWMutexes in PubSub Subscribe, Unsubscribe, and Channels receiver functions. Implemented test for PUBSUB CHANNELS command handler
  • 82be1f6 Added addedTime to EntryLFU object to control which entry will be removed if access count is the same. If two entries have the same access count, the older entry should be removed first. SetKeyExpiry and GetValue keyspace receiver functions now require context object to be passed. Created adjustMemoryUsage function for key eviction for LFU, LRU, and Random eviction policies. Updated all modules to pass context to SetKeyExpirty and GetValue functions.
  • d1d613d Added api test files
  • e569bf6 Added config flags max-memory and eviction-policy to manage memory usage. Created ParseMemory utility function to parse max-memory value into bytes. Created LFU cache to be used with heap data structure for managing LFU cache.
  • 79d5230 Added directory to codecov github action workflow
  • 08d178b Added error checking on SetValue in module commands
  • 1eebc86 Added godoc commands for keyspace.go
  • 501879d Added godoc commends for api_generic.go functions
  • 35d71a1 Added godoc commends for api_hash.go functions
  • 4055432 Added godoc comment for ReadPubSubMessage function
  • dca58e0 Added godoc comments for api_admin.go functions
  • 4fbabbd Added godoc comments for api_list.go functions
  • 62792a4 Added godoc comments for api_pubsub.go functions
  • 155a1b8 Added godoc comments for api_set.go functions
  • e42582e Added godoc comments for echovault.go exported functions
  • 4001424 Added godoc comments to the api_string.go file
  • 9696827 Added godoc documentation for api_acl.go function
  • 53115c0 Added godocs for sorted set api
  • 04b6144 Added license header to api test files
  • 1016a1b Added license header to api_pubsub.go file
  • 0b9fbb0 Added mutexes for lfu and lru caches on server struct
  • cfe4ae8 Added new code coverage badge from codecov
  • 8d4d6f8 Added punctuation to api_string.go godoc comments
  • 59a03ae Added test for PUBLISH command handler
  • 77300f0 Changed 'value' in list commands' descriptions to 'element' for more clarity.
  • ad6b3b8 Changed StartTCP to startTCP to make it a private function
  • 5c347cb Changed max-memory to uint64. Added TODO commends on how to handle memory checking for key eviction.
  • ea0092e Check for nil rw object in LogStore before attemting a sync
  • 2af4db5 Check if connection in nil before closing in acl module tests
  • ed683ca Commend formatting
  • a1789ad Comment update in config package in pkg folder
  • d7c3509 Created 'constants' package for const.go file and 'types' package for shared and exported types
  • 88a8e2a Created DefaultConfig to be used when embedding echovaule. Moved ACL and PubSub to internal packages with only the associated commands in the modules folder. Initialise ACL and PubSub when creating new EchoVault instance which removed the need to pass WithACL and WithPubSub options.
  • 118e155 Created IsMaxMemoryExceeded utility function that is used to check whether the server has exceeded the max memory. Check whether max memory is exceeded before setting value or creating new key. Return error from SetValue function when max memory is exceeded. This change has been propagated to the aof and snapshot engines as well. Snapshot engine now only accepts SetValue option. No longer does it neet to use CreateKeyAndLock & KeyUnlock functions itself.
  • 74c08a5 Created KeyData type to hold key data value and expireAt in the same map object. Created scaffolding for PERSIST, EXPIRETIME, PEXPIRETIME, TTL, PTTL, EXPIRE, PEXPIRE, EXPIREAT and PEXPIREAT commands
  • 0a70104 Created api_ files in echovault subfolder that will allow us to export easyily usable APIs for embedding Go code
  • b49a0e2 Created command test file in pubsub module
  • 7c39e5f Created commands and config packages in pkg folder for easy import
  • f4d4271 Created compareSlices and compareUsers functions as helpers for comparing slices and users in tests. Implemented tests for creating enabled and disabled users with ACL SETUSER command
  • c611dd6 Created flow for deleting key consistently within cluster.
  • 0e5f8ff Created init function for acl module test suite
  • 1d15b89 Created outward-facing API for hash module commands
  • ede32b4 Created outward-facing API or generic module commands
  • 28dcfd2 Created test file for acl module commands
  • cb13e82 Created test for LLEN API function
  • a644742 Created testing skeleton for ACL module
  • bc42dce Disabled all auth module tests
  • 3dbd356 EchoVault context is now private
  • 57cb8b3 Fixed WithContext option function
  • 9113998 Fixed test error with regards to passing context to mockServer Start method
  • faef3b0 Generate coverage report in go.yml workflow
  • e34ed74 Implemented DeleteKey function to delete keys from data store
  • 97a10e4 Implemented EXPIRTE and PEXPIRE command handler
  • b7b8ecf Implemented PERSIST, EXPIRETIME, PEXPIRETIME, TTL, and PTTL command handlers. Added keyspace function GetExpiry to get expiry time of a given key.
  • d51dfd5 Implemented RWMutex for users list when handling user mutations and auth. Fixed bug where user delete command would delete all the users except the specified one. Implemented test for ACL DELUSER command
  • 8cc8f6c Implemented default KeyLock and KeyRLock timeout of 250 milliseconds when timeout is not provided by the caller.
  • f27a0dd Implemented eviction algorithm that samples a configurable number of keys with TTLs (default 20) at a configurable interval (default 100ms) and deletes the keys that are expired.
  • 10f1aea Implemented handler for EXPIREAT and PEXPIREAT commands
  • 0cd8a4a Implemented locking mechanism for ACL LOAD and ACL SAVE commands
  • b1ddcd1 Implemented outward-facing API for ADMIN module commands. Added Module field to Command and SubCommand structs. Added MODULE filter options to COMMAND LIST command. Added Module field to all existing commands.
  • 6fb6862 Implemented outward-facing API for LIST module commands
  • c56e749 Implemented outward-facing API for Pub/Sub module
  • 7656828 Implemented outward-facing API for SET module commands
  • 6b9db4e Implemented outward-facing API for STRING module commands
  • 682261b Implemented outward-facing API for commands in the ACL module. Excluded the AUTH command as this is only relevant for TCP clients
  • d7fd761 Implemented outward-facing API for sorted set module commands
  • a19bfa8 Implemented rlocking/runlocking of rwmutex in Channel IsActive and NumSubs receiver functions. Implemented PUBSUB NUMPAT handler unit test
  • 1cca650 Implemented test for ACL GETUSER command
  • 78225cd Implemented test for ACL LIST command handler
  • a48b98a Implemented test for ACL WHOAMI command handler
  • 9191d16 Implemented test for AUTH command handler
  • 8fc68a9 Implemented test for new SET command format
  • 5bb2bd1 Implemented tests for ACL SETUSER command handler
  • dbfa398 Implemented tests for SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE, and PUNSUBSCRIBE command handlers
  • f68a369 Implemented tests for all commands handlers in the generic module
  • 8af0937 Implemented tests for list module API
  • f061af6 Implemented tests for sorted set API
  • d08231f Implemented unit test for PUBSUB NUMSUB command handler
  • 42a8ad2 Implemented unit tests for HASH API
  • 0b66936 Implemented unit tests for SET module API
  • ede342a Implemented unit tests for generic module API
  • dea2ef2 Implemented unit tests for string module API
  • 1aa6f87 In generic module test suite, add minites, seconds and milliseconds to the mock time
  • 018aea7 Initialise default IncludedCategories to allCategories("*"). Implemented test for ACL USERS command.
  • c414da1 KeyExists keyspace function now removes the key if the key expiry is in the past. KeyData type moved to utils package to allow sharing between multiple packages. Updated all commands and command tests to pass context object to KeyExists, KeyLock, keyUnlock, KeyRLock, and KeyRUnlock. Create context object for each test in all test suites instead of just passing context.Background() to all functions that accept a context.
  • 1e50cc1 Made ACL and PubSub fields in EchoVault struct private
  • 8017589 Merge branch 'main' into chore/pakage-docs
  • 88a3d8b Merge main
  • 348bae3 Merge pull request #11 from EchoVault/feature/eviction-policy
  • a94ad78 Merge pull request #12 from EchoVault/chore/module-tests
  • b4188a2 Merge pull request #13 from EchoVault/chore/module-tests
  • 38450f1 Merge pull request #14 from EchoVault/chore/license-update
  • 636b335 Merge pull request #15 from EchoVault/feature/embeddable-echovault
  • e3a97c0 Merge pull request #18 from EchoVault/chore/pakage-docs
  • 93bf70f Merge pull request #19 from EchoVault/chore/pakage-docs
  • 97b41da Moved aof and snapshot packages from server folder to src folder. Created new package for evictions
  • 7cec2da Moved aof and snapshot packages to internal folder
  • 5c86fb6 Moved main.go file to cmd subfolder. Renamed src folder to pkg folder as it will contain all the importable package code. Moved config.go to new internals folder
  • e4f4c89 Moved memberlist and raft packages to internal folder
  • bc188cf Moved some types into internal folder as they will do not need to be exported. Changed GetState method to getState to make it private to the echovault package
  • 7fac414 Moved utils.go file to internals folder
  • 78b2e33 Pass config to IsMaxMemoryExceeded
  • 52b39d5 Re-enabled cluster nodes in docker-compose.yml. Created flow to forward key deletion command from non-leader node to leader node. Created flow for propagating key deletion accros...
Read more

v0.2.0

28 Feb 13:10
Compare
Choose a tag to compare

Changelog

  • e18257e Added PUBSUB commands and made pubsub module more compatible with redis-cli client
  • 42154fe Added discord, licence and release badges to README.md
  • c81c322 Added installation instructions to the README.md
  • b9959ed Added redis clients statement in clients section in README.md
  • facdc08 Implemented command handler for COMMAND LIST command
  • 160c701 MGET command now returns RESP nil value for non-existent keys
  • 088e4c2 Made GET, MGET, SET, MSET, SETNX commands compatible with redis client
  • 369aa3b Made hash module more compatible with hash redis-client
  • dbeacc7 Merge pull request #10 from EchoVault/enhancement/redis-client-compatibility
  • fc8d301 Removed Consumer Group in PubSub module and made the module more compatible with redis client
  • 6566bb4 Removed all usages of custion utils.Filter function in favour of built-in slices DeleteFunc. Updated utils.ReadMessage to read with 8192 sized chunks to reduce the risk of running into a blocking read call when the end of the input is reached.
  • 91d96bf Removed extra '\r\n' in admin, set and sorted_set modules
  • 8ca9a77 Removed trailing carriage returns and new lines in command responses to make responses compatible with Redis clients
  • 62ef29c Return empty array for COMMAND DOCS because COMMANDS response triggers error in redis-cli
  • 131f15d Trim byte slice from message read to remove null characters. Add and new line after each command printed to the AOF file
  • 1a4747d Updated GPL badge to v3 and uncommented cluster nodes in docker-compose.yml

v0.1.0

25 Feb 23:02
Compare
Choose a tag to compare

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
  • dd...
Read more