Cursusdb Versions Save

CursusDB is an open-source distributed in-memory yet persisted document oriented database system with real time capabilities.

v2.3.9

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.9

🟢 NO BREAKING CHANGES

🔥Features & Hot Fixes 🔥

  • When multiple connections inserting the same document there would be duplicates because of locking logic within the cluster. This has been corrected. There is only one way to do this currently being this is a distributed system. Locking on those inserts so the search and insert can complete before the next if uniqueness if required. Take this example:
package main

import (
	"fmt"
	cursusdbgo "github.com/cursusdb/cursusdb-go"
	"sync"
	"time"
)

func main() {
	wg := &sync.WaitGroup{}
	for i := 0; i < 4; i++ { // Create 4 client connections in parallel
		wg.Add(1)
		go func(wgg *sync.WaitGroup) {
			defer wgg.Done()
			var cursusdbc *cursusdbgo.Client

			cursusdbc = &cursusdbgo.Client{
				TLS:                false,
				ClusterHost:        "0.0.0.0",
				ClusterPort:        7681,
				Username:           "test",
				Password:           "test",
				ClusterReadTimeout: time.Now().Add(time.Second * 60),
			}

			err := cursusdbc.Connect()
			if err != nil {
				fmt.Println(err.Error())
				return
			}

			res, err := cursusdbc.Query(fmt.Sprintf(`insert into test({"x!": 33});`)) // Just an example
			if err != nil {
				fmt.Println(err.Error())
				return
			}
			fmt.Println(res)

			cursusdbc.Close()

		}(wg)
	}

	wg.Wait()
}
 

Results:

{"collection":"test","insert":{"$id":"065efc39-2dcb-4a92-bb32-2a8b7b3a8bed","x":33},"message":"Document inserted successfully.","statusCode":2000}
{"message":"Document already exists.","statusCode":4004}
{"message":"Document already exists.","statusCode":4004}
{"message":"Document already exists.","statusCode":4004}

This is the way it's supposed to work. Regardless of it being concurrent, there has to be reliability in this regard hence the new lock.

v2.3.8

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.8

There was a v2.3.7 but there wasn't anything astronomically changed. Just added cluster logic to not allow multi-insert.

🟢 NO BREAKING CHANGES

⚙️ Corrections ⚙️

  • Top to middle, bottom to middle search corrected for large data. There was an issue found with placement of Search() function within nodes placements. This has been corrected and thoroughly tested with 60 to 1million document collections.

v2.3.6

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.6

🟢 NO BREAKING CHANGES

🔥NEW FEATURES🔥

  • You can now update an array within a document like so:
update 1 in test where firstName = 'Alex' set interests = ["cars","programming"];
[{"127.0.0.1:7682": {"collection":"test","message":"1 Document(s) updated successfully.","statusCode":2000,"updated":[{"$id":"a544de0a-166b-4340-9956-0db0e9f4647c","firstName":"Alex","interests":["cars","programming"],"lastName":"Jones"}]}}]

New status codes for implementation:

  • 4032 Invalid set array values (with description)

🧪 This update to CDQL has been added to the E2E as a test case as well, ✅ passed before release

..
✅ PASS UPDATE ALL FROM COLL WITH CONDITIONS AND MULTI SET WITH ARRAY SET
..

v2.3.5

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.5

🟢 NO BREAKING CHANGES

⚙️ Adjustments ⚙️

  • Node to catch SIGINT, SIGTERM, SIGKILL, SIGQUIT, and SIGABRT. If we don't catch usual signals you will not get persisted data to disk in all cases. Testing: Get your nodes PID lsof -i :7682 kill -6 NODEPID # is SIGABRT kill -3 NODEPID # is SIGQUIT kill -9 NODEPID # is SIGKILL kill -15 NODEPID # is SIGTERM kill -2 NODEPID # is SIGINT

You need to start then kill, check client, start kill, check client. So I usually check my actual collection and documents. If say you killed and the node wasn't handling -9 then you would get no persisted data. If there is a signal missing please do let me know.

Node on these signals will persist data.

v2.3.4

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.4

🟢 NO BREAKING CHANGES

⚙️ Adjustments ⚙️

  • Windows condition considerations for backup directory configuration. I.e '.dir/file' OR '.dir\\file'

v2.3.3

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.3

🟢 NO BREAKING CHANGES

⚙️ Adjustments ⚙️

  • Node and cluster to be able to read from no terminal.
  • Cluster to sort on join-responses.

v2.3.2

4 months ago

CursusDB Cluster and Node Bundle Stable v2.3.2

🟢 NO BREAKING CHANGES

After a lot of action on Reddit I've implemented what I've learned.

  • Reserved keys and symbols logic cut down to quarter of the size.
  • Main method logic split into multiple methods with error handling for tests.
  • Put back all tests for cluster and node
  • Increase on .qqueue file sync wait time to 70ms

Thank you to those whom went crazy at me, it was a good rustle and tustle but not between siblings but Engineers!

v2.3.1

4 months ago

CursusDB Cluster & Node Bundle v2.3.1 STABLE

🟢 NO BREAKING CHANGES

Just updated status code 120s wording in this patch. It bothered me.

BEFORE
[ERROR] StartRunQueryQueue(): 120 Could not open/create query queue file open .qqueue: no such file or directory

AFTER
[ERROR] StartRunQueryQueue(): 120 No .qqueue file found.  Possibly first run, if so the node will create the .qqueue file after run of this method.

v2.3.0

4 months ago

CursusDB Cluster & Node Bundle v2.3.0 STABLE

🟢 NO BREAKING CHANGES

🔥 New Features 🔥

  • Nodes to now keep track of unprocessed queries/txns and rerun if need be. This is for failure or crisis scenarios. New Status Codes( to go along with implementation ):
  • 120 - Could not open/create query queue file (with description)
  • 502 - Node could not recover query queue
  • 503 - Could not dial self to requeue queries (with description)
  • 504 - Could not commit to queued query/transaction
  • 505 - n recovered and processed from .qqueue
  • 507 - Error loading X509 key pair (with description)

v2.2.0

4 months ago

CursusDB Cluster & Node Bundle v2.2.0 STABLE

🟢 NO BREAKING CHANGES

🔧Corrections🔧

  • ConnectToNodes TLS logic should use secure connection initially after configuring.
  • LostReconnect TLS logic should use secure connection initially after configuring.
  • ConnectToObservers TLS logic should use secure connection initially after configuring.
  • LostReconnectObservers TLS logic should use secure connection initially after configuring.
  • Fix insertions with values containing % symbols. insert into test({"x": "%%Hello%"}); would cause (MISSING) to be suffixed in any return value. This has been corrected for all actions and tested through an Observer as well.