Download
Select the distribution that suits you to evaluate Quine from the list below, then get started building a streaming graph solution with Quine.
Distribution | Requires | Launch Quine |
---|---|---|
Docker File | Docker or Docker Desktop | docker run -p 8080:8080 thatdot/quine |
Executable | Java JRE 11 or newer | java -jar quine-1.7.3.jar |
Source Code | Java 11 or new JDK, sbt, node, and yarn | sbt quine/run |
-
Pre-compiled JAR file
No need to set up a full Scala development environment to run Quine if you already have a Java Runtime Environment (JRE) set up.
-
Docker Container
If you prefer to keep your initial evaluation in a container, we have one already set up for you and ready to go!
-
GitHub Repository
Quine is written in Scala and released as open source. Build Quine from source in your own environment.
Release 1.7.3¶
Enhancements¶
- Add support for modern
SHOW PROCEDURES
syntax via rewrite rule - Add support for sum and avg aggregators with
duration
-typed values - Improve the warning offered when trying to resolve an illegal QuineId and add suggestions for how to fix the query
- Normalize logging and error messages which timeout for ExactlyOnceAsks
- Add timers for ingest query runtime, ingest deserialization runtime and SQ result queue time
- Add timers for node sleeps and node wakes
- Add histogram for property sizes
- Standardize logging framework to slf4j/logback
Bugfixes¶
- Fix "Promise already completed" warning that could occur when sending [ask] messages
- Update unit subqueries to correctly return one row rather than the number of rows from the inner query
- Fix unit subquery scope for side-effect-only subqueries to no longer leak to the higher scope
- Filter ethereum transaction ingest to only use valid transactions
- Fix rare race condition in node messaging
- Account for node lifecycle in node size histograms
- Fix a typo in query API that suppressed user-facing log references
- Fix false-positive "Query cannot end with CALL combined with YIELD" errors
- Fix some scenarios where ingest status displays the wrong value
- Fix NullPointerException that could occur when logging some messages
- Improve resiliency of Standing Query wake-up protocol with slow persistors
Updates¶
- AWS SDK to 2.26.31
- cassandra to 4.18.1
- circe-yaml to 0.16.0
- circe to 3.9.8
- commons-compress to 1.27.1
- dropwizard metrics to 4.2.27
- flatbuffers-java to 24.3.25
- guava to 33.3.0-jre
- kafka-clients to 3.8.0
- logback-classic to 1.5.7
- rocksdbjni to 9.0.0
- schema-registry-serde to 1.1.20
- snappy-java to 1.1.10.6
Release 1.7.2¶
Enhancements¶
- Added log sanitization. This feature suppresses exception logging and hides values that may have been sourced from ingested records or query definitions. This behavior is enabled by default, and may be customized with the
quine.log-config
configuration section. - Added
text.regexReplaceAll
Cypher function for regex-based string substitution - Added function
text.regexGroups
that will, given a regular expression and a string, return all matching capture groups from the string. - Added support for
<duration>.<unit>
and<duration>["<unit">]
syntax in Cypher queries - Added support for constructing duration Cypher values with approximate units, e.g., days
- Updated logo colors in exploration UI
- The REST API documentation UI now makes requests based on relative rather than absolute paths, allowing it to work in more deployment environments
- Added additional logging to alert on issues caused by poor network connection
- Clarified the language in some error messages
- Simplify error formatting in ingest and standing query output streams
- Added additional error handling for certain uses of invalid QuineIds and illegal regular expressions
- Reduced log noise at
DEBUG
log level - Persistor errors that occur during all-node scans will now be reported consistently with all other persistor errors
- Improved error handling for missing file errors in the recipe interpreter and file ingests
Bugfixes¶
- Fixed compilation of
WITH DISTINCT
Cypher query clauses to now properly interpret the returned distinct set in all cases (contributed by @harpocrates) - The example standing query in the API no longer uses the removed
exists(n.property)
syntax - The error message returned by
standing.wiretap
when a standing query is not found now refers to the name argument, rather than the procedure name - MultipleValues standing queries with emitCancellations = false will no longer emit cancellations
- Multiple Values Standing Queries no longer read node labels as a property
Updates¶
- skunk-circe, skunk-core to 0.6.4
- s3, sts to 2.25.70
- scala-java-time to 2.6.0
- pureconfig to 0.17.7
- tapir-json-circe, ... to 1.10.10
- pekko to 1.0.3
- pekko-http-circe to 2.6.0
- protobuf-java to 3.25.4
- circe to 0.14.9
- circe-yaml to 0.15.3
- circe-generic-extras to 0.14.4
- Dropwizard metrics to 4.2.26
- scaffeine to 5.3.0
- commons-codec to 1.17.1
- Removed scala-java8-compat
Release 1.7.0¶
Updates with special concerns¶
MultipleValues standing queries will not migrate from Quine 1.6.4.
If you have any MultipleValues standing queries and you are using RocksDB, your database files will not carry forward.
If you are using MultipleValues standing queries and Cassandra, perform the following steps to remove all MultipleValues data while leaving your graph intact:
- Before shutting down Quine 1.6.4, use the API to delete all MultipleValues standing queries
- After shutting down Quine 1.6.4, but before launching Quine 1.7.0, use cqlsh to
TRUNCATE standing_query_states
- After launching Quine 1.7.0, use the API to recreate all MultipleValues standing queries
Ad-hoc queries now reflect SETs and REMOVEs made during the query
If your ad-hoc (i.e., ingest, Cypher standing query output, or /query/cypher/ POSTed) queries rely on the original "capture state on MATCH" behavior, add a variable with WITH capturing the state you need.
For example, MATCH (n) SET n.x = 2 RETURN n.x AS oldX
becomes MATCH (n) WITH n, n.x AS oldX SET n.x = 2 RETURN oldX
Enhancements¶
- MultipleValues standing queries have been rewritten from the ground up for massive performance gains
- Failing to deserialize an ingested record now logs a warning + INFO message, and resumes the stream, rather than moving the stream to an error state
- Updated the behavior of the SET and REMOVE clause to reflect their expected changes on the in-memory copies of query-related values
- Protobuf message types can now be set by short name or full name
- Added
toProtobuf
Cypher serialization procedure - Protobuf procedures now yield
null
values on failing to serialize/deserialize - Enhanced telemetry with basic feature usage indicators to support prioritizing most-used features
- Simplified and tuned ingest registration logic
Bugfixes¶
- Cassandra persistor now respects the
should-create-tables
configuration option when using only the default namespace - Cypher
log
procedure now accepts log levels in a case-insensitive manner - ANSI control codes are no longer logged except when running a recipe
- Cypher
node.debug
error no longer reports an error on nodes tracking MultipleValues standing queries
Updates¶
- Remove aws-java-sdk-sts
- scalajs to 1.16.0
- kafka-clients to 3.6.2
- amazon-kinesis-client to 2.5.8
- marketplacemetering, s3, sts to 2.25.42
- classgraph to run tests on scala 2.13 and push to main
- scala-parser-combinators to 2.4.0
- circe to 3.9.6
- sbt-paradox to 0.10.7
- commons-io to 2.16.1
- commons-compress to 1.26.1
- commons-text to 1.12.0
- circe to 0.14.7
- logback-classic to 1.5.6
- tapir to 1.10.8
Release 1.6.4¶
Enhancements¶
- Add round() and radians() cypher functions
- Improve error handling in the exploration UI
- Add
parseProtobuf
cypher procedure. This procedure takes 3 arguments: bytes to decode, schema URL, and type name; and yields a single value namedvalue
.
Bugfixes¶
- Unregistered routes will now return a "not found" page instead of an error about a missing query parameter
- The cypher interpreter will no longer report "undefined variable" when returning variables bound to pattern expressions (e.g.,
MATCH p=(a) RETURN p
) - SET n.prop = NULL now correctly removes the property
- Multiple SET clauses in sequence now correctly updates the node's properties instead of replacing them
Updates¶
- cats-effect to 3.5.4
- amazon-kinesis-client to 2.5.7
- guava to 33.1.0-jre
- commons-io to 2.16.0
- webjars-locator to 0.52
- pekko-http-circe to 2.4.0
- logback-classic to 1.5.3
- jedis to 5.1.2
- scala-library to 2.13.13
- Cassandra java-driver to 4.18.0.
- commons-codec to 1.17.0
- tapir to 1.10.6
Release 1.6.2¶
Enhancements¶
- Lowered node wake latency by parallelising journal rehydration
Bugfixes¶
- Webserver bind port or address can now be set without setting both
Updates¶
- Update antlr to 4.13.1
- Update sbt-scalajs, scalajs-compiler, ... to 1.13.2
- Update slinky-core, slinky-web to 0.7.4
- Update jnr-posix to 3.1.19
- Update aws-java-sdk-sts to 1.12.670
- Update mapdb to 3.1.0
- Update rocksdbjni to 8.11.3
- Update pekko-http-circe to 2.3.4
- Update pekko-http, pekko-http-xml to 1.0.1
- Update marketplacemetering, s3, sts to 2.20.162
Release 1.6.1¶
Changes that may require attention:¶
- Standardize the names of the NumberIteratorIngest fields
startAtOffset
andmaximumPerSecond
. If you were previously using the namesstartAt
orthrottlePerSecond
, you will need to update your recipes and API calls
Enhancements¶
- Reintroduce the classic single-line query bar on the Explore UI with SHIFT-ENTER to run a text query
- Add support for arbitrary kafka properties on WriteToKafka Standing Query output via
kafkaProperties
field - Allow Multiple Values Standing Queries to event on arbitrarily-keyed property changes by using a
RETURN properties(n)
rather than having to list all properties manually
Bugfixes:¶
- Reintroduce error messages encountered during Cypher query compilation which were lost as part of the Scala 2.13 migration in 1.6.0
- Improve favicon support on all platforms
Updates:¶
- pekko, pekko-stream, pekko-connectors to 1.0.2
- Fix CVE-2024-25710: add explicit apache commons compress dep 1.26.0
- scalajs-dom to 2.8.0
- commons-codec to 1.16.1
- pureconfig to 0.17.6
- bootstrap to 5.3.3
- sbt, sbt-dependency-tree to 1.9.9
- logback-classic to 1.5.1
- protobuf-java to 3.25.3
- jedis to 5.1.1
- everit-json-schema to 1.14.4
- sttp to 3.9.2
- webjars-locator to 0.50
- pekko-http-circe to 2.1.1
- circe-optics to 0.15.0
- dropwizard metrics to 4.2.25
- guava to 33.0.0-jre
- skunk-circe, skunk-core to 0.6.3
- thatDot-opencypher to 9.1.1
- commons-text to 1.11.0
- msgpack-core to 0.9.8
- cats-effect to 3.5.3
- rocksdbjni to 8.5.4
Release 1.6.0¶
Enhancements¶
- Migrate from Lightbend Akka to Apache Pekko Framework
- Dropped Apache Pulsar ingest support due to Akka dependency
- Migrate from Scala 2.12 to Scala 2.13
- Forbid specifying
JdniLoginModule
as asasl.jaas.config
to avoid CVE-2023-25194 - Limit InfluxDB metrics logging to error
- Added open source telemetry, for more info visit quine.io/telemetry
- Support multiline queries in the Exploration UI
Bugfixes:¶
- Fixed "Run again as text query" button in the results panel in the Exploration UI
Updates:¶
scala-library
2.13 to 2.13.12msgpack-core
to 0.9.6dropwizard metrics-core
,metrics-jmx
,metrics-jvm
to 4.2.20commons-compress
to 1.25.0 to address CVE-2021-35516, CVE-2021-35517, CVE-2021-36090mapdb
to 3.0.10kafka-clients
to 2.7.2avro
to 1.11.3 to address CVE-2023-39410aws-sdk
to 2.20.159guava
to 32.1.3-jrecirce-config
to 0.10.1circe-yaml-v12
to 0.15.1commons-io
to 2.15.1logback-classic
to 1.4.13
Release 1.5.7¶
Enhancements:¶
- SSL is now supported when interacting with Quine in an untrusted environment by using the
SSL_KEYSTORE_PATH
andSSL_KEYSTORE_PASSWORD
environment variables - Add
create.setProperty
procedure to allow setting a property with a dynamic key, dual to accessing a property with square-bracket syntax - Additional performance metrics can be added with
enableDebugMetrics
setting to help diagnose internal messaging and node load/unload throughput
Bugfixes:¶
- Multiple Value Standing Query (MVSQ) will now properly trigger a change when a property is set/unset to
null
Updates:¶
- stoplight elements to v7.12.0
- snakeyaml-engine to 2.7
- logback-classic to 1.4.11
- sts to 2.20.139
- cats-core to 2.10.0
- circe-core, circe-parser, ... to 0.14.6
- msgpack-core to 0.9.5
- scalajs-dom to 2.6.0
- guava to 32.1.2-jre
Release 1.5.6¶
Enhancements¶
- Added support for STS assumed-role authentication to experimental AWS Keyspaces persistor
Bugfixes¶
- Removed "total memory" gauge from metrics dashboard when maximum total memory can't be calculated based on the running JVM
- Fixed a "stream stopped before async invocation was processed" error message that could occur when resuming ingests on startup
Updates¶
- webjars-locator to 0.47
- sbt-jmh to 0.4.5
- guava to 32.0.1-jre
- dropwizard metrics to 4.2.19
- logback-classic to 1.4.8
- scala-library to 2.12.18
- cats-effect to 3.5.1
- scala-collection-compat to 2.11.0
Release 1.5.5¶
Enhancemnts¶
- Ingest status is now preserved across restarts when restore-ingest configuration is set
- Improved error handling within Keyspaces persistor
Bugfixes¶
- Valid Kafka configurations (e.g.,
ssl.truststore.location
) are now accepted by the KafkaIngest stream configuration object - Remove unnecessary log line
Updates¶
- bootstrap to 5.3.0
- flatbuffers-java to 23.5.26
- sttp-client to 5.4.0
- pureconfig to 0.17.4
- commons-io to 2.12.0
- guava to 32.0.0-jre
- scalatest to 3.2.16
- sbt to 1.8.3
Release 1.5.4¶
Temporal types have had a spring cleaning! Time values created in Quine 1.5.3 and earlier (without timezones) are automatically converted to LocalTime values in Quine 1.5.4. No user action is required.
Enhancements¶
- Added support for
localtime
function and values to the Quine graph and Cypher - Updated documentation for Kinesis ingest to reflect the new name "Kinesis Data Streams"
- Technical preview for AWS Keyspaces persistor
- Improved configuration linting and error reporting for Kafka ingest
- Added support for
purgeNode
procedure to RocksDB and MapDB persistors - Added automatic recovery (up to 3 attempts) of ingests that fail to start/restart due to upstream issues
- Simplified
reify.time
-generated nodes to use static labels for easier styling - Improved documentation for administrative APIs
- Added scheduler checkpoint settings
maxBatchSize
andmaxBatchWait
to Kinesis Data Streams ingest
Bugfixes¶
- Resuming a failed ingest now reports an HTTP error instead of timing out
- Time values in the Quine graph now correctly store and use offsets from UTC
- The
date
function now always correctly returns a date instead of a datetime. - Errors that occur while submitting an invalid standing query are now reported as "Bad Request"
Updates¶
- Base docker image to JVM 20
- sbt-scalajs-crossproject to 1.3.1
- scalajs to 1.13.1
- circe to 0.14.5
- pureconfig to 0.17.3
- endpoints4s to 3.8.15
- logback-classic to 1.4.7
- scala-collection-compat to 2.10.0
Release 1.5.3¶
Enhancements¶
- A distinct "advertised"/canonical HTTP address used for self-referencing links may be set via
quine.webserver-advertise
- Added
purgeNode
procedure, which may be used to permanently delete a node and all data owned by that node (including historical) from Quine, including the persistence layer
Bugfixes¶
- Error message from Cypher compilation failures involving
int.add
now report the correct types - Several typos throughout the codebase have been corrected, contributed by @stavares843
- Slack notifications from Standing Queries now render with the intended rich formatting
- API documentation for DebugOps now correctly renders the usage disclaimer for those APIs
Updates¶
- logback-classic to 1.4.6
- akka-http-backend, slf4j-backend to 3.8.14
- dropwizard metrics to 4.2.17
- circe-config to 0.10.0
- memeid4s to 0.8.0
- proto-google-common-protos to 2.14.2
- sbt-assembly to 2.1.1
- flatbuffers-java to 23.3.3
- rocksdbjni to 7.10.2
Release 1.5.2¶
Enhancements¶
- Added first-class support to the Quine engine and the Cypher interpreter for new temporal types:
Date
,Time
,LocalDateTime
, andDuration
- Added
int.add()
(replacing incrementCounter),float.add()
,set.insert()
, andset.union()
procedures for atomically updating properties of different types - Added
castOrNull()
andcastOrThrow()
Cypher functions for providing type hints to the query compiler for values - Replaced remaining uses of
ujson
withcirce
JSON for better support of 64-bit integers - Replaced LiteralOps API with a new DebugOps API, focusing on presenting human-readable versions of node state
- Removed auto-commit option from Kafka ingest API: To continue using autocommit, pass
"autoCommitIntervalMs": 5000
in the kafkaProperties option instead
Bugfixes¶
- Complex
strId()
-based queries are now executable without an all-node scan (contributed by @harpocrates) MERGE
queries now correctly combine the scopes of theirCREATE
andMATCH
possibilities (contributed by @harpocrates)- Log messages from
IngestRoutes
no longer report as being logged by a different class (e.g., "QuineApp")
Updates¶
- flatbuffers-java to 23.1.21
- jquery to 3.6.3
- kafka-clients to 3.3.2
- proguard-base to 7.3.1
- pulsar4s-akka-streams to 2.9.0
- rocksdbjni to 7.9.2
- sbt-jmh to 0.4.4
- scalajs-compiler to 1.13.0
Release 1.5.1¶
Enhancements¶
- Switched JSON parser from
ujson
tocirce
to avoid loss of precision in large integers in standing queries (Further support for large integers coming soon) - REST API documentation style and readability updates
- Added documentation for graph AI use cases
- Improved performance of Cassandra persistor by reducing load and latency during ingest
Bugfixes¶
- Reduced log noise when performing more than 2 operations on a node as part of a single message
Release 1.5.0¶
Enhancements¶
- Many API endpoints now support YAML request bodies: Convenient for copying pipelines from recipes to a Quine server!
- AWS client configurations (SNS, Kinesis, etc) separated "region" from "credentials"
- Added "Graph Algorithms" category to the REST API
- Added
random walk
graph algorithm (compatible with Node2Vec and GraphSAGE walk generation), REST endpoint, and Cypher procedure - Administration REST API documentation style and readability updates
- Non-historical nodes can now be kept awake for a minimum duration after each message
- Kafka ingests may now include a settings block for the Kafka client, e.g., to specify credentials. Contributed by @charliemenke
- No longer require all fields to be specified in recipes, improving readability
- Performance improvements in MapDB, Cassandra, DistinctId standing queries
- Improve indexing of node edge collections for increased query performance
Bugfixes¶
- Switched JSON parser from
ujson
tocirce
to avoid loss of precision in large integers in ingest streams (Further support for large integers coming soon) - Resolved issues with clean shutdown of the Quine application via the API
Release 1.4.2¶
Enhancements¶
- Added canonicalized mapping of QuineIds and DGBs to reduce heap usage
- Simplified node wakeup protocol
- Improved contributor experience when building with node version greater than 16
- Now support amd64 and arm64 architectures for Quine docker image
Bugfixes¶
- Node debug endpoint / procedure now includes all DistinctId localEventIndex entries instead of just one
Release 1.4.1¶
Bugfix¶
- Edge case where Akka complains of an actor name being re-used too quickly is now retried.
Release 1.4.0¶
Enhancements¶
- The
reify.time
procedure now yields only the finest-granularity reified period node for better query ergonomics - Removed
nullary
andunary
locIdFrom
variants to simplifylocIdFrom
usage - Enriched logging in edge cases involving shard resolution
- Restructured ingest streams for better consistency and handling of edge-cases involving charset transcoding
- Optimized storage of
DateTime
to use less space - Simplified node wakeup protocol: edge cases involving simultaneous request to sleep and wake should now be more efficient
- Improved API documentation of ingest streams
- Add notification preview text for rich Slack messages used as Standing Query outputs
- Provide a warning when a full-node scan is detected in ingest query
- Added
text.urlencode
andtext.urldecode
Cypher functions - Added atomic "count" return value to
incrementCounter
procedure - Added support for decoding steps during ingest (base64, zlib, and gzip)
- Standing Queries can now use idFrom-based ID constraints, provided that all arguments to the idFrom are literal values
- Rewrote the serialization, persistence, and message passing system used by DistinctId Standing Queries
- Change default order of node effects to "persister first", applying in-memory effects only after the persistence operation succeeds
- Removed unused / experimental "node merging" behavior
Bugfixes¶
- Cassandra persister batched writes now respect configured timeout and consistency options
- Long-typed QuineIdProviders will now interoperate correctly with the
getHost
procedure - singleton-snapshot and journals may now be enabled at the same time
- Added a heuristic rate limiter to Kinesis ingest streams to improve stability when Quine reads faster than Kinesis can emit
- Improved cluster stability when cluster members experience temporary disconnections
- Improved shutdown behavior in failsafe case
- UUIDv5 and UUIDv3 id providers now generate correctly bit-masked identifiers
- MultipleValues standing queries are now properly restored on nodes where shutdown is started and then cancelled
- Node edge and property counts will now be correctly reflected in the metrics dashboard
- Improved use case for reify time to ensure reified time nodes have all properties set
Updates¶
- Replaced
snakeyaml
withsnakeyaml-engine
, supporting YAML 1.2 - akka to 2.6.20 (contributed by @He-Pin)
- bootstrap to 5.2.2
- cassandra client to 4.15.0
- endpoints4s to 1.8.0
- endpoints4s (akka-http) to 7.0.0
- endpoints4s (openApi) to 4.2.0
- endpoints4s (xhr) to 5.1.0
- jquery to 3.6.1
- netty-nio-client to 2.17.288
- parboiled to 1.4.1
- scalajs to 1.11.0
- rocksdb to 7.6.0
- scalajs-dom to 2.3.0
- flatbuffers-java to 22.10.26
- dropwizard metrics to 4.2.12
- logback to 1.4.4
- apache commons to 1.10.0
- protobuf-java to 3.21.8
- Novelty: graal to 22.2.0
- Memeid4s to 0.7.0
Release 1.3.2¶
Release Quine 1.3.2
Enhancements¶
- Improved logging of error and startup messages
Bugfixes¶
- RocksDB unit tests will now clean up files they make (contributed by @dennylee)
- text.utf8Decode now accepts a 1-argument invocation
Updates¶
- sbt to 1.7.1
- scala-collection-compat to 2.8.1
- scalatest to 3.2.13
Release 1.3.1¶
Enhancements¶
- Added support for
QUINE_DATA
environment variable, which can be set to define the default persistence path. - Improved consistency of prose in WARN and INFO log messages
- Improved Cypher query execution time
Bugfixes¶
- Fixed an issue where messages output while running a recipe could be duplicated
Updates¶
- classgraph to 4.8.149
- sbt to 1.7.0
- scala-collection-compat to 2.8.0
- scala-js-macrotask-executor to 1.1.0
- scopt to 4.1.0
- memeid4s to 0.6.0
- msgpack-core to 0.9.3
Release 1.3.0¶
Features¶
- Added a pagination (SKIP/LIMIT) optimizer to the Cypher query engine for historical queries with no unaliased values
- Enabled journals by default when running a recipe
- Added support for using the Stoplight Elements interactive documentation behind an authentication proxy
Bugfixes¶
- Fixed an issue where waking up a node would not correctly re-register its standing queries, potentially resulting in dropped results
- Fixed an issue where Cypher subqueries could be executed with too many variables in scope
- Fixed an issue where some Cypher constructs (notably: variable-length relationship patterns) could be executed with too many variables in scope
- Fixed a documentation rendering issue for Standing Query Outputs
- Renamed the metric "persistors.snapshot-sizes" to "persistor.snapshot-sizes" for consistency
- Fixed the behavior of DISTINCT during Cypher query execution, making it work correctly with SKIP and/or LIMIT
Misc¶
- Simplified startup log messages
- Update some error messages to use the correct name for DistinctId Standing Queries
- Improved UX for API-issued historical queries near the present time
- Removed logback-config logging library: to configure logging, use standard logback.xml
- Added timestamps to node journal events in debug.node and node debug APIs
- Removed StandingQueryPattern.Graph API
- Improved distribution of randomly-generated partitioned IDs
- Documented metrics endpoint in openapi specification
- Added peephole optimization for property value comparsion
- Refactored to simplify DomainGraphBranch representation
Updates¶
- rocksdbjni to 7.3.1
- msgpack-core to 0.9.2
- cats-core to 2.8.0
- metrics to 4.2.10
- scala-library to 2.12.16
- sbt-paradox to 0.10.2
- sbt-scalafix to 0.10.1
- scala-java-time to 2.4.0
Release 1.2.1¶
Features¶
- Added
debug.sleep
Cypher procedure to request a node sleep - Replaced swagger-ui REST API viewer with Stoplight Elements
- Integrated recipe-like command-line arguments with main configuration, allowing command-line arguments when running the main Quine application and reflecting those settings in the config REST API
Bugfixes¶
- Fixed a bug where some node journal events were not deduplicated, improving throughput and reducing disk usage
- Fixed a minor typo in command-line argument parsing
- VOID procedures called as the last clause in a Cypher query now return 0 rows instead of 1 empty row
Misc¶
- Switched to target JRE 11 during compilation, allowing more runtime optimizations
- Made process ID lookup more reliable cross-platform
Updates¶
- rocksdbjni to 7.2.2
Release 1.2.0¶
This release brings several API improvements, new Cypher query features, and persistence backend bugfixes and optimizations to better support supernodes and other extreme-scale datasets. Some of these changes affect the data format on disk, and accordingly data from prior versions (<= 1.1.2) can not be used with Quine 1.2.0 without migration. Furthermore, this release increases the minimum supported Java version to 11.
Features¶
- Add
reify.time
, a Cypher procedure to generate a uniform structured representation of timestamp data within the graph, to make time-related data analysis via Standing Queries easier and more consistent - Add a REST API endpoint to request a specific node save a snapshot and go to sleep
- Added support for Cypher subqueries via the
CALL {}
syntax - EXPLAINed query ASTs will now be logged at debug level, if enabled
- Improved serialization for nodes with an extremely large edge and/or property counts in the persistence backend
- Nodes with an extremely large edge and/or property count can now be correctly accessed via the Literal Operations REST APIs
- Iteration and sort order of Map-type values in Cypher queries are handled consistently
- Add a configuration option for writing updates to disk before applying effects in-memory:
quine.persistence.effect-order
- Add a startup check to verify that Cassandra's configuration matches the provided Quine configuration, warning if there is a mismatch
- Calling the debug API on a node in a historical query now only includes journal events up to the time of the historical query
Bugfixes¶
- Application start up can no longer log an opaque warning like "Current state = CODING, previous state = FLUSHED"
- Setting snapshot-singleton=true, snapshot-schedule=on-node-update, and journal-enabled=false no longer causes the most recent event on a node to be dropped
- Map-type values in Cypher hash to a consistent value, independent of how they were constructed
- Accessing nodes just as they fall out of the cache can no longer cause the system to enter a failsafe mode
- Historical queries that restore journals with noncommutative effects after a snapshot from Cassandra apply updates in order
- Fix an issue with RocksDB where some Standing Query states weren’t restored
- Added a minimum header width to recipe status query output
- Fix an issue where standing queries were not properly restored on startup
Misc¶
- Remove support for DistinctId queries that do not specify a
DISTINCT
keyword - Remove support for
toInt
in Cypher queries (usetoInteger
instead) - Remove support for
filter
andextract
in Cypher queries (use list comprehensions instead) - ID values returned via the exploration UI are now pretty-printed
- Use Cypher for query UI edge queries for better performance and fewer timeouts when querying supernodes
- Make recipes and example queries more consistent in styling
- Make use of
datetime()
in Apache log recipe to parse timestamps - When the system clock moves backwards, Quine handles the issue transparently. Change the log level for this occasion from
warn
toinfo
. - Rename
executionGuarantee
parameter on the CypherQuery Standing Query Output toshouldRetry
, and set the default to true - Increase resilience of persistence operations in deployments with unreliable persistors
- Improve performance of historical queries involving nodes with many edges
- Add persistor exceptions, including timeouts, to the list of exception types that are retried for ingest queries and when
shouldRetry = true
- Rename Cassandra store options insert-time and select-timeout to write-timeout and read-timeout, respectively
Updates¶
- akka-http, akka-http-xml to 10.2.9
- protobuf-java to 3.20.0
- rocksdbjni to 7.0.3
- ujson, upickle to 1.6.0
- shapeless to 2.3.9
- memeid4s to 0.5.0
- scalajs to 1.10.0
- scalatest to 3.2.12
- scalacheck to 1.16.0
- sbt-scalafix to 0.10.0
- classgraph to 4.8.146
Release 1.1.2¶
Features¶
- Add support for additional Cypher aggregation functions: stDev, stDevP, percentileCont, and percentileDisc (#1629)
- Add an option to retry CypherQuery type Standing Query outputs (#1642)
- Add support for RocksDB on M1 Macs (#1659)
- Add a metric for "shared.valve.ingest" the "gauges" section of the
GET /api/v1/admin/metrics
API endpoint to report the backpressured status of ingest streams (#1653) - Report all recipe substitution errors at once (#1650)
Bugfixes¶
- Remove references to an endpoint that no longer exists (#1619)
- Retry loading application state in case of persistor failure (#1631)
- Print live-updating status messages for Recipes in a consistent order (#1609)
- Remove a duplicate copy of labels in certain queries for nodes (#1636)
- Enable ingest to recover from temporary failures (eg as caused by a flaky network) (#1627)
Misc¶
- Rename "importers" package to "ingest" (#1621)
- Remove unused fields from build info API endpoint (#1554)
- Add additional context to some log messages (#1639)
- Log a warning when a node approaches becoming a supernode (#1641)
- Improve performance of some API endpoints (#1612)
- Update Akka version to 2.6.19 (#1656)
Release 1.1.0¶
Features¶
- Add Websockets ingest adapter
- Add stdin ingest adapter
- Add pretty-printing of Status Query results to Recipe interpreter
- Add a "Run again as text query" link to the Query UI
- Add a static check to the Cypher query planner to identify queries which cannot fail
Bugfixes¶
- Fix a race condition in the REST API which could cause multiple simultaneous API calls to report incorrect status, even when the system behaves correctly
- Fix cross-application config loading and re-add clustering config to Quine Enterprise
- Add extra checks to ensure failure to wake up a node does not leave the system in an inconsistent state
- Fixed a Cypher bug involving spurious errors during UDF compilation
Misc¶
- Added OSS CI
- Fix 2.13 build for projects with 2.13 cross build
- Fix a typo
- Dependency updates: webjars-locator to 0.45; slinky to 0.7.2; classgraph to 4.8.141; akka-http, akka-http-xml to 10.2.8; scalajs to 1.9.0; sbt-buildinfo to 0.11.0; sbt-assembly to 1.2.0; proguard-base to 7.2.1
Release 1.0.0¶
Initial release https://quine.io