{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":63110867,"defaultBranch":"development","name":"typedb","ownerLogin":"vaticle","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-07-11T23:59:57.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/10490615?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717168091.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"126f44c45cd6e14c2a0bdd9844b66462993dafb7","ref":"refs/heads/test-dev-mode","pushedAt":"2024-05-31T15:08:11.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"farost","name":"Georgii Novoselov","path":"/farost","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22564079?s=80&v=4"},"commit":{"message":"Add circleci jobs for the test run","shortMessageHtmlLink":"Add circleci jobs for the test run"}},{"before":"a51a08ed74cd3db5fc29d0de71029f0310abdeb2","after":"03215e4b558214d864d55abc679ee8ab8cd6446d","ref":"refs/heads/development","pushedAt":"2024-05-31T14:26:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Add development-mode for local and CI set ups (#7074)\n\n## Usage and product changes\r\n### development-mode\r\nWe add a new server's config parameter called `development-mode.enable`.\r\nThis parameter can be used to separate real \"release\" application runs\r\nfrom our testing.\r\n\r\nIn the future, this parameter can influence many different sides of the\r\nserver (logging settings, networking behavior?.., anything we want), but\r\nthe only current purpose of this field is to **completely** turn off\r\ndiagnostics and error reporting:\r\n* sentry;\r\n* diagnostics.\r\n\r\n`development-mode.enable` is an optional parameter, and the absence of\r\nit in the config is equivalent to `development-mode.enable=false`. It is\r\nexpected to be set to `true` for all the `config.yml` files used by\r\nlocal environments, tests, and snapshots.\r\n\r\n### --//server:config=[development/release] Bazel flag\r\nWe add a new Bazel build flag that helps choose the server configuration\r\nfor all the build jobs, addressing the newly added\r\n`development-mode.enable` option.\r\n \r\nExample of a release configuration build:\r\n```\r\nbazel build --//server:config=release //server:assemble-mac-x86_64-zip\r\n```\r\nExample of a development configuration build:\r\n```\r\nbazel build //server:assemble-mac-x86_64-zip\r\nbazel build --//server:config=development //server:assemble-mac-x86_64-zip\r\n```\r\n\r\n### deployment-id\r\nWe remove `deployment-id` from the `typedb` config as it makes sense\r\nonly for `Cloud` servers. Suppose it was set in anyone's config before.\r\nIn that case, the `deployment-id` value will be forcefully set to\r\n`server-id`, changing its previous manually set value.\r\n\r\nIt means that all the previous versions of `TypeDB Core` diagnostics\r\nsubmissions with different `server-id` and `deployment-id` (not expected\r\nto be higher than 0 - 10 servers) will possibly want to change the\r\n`deployment-id` in the database to avoid misleading query results.\r\n\r\n## Implementation\r\n### development-mode\r\nWe add new `Optional` `KeyValue`s for `YAMLParser`, acting exactly like\r\n`Predefined` config options, but letting the configuration miss the key\r\ncompletely, setting its values to defaults inside the code. This way,\r\ndeclaring\r\n```\r\nKeyValue.Optional developmentMode = optional(...);\r\n``` \r\nlets us set `development-mode.enable` to `true` this way:\r\n```\r\nvaticle-factory: # any other option\r\n enable: false # any value\r\n\r\ndevelopment-mode:\r\n enable: true \r\n# end of config\r\n```\r\nand set `development-mode.enable` to `false` in these two ways:\r\n```\r\nvaticle-factory: # any other option\r\n enable: false # any value\r\n\r\ndevelopment-mode:\r\n enable: false \r\n# end of config\r\n```\r\n```\r\nvaticle-factory: # any other option\r\n enable: false # any value\r\n\r\n# end of config\r\n```\r\n\r\nThis flag is still available for CLI manual overrides. \r\n\r\nFor `TypeDBCoreRunner` uses, this flag is forcefully set to `true`, not\r\nrespecting the provided `config.yml`. However, it's possible to override\r\nthis flag by passing it in the constructor if the runner user really\r\nwants to do it.\r\n\r\n### --//server:config=[development/release] Bazel flag\r\nThis flag affects all the targets that depend on the configuration file,\r\nincluding transitive dependencies (e.g. creating an archive of the\r\nserver's library).\r\nIt only accepts two values. Providing a wrong value leads to an explicit\r\nand specific build error.\r\n\r\n**NOTE: This is a Bazel flag, so it needs to be specified before the\r\n`--` for application flags!**\r\nFor example, this works:\r\n```\r\nbazel run --//server:config=release --define version=$(cat VERSION) //:deploy-linux-x86_64-targz -- release\r\n```\r\nThis does not:\r\n```\r\nbazel run --define version=$(cat VERSION) //:deploy-linux-x86_64-targz -- release --//server:config=release\r\n```","shortMessageHtmlLink":"Add development-mode for local and CI set ups (#7074)"}},{"before":"52f3874d683a7bcc061872c0b105510f10d0b810","after":"5a0989a9666abb5790e8f64baefc9bfbe97d6125","ref":"refs/heads/3.0","pushedAt":"2024-05-31T13:38:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Patterns (#7078)\n\n## Usage and product changes\r\n\r\nWe introduce the `//ir` package, which contains the initial design for\r\nthe new intermediate-representation (IR) for patterns and functions. We\r\nalso introduce the idea of intermediate representation of `Program`,\r\nwhich will hold the entry point pattern and all required functions -\r\nthese can all have type inference and optimisation passes applied\r\ntogether.\r\n\r\nVariable categorisation, type inference, and \"compiler\" optimisation\r\npasses will live in the `//ir` package.\r\n\r\nWe also place packages and mostly empty modules for `//query`,\r\n`//answer` and `//function`.\r\nWe aim to have the following dependency graph:\r\n\r\n```\r\nQuery -> Function, IR, Answer, (Executor - not introduced yet), Concept\r\nFunction -> IR (maybe Answer?)\r\nIR -> Concept\r\n(Executor -> IR, Answer, Concept)\r\n```\r\n\r\nIn other words, a Query Manager will create an IR `Program` for the\r\nquery and invoked functions, and apply type inference and any 'compiler'\r\noptimisation passes. This IR will then be handed over to\r\ntraversal/executor to query plan, and execute (Query plan + IR).\r\n\r\n### IR design\r\n\r\nThe IR is build around the idea of a Functional Blocks. The `Program` is\r\na functional block, as well as each `FunctionIR` it conatins. A\r\nFunctional Block consists of a Pattern along with any Modifiers.\r\n\r\nA Pattern is a destructured IR of TypeQL. We will aim to break down all\r\noperations into their simplest form:\r\n```\r\n$x has name \"john\"\r\n->\r\n$x has $1\r\n$1 isa $2\r\n$2 type name\r\n$1 == \"john\"\r\n```\r\nor\r\n```\r\n$r ($x, $y, friend: $z) isa friendship;\r\n->\r\n$r isa $t\r\n$t type friendship\r\n$r roleplayer $x\r\n$r roleplayer $y\r\n$r roleplayer $z (role: $1)\r\n$1 sub friendship:friend\r\n```\r\n\r\nWe also remove all names from the IR, using a numbering scheme for\r\nvariables, and keeping a mapping from variable to Name in a shared\r\nPatternContext. PatternContext is a hidden construct, but helps with\r\ntracking variable declarations, validation, etc.","shortMessageHtmlLink":"Patterns (#7078)"}},{"before":"70a8f9e6b129764ae00ca1f02fc2b76d3ee952f4","after":null,"ref":"refs/heads/new-readme","pushedAt":"2024-05-31T08:53:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"haikalpribadi","name":"Haikal Pribadi","path":"/haikalpribadi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/567679?s=80&v=4"}},{"before":"dfb01e0eca8407724c52a8d1da2dc789d6142dca","after":"a51a08ed74cd3db5fc29d0de71029f0310abdeb2","ref":"refs/heads/development","pushedAt":"2024-05-31T08:53:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"haikalpribadi","name":"Haikal Pribadi","path":"/haikalpribadi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/567679?s=80&v=4"},"commit":{"message":"Updated readme (#7061)\n\nUpdated readme to align with new messaging.\r\n\r\n---------\r\n\r\nCo-authored-by: Christoph Dorn ","shortMessageHtmlLink":"Updated readme (#7061)"}},{"before":"b002e97e903989a569da4a4cbbaad48e32d09dff","after":"52f3874d683a7bcc061872c0b105510f10d0b810","ref":"refs/heads/3.0","pushedAt":"2024-05-30T15:19:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krishnangovindraj","name":"Krishnan Govindraj","path":"/krishnangovindraj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4918770?s=80&v=4"},"commit":{"message":"Fix checkstyle coverage","shortMessageHtmlLink":"Fix checkstyle coverage"}},{"before":"273b03210c433da122648cb1d8ec0d066606d804","after":"b002e97e903989a569da4a4cbbaad48e32d09dff","ref":"refs/heads/3.0","pushedAt":"2024-05-30T15:10:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"krishnangovindraj","name":"Krishnan Govindraj","path":"/krishnangovindraj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4918770?s=80&v=4"},"commit":{"message":"Refactors Type concept's interaction with encoding to be through 'EncodableX' traits (#7076)\n\n## Usage and product changes\r\nWe refactor the encoding package to replace the TypeVertex/TypeEdge/TypeVertexProperty/TypeEdgeProperty constructor methods ( build_X_* new_X_* , build_prefix_* etc) with 'TypeXEncoding' traits. \r\n\r\nThe TypeXPropertyEncoding traits include build & decode methods for the value type of the property. This organises scattered encoding/decoding logic across TypeManager & free serialize/deserialize methods.\r\n\r\nThere are also some elements of schema validation introduced.\r\n\r\n## Implementation\r\n\r\n#### The TypeXEncoding traits\r\nThe TypeVertex constructors for EntityType goes from the macro generated methods:\r\n```\r\n\r\ntype_vertex_constructors!(\r\n new_vertex_entity_type,\r\n build_vertex_entity_type,\r\n build_vertex_entity_type_prefix,\r\n is_vertex_entity_type,\r\n Prefix::VertexEntityType\r\n);\r\n```\r\n\r\nto a `TypeVertexEncoding` trait implementation + an implementation for EntityType:\r\n\r\n```\r\n// Trait:\r\n// This had to be split in two to support `ObjectType`s\r\npub trait TypeVertexEncoding<'a> : Sized {\r\n\r\n fn from_vertex(vertex: TypeVertex<'a>) -> Result;\r\n\r\n fn from_bytes(bytes: Bytes<'a, BUFFER_KEY_INLINE>) -> Result {\r\n Self::from_vertex(TypeVertex::new(bytes))\r\n }\r\n\r\n fn into_vertex(self) -> TypeVertex<'a>;\r\n}\r\n\r\npub trait PrefixedTypeVertexEncoding<'a> : TypeVertexEncoding<'a>{\r\n const PREFIX: Prefix;\r\n\r\n fn build_from_type_id(type_id: TypeID) -> Self {\r\n Self::from_vertex(TypeVertex::build(Self::PREFIX.prefix_id(), type_id)).unwrap()\r\n }\r\n\r\n fn prefix_for_kind() -> StorageKey<'static, { TypeVertex::LENGTH_PREFIX }> {\r\n build_type_vertex_prefix_key(Self::PREFIX)\r\n }\r\n\r\n fn is_decodable_from_key(key: StorageKeyReference<'_>) -> bool {\r\n key.keyspace_id() == EncodingKeyspace::Schema.id() &&\r\n Self::is_decodable_from(Bytes::Reference(key.byte_ref()))\r\n }\r\n\r\n fn is_decodable_from(bytes: Bytes<'_, BUFFER_KEY_INLINE>) -> bool {\r\n bytes.length() == TypeVertex::LENGTH\r\n && TypeVertex::new(bytes).prefix() == Self::PREFIX\r\n }\r\n}\r\n\r\n// Implementation:\r\nimpl <'a> PrefixedTypeVertexEncoding<'a> for EntityType<'a> {\r\n const PREFIX: Prefix = VertexEntityType;\r\n}\r\nimpl<'a> TypeVertexEncoding<'a> for EntityType<'a> {\r\n fn from_vertex(vertex: TypeVertex<'a>) -> Result {\r\n debug_assert!(Self::PREFIX == VertexEntityType);\r\n if vertex.prefix() != Prefix::VertexEntityType {\r\n Err(UnexpectedPrefix { expected_prefix: Prefix::VertexEntityType, actual_prefix: vertex.prefix() })\r\n } else {\r\n Ok(EntityType { vertex })\r\n }\r\n }\r\n\r\n fn into_vertex(self) -> TypeVertex<'a> {\r\n self.vertex\r\n }\r\n}\r\n```\r\n\r\n#### Example of the encode/decode methods for a property value:\r\n```\r\nimpl<'a> TypeVertexPropertyEncoding<'a> for Label<'a> {\r\n const INFIX: Infix = Infix::PropertyLabel;\r\n\r\n fn from_value_bytes<'b>(value: ByteReference<'b>) -> Self {\r\n let string_bytes = StringBytes::new(Bytes::::Reference(value));\r\n Label::parse_from(string_bytes)\r\n }\r\n\r\n fn to_value_bytes(self) -> Option> {\r\n Some(Bytes::Array(ByteArray::from(self.scoped_name().bytes())))\r\n }\r\n}\r\n\r\n```","shortMessageHtmlLink":"Refactors Type concept's interaction with encoding to be through 'Enc…"}},{"before":"67149e1f64387c4239050435ada2d9f2c6395f70","after":"273b03210c433da122648cb1d8ec0d066606d804","ref":"refs/heads/3.0","pushedAt":"2024-05-30T13:22:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmitrii-ubskii","name":"Dmitrii Ubskii","path":"/dmitrii-ubskii","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18616863?s=80&v=4"},"commit":{"message":"Data validation on commit + new value types: duration and date time with TZ (#7077)","shortMessageHtmlLink":"Data validation on commit + new value types: duration and date time w…"}},{"before":"b7e80e9c6c4639e300f002861a49c7f379e769c3","after":"67149e1f64387c4239050435ada2d9f2c6395f70","ref":"refs/heads/3.0","pushedAt":"2024-05-30T10:12:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Outline of structs as a general 'definition' system (#7069)\n\n## Usage and product changes\r\n\r\nWe introduce the architecture around structs definitions, and\r\ndefinitions in general.\r\n\r\nThe idea of a `definition` is that it is a general schema construct\r\noutside the regular `thing` and `type` system - this will initially be\r\nused for structs and functions.\r\n\r\nDefinitions are interesting because their interesting payload is in the\r\nvalue, not the key. However, the key contains the ID of the definition.\r\nAs a result, you can consider the new `DefinitionKey` to be analogous to\r\n`TypeVertex`, but the interesting data structure is the\r\n`StructDefinition`, which serialises a struct's content.\r\n\r\nIn doing this, we also realise that `ValueType` must encompass the\r\nbuilt-in value type category, plus the ID of the struct definition, and\r\ncreate a new `ValueTypeCategory` which can map to a Prefix and doesn't\r\ncontain the ID of struct definitions. Lastly, we create a the serialised\r\nform of `ValueTypeBytes`, which is used as the property of an attribute\r\ntype's value type, including the definition ID if it exists.\r\n\r\n\r\n### What isn't implemented yet:\r\n\r\n1. The indexing + retrieval by name of value types through the\r\nTypeManager\r\n2. Serialisation of `StructDefinition`\r\n3. The data insertion and deletion pattern of struct instantiations","shortMessageHtmlLink":"Outline of structs as a general 'definition' system (#7069)"}},{"before":"5bc66a8afc8d4a9c85f70ede9e6d77277dc40f71","after":"b7e80e9c6c4639e300f002861a49c7f379e769c3","ref":"refs/heads/3.0","pushedAt":"2024-05-29T17:06:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmitrii-ubskii","name":"Dmitrii Ubskii","path":"/dmitrii-ubskii","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18616863?s=80&v=4"},"commit":{"message":"Switch from SpeeDB to RocksDB (#7075)","shortMessageHtmlLink":"Switch from SpeeDB to RocksDB (#7075)"}},{"before":"46aa2274fcf2d368b355e5fd9e853f6d10479d0a","after":"5bc66a8afc8d4a9c85f70ede9e6d77277dc40f71","ref":"refs/heads/3.0","pushedAt":"2024-05-24T11:23:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmitrii-ubskii","name":"Dmitrii Ubskii","path":"/dmitrii-ubskii","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18616863?s=80&v=4"},"commit":{"message":"Lending iterator (#7073)","shortMessageHtmlLink":"Lending iterator (#7073)"}},{"before":"d7aecf46e38a1ce3242d86d4f00532e29aeca7c8","after":"cd9aa580ffa06e4f2c7c743b6ccd79eb6fb115a8","ref":"refs/heads/master","pushedAt":"2024-05-22T10:13:32.000Z","pushType":"pr_merge","commitsCount":9,"pusher":{"login":"vaticle-bot","name":"TypeDB Bot","path":"/vaticle-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84574929?s=80&v=4"},"commit":{"message":"Merge for 2.28.2-rc1 release (#7072)\n\n## Usage and product changes\r\nWe merge development into master for 2.28.2-rc1 release.","shortMessageHtmlLink":"Merge for 2.28.2-rc1 release (#7072)"}},{"before":"7a3cf4163083a75d2abeefd0a9b79c4864c3315d","after":"dfb01e0eca8407724c52a8d1da2dc789d6142dca","ref":"refs/heads/development","pushedAt":"2024-05-21T17:45:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"vaticle-bot","name":"TypeDB Bot","path":"/vaticle-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84574929?s=80&v=4"},"commit":{"message":"Update VERSION to 2.28.2-rc1 and create release notes (#7071)\n\n## Usage and product changes\r\nUpdate VERSION to 2.28.2-rc1 and create release notes","shortMessageHtmlLink":"Update VERSION to 2.28.2-rc1 and create release notes (#7071)"}},{"before":"de51caf0e6e497707d3b719605c693d35bd10d80","after":null,"ref":"refs/heads/test-diagnostics-ci","pushedAt":"2024-05-21T15:49:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"farost","name":"Georgii Novoselov","path":"/farost","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22564079?s=80&v=4"}},{"before":null,"after":"de51caf0e6e497707d3b719605c693d35bd10d80","ref":"refs/heads/test-diagnostics-ci","pushedAt":"2024-05-21T15:49:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"farost","name":"Georgii Novoselov","path":"/farost","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22564079?s=80&v=4"},"commit":{"message":"Make branch running all CIs and pushing to diagnostics.typedb.dev","shortMessageHtmlLink":"Make branch running all CIs and pushing to diagnostics.typedb.dev"}},{"before":"de51caf0e6e497707d3b719605c693d35bd10d80","after":null,"ref":"refs/heads/test-diagnostics-ci","pushedAt":"2024-05-21T15:48:55.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"farost","name":"Georgii Novoselov","path":"/farost","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22564079?s=80&v=4"}},{"before":"042cdb2e93528aa874ab10e30119c6a2f31a9cb5","after":"7a3cf4163083a75d2abeefd0a9b79c4864c3315d","ref":"refs/heads/development","pushedAt":"2024-05-20T14:19:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Update diagnostics service to version 1 (#7059)\n\n## Usage and product changes\r\nWe introduce an updated version of diagnostics sent from a `TypeDB`\r\nserver.\r\n\r\n1. `config.yml` gets a new field `deploymentID` for the `diagnostics`\r\nsection. This field should be used for collecting the data from multiple\r\nservers of a single `TypeDB Cloud` deployment.\r\n2. The updated diagnostics data contains more information about the\r\nserver resources and details for each separate database. More details\r\ncan be found in the examples below.\r\n3. For the `JSON` reporting, we calculated diffs between the current\r\ntimestamp and the `sinceTimestamp` (the previous hour when the data had\r\nto be sent: it's updated even if we had errors sending the data for\r\nsimplicity). For the `Prometheus` data, we send raw counts as\r\n`Prometheus` calculates diffs based on its queries and expects raw\r\ndiagnostics from our side.\r\n4. For the `JSON` monitoring, we show only the incrementing counters\r\nfrom the start of the server just as for the Prometheus diagnostics data\r\n(also available through the monitoring page). This way, the content is\r\ndifferent from the reporting data.\r\n5. The `schema` and `data` diagnostics about each specific database are\r\nsent only from the primary replica of a deployment at the moment of the\r\ndiagnostics collection. The `connection` peak values diagnostics\r\nregarding a database are still reported by a non-primary replica if the\r\ndatabase exists or there were established transactions within the last\r\nhour before the database had been deleted.\r\n6. If the statistics reporting is turned off in the config, we send a\r\ntotally safe part of the diagnostics data once to notify the server\r\nabout the moment when the diagnostics were turned off. No user data is\r\nshared in this snapshot (see examples below). This action is performed\r\nonly if the server is up for 1 hour (to avoid our CI tests report data),\r\nand only if the server has not successfully sent such a snapshot after\r\nturning the statistics reporting off the last time. If there is an error\r\nin sending this snapshot, the server will try again after a restart (no\r\nextra logic here).\r\n\r\nExample diagnostics data for Prometheus\r\n(http://localhost:4104/metrics?format=prometheus):\r\n```\r\n# distribution: TypeDB Core\r\n# version: 2.28.0\r\n# os: Mac OS X x86_64 14.2.1\r\n\r\n# TYPE server_resources_count gauge\r\nserver_resources_count{kind=\"memoryUsedInBytes\"} 68160245760\r\nserver_resources_count{kind=\"memoryAvailableInBytes\"} 559230976\r\nserver_resources_count{kind=\"diskUsedInBytes\"} 175619862528\r\nserver_resources_count{kind=\"diskAvailableInBytes\"} 1819598303232\r\n\r\n# TYPE typedb_schema_data_count gauge\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"typeCount\"} 74\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"entityCount\"} 2891\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"relationCount\"} 2466\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"attributeCount\"} 5832\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"hasCount\"} 13325\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"roleCount\"} 7984\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"storageInBytes\"} 2164793\r\ntypedb_schema_data_count{database=\"212487319\", kind=\"storageKeyCount\"} 94028\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"typeCount\"} 5\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"entityCount\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"relationCount\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"attributeCount\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"hasCount\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"roleCount\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"storageInBytes\"} 0\r\ntypedb_schema_data_count{database=\"3717486\", kind=\"storageKeyCount\"} 0\r\n\r\n# TYPE typedb_attempted_requests_total counter\r\ntypedb_attempted_requests_total{kind=\"CONNECTION_OPEN\"} 4\r\ntypedb_attempted_requests_total{kind=\"DATABASES_ALL\"} 4\r\ntypedb_attempted_requests_total{kind=\"DATABASES_GET\"} 4\r\ntypedb_attempted_requests_total{kind=\"SERVERS_ALL\"} 4\r\ntypedb_attempted_requests_total{database=\"212487319\", kind=\"DATABASES_CONTAINS\"} 2\r\ntypedb_attempted_requests_total{database=\"212487319\", kind=\"SESSION_OPEN\"} 2\r\ntypedb_attempted_requests_total{database=\"212487319\", kind=\"TRANSACTION_EXECUTE\"} 70\r\ntypedb_attempted_requests_total{database=\"212487319\", kind=\"SESSION_CLOSE\"} 1\r\ntypedb_attempted_requests_total{database=\"3717486\", kind=\"DATABASES_CONTAINS\"} 2\r\ntypedb_attempted_requests_total{database=\"3717486\", kind=\"SESSION_OPEN\"} 2\r\ntypedb_attempted_requests_total{database=\"3717486\", kind=\"TRANSACTION_EXECUTE\"} 54\r\ntypedb_attempted_requests_total{database=\"3717486\", kind=\"SESSION_CLOSE\"} 1\r\n\r\n# TYPE typedb_successful_requests_total counter\r\ntypedb_successful_requests_total{kind=\"CONNECTION_OPEN\"} 4\r\ntypedb_successful_requests_total{kind=\"DATABASES_ALL\"} 4\r\ntypedb_successful_requests_total{kind=\"DATABASES_GET\"} 4\r\ntypedb_successful_requests_total{kind=\"SERVERS_ALL\"} 4\r\ntypedb_successful_requests_total{kind=\"USER_TOKEN\"} 8\r\ntypedb_successful_requests_total{database=\"212487319\", kind=\"DATABASES_CONTAINS\"} 2\r\ntypedb_successful_requests_total{database=\"212487319\", kind=\"SESSION_OPEN\"} 2\r\ntypedb_successful_requests_total{database=\"212487319\", kind=\"TRANSACTION_EXECUTE\"} 67\r\ntypedb_successful_requests_total{database=\"212487319\", kind=\"SESSION_CLOSE\"} 1\r\ntypedb_successful_requests_total{database=\"3717486\", kind=\"DATABASES_CONTAINS\"} 2\r\ntypedb_successful_requests_total{database=\"3717486\", kind=\"SESSION_OPEN\"} 2\r\ntypedb_successful_requests_total{database=\"3717486\", kind=\"TRANSACTION_EXECUTE\"} 47\r\ntypedb_successful_requests_total{database=\"3717486\", kind=\"SESSION_CLOSE\"} 1\r\n\r\n# TYPE typedb_error_total counter\r\ntypedb_error_total{database=\"3717486\", code=\"TYR03\"} 5\r\ntypedb_error_total{database=\"3717486\", code=\"TXN08\"} 2\r\n```\r\n\r\nExample diagnostics JSON data from monitoring\r\n(http://localhost:4104/metrics?format=JSON):\r\n```\r\n{\r\n \"version\": 1,\r\n \"deploymentID\": \"HTAOYJNSRYY2WOUR\",\r\n \"serverID\": \"HTAOYJNSRYY2WOUR\",\r\n \"distribution\": \"TypeDB Core\",\r\n \"timestamp\": \"2024-05-14T09:50:46\",\r\n \"server\": {\r\n \"version\": \"2.28.0\",\r\n \"uptimeInSeconds\": 134,\r\n \"os\": {\r\n \"name\": \"Mac OS X\",\r\n \"arch\": \"x86_64\",\r\n \"version\": \"14.2.1\"\r\n },\r\n \"memoryUsedInBytes\": 68151644160,\r\n \"memoryAvailableInBytes\": 567832576,\r\n \"diskUsedInBytes\": 175619862528,\r\n \"diskAvailableInBytes\": 1819598303232\r\n },\r\n \"load\": [\r\n {\r\n \"database\": \"212487319\",\r\n \"schema\": {\r\n \"typeCount\": 74\r\n },\r\n \"data\": {\r\n \"entityCount\": 2891,\r\n \"relationCount\": 2466,\r\n \"attributeCount\": 5832,\r\n \"hasCount\": 13325,\r\n \"roleCount\": 7984,\r\n \"storageInBytes\": 2164793,\r\n \"storageKeyCount\": 94028\r\n }\r\n },\r\n {\r\n \"database\": \"3717486\",\r\n \"schema\": {\r\n \"typeCount\": 5\r\n },\r\n \"data\": {\r\n \"entityCount\": 0,\r\n \"relationCount\": 0,\r\n \"attributeCount\": 0,\r\n \"hasCount\": 0,\r\n \"roleCount\": 0,\r\n \"storageInBytes\": 0,\r\n \"storageKeyCount\": 0\r\n }\r\n }\r\n ],\r\n \"actions\": [\r\n {\r\n \"name\": \"CONNECTION_OPEN\",\r\n \"attempted\": 4,\r\n \"successful\": 4\r\n },\r\n {\r\n \"name\": \"DATABASES_ALL\",\r\n \"attempted\": 4,\r\n \"successful\": 4\r\n },\r\n {\r\n \"name\": \"DATABASES_GET\",\r\n \"attempted\": 4,\r\n \"successful\": 4\r\n },\r\n {\r\n \"name\": \"SERVERS_ALL\",\r\n \"attempted\": 4,\r\n \"successful\": 4\r\n },\r\n {\r\n \"name\": \"DATABASES_CONTAINS\",\r\n \"database\": \"212487319\",\r\n \"attempted\": 2,\r\n \"successful\": 2\r\n },\r\n {\r\n \"name\": \"SESSION_OPEN\",\r\n \"database\": \"212487319\",\r\n \"attempted\": 2,\r\n \"successful\": 2\r\n },\r\n {\r\n \"name\": \"TRANSACTION_EXECUTE\",\r\n \"database\": \"212487319\",\r\n \"attempted\": 70,\r\n \"successful\": 67\r\n },\r\n {\r\n \"name\": \"SESSION_CLOSE\",\r\n \"database\": \"212487319\",\r\n \"attempted\": 1,\r\n \"successful\": 1\r\n },\r\n {\r\n \"name\": \"DATABASES_CONTAINS\",\r\n \"database\": \"3717486\",\r\n \"attempted\": 2,\r\n \"successful\": 2\r\n },\r\n {\r\n \"name\": \"SESSION_OPEN\",\r\n \"database\": \"3717486\",\r\n \"attempted\": 2,\r\n \"successful\": 2\r\n },\r\n {\r\n \"name\": \"TRANSACTION_EXECUTE\",\r\n \"database\": \"3717486\",\r\n \"attempted\": 54,\r\n \"successful\": 47\r\n },\r\n {\r\n \"name\": \"SESSION_CLOSE\",\r\n \"database\": \"3717486\",\r\n \"attempted\": 1,\r\n \"successful\": 1\r\n }\r\n ],\r\n \"errors\": [\r\n {\r\n \"code\": \"TYR03\",\r\n \"database\": \"3717486\",\r\n \"count\": 5\r\n },\r\n {\r\n \"code\": \"TXN08\",\r\n \"database\": \"3717486\",\r\n \"count\": 2\r\n }\r\n ]\r\n}\r\n```\r\n\r\nExample of diagnostics JSON data sent when the reporting flag is turned\r\n**on**:\r\n```\r\n{\r\n \"version\":1,\r\n \"deploymentID\":\"HTAOYJNSRYY2WOUR\",\r\n \"serverID\":\"HTAOYJNSRYY2WOUR\",\r\n \"distribution\":\"TypeDB Core\",\r\n \"timestamp\":\"2024-05-14T09:50:36\",\r\n \"periodInSeconds\":3600,\r\n \"enabled\":true,\r\n \"server\":{\r\n \"version\":\"2.28.0\",\r\n \"uptimeInSeconds\":124,\r\n \"os\":{\r\n \"name\":\"Mac OS X\",\r\n \"arch\":\"x86_64\",\r\n \"version\":\"14.2.1\"\r\n },\r\n \"memoryUsedInBytes\":68097245184,\r\n \"memoryAvailableInBytes\":622231552,\r\n \"diskUsedInBytes\":175624044544,\r\n \"diskAvailableInBytes\":1819594121216\r\n },\r\n \"load\":[\r\n {\r\n \"database\":\"212487319\",\r\n \"schema\":{\r\n \"typeCount\":74\r\n },\r\n \"data\":{\r\n \"entityCount\":2868,\r\n \"relationCount\":2449,\r\n \"attributeCount\":5816,\r\n \"hasCount\":13247,\r\n \"roleCount\":7927,\r\n \"storageInBytes\":2164793,\r\n \"storageKeyCount\":93379\r\n },\r\n \"connection\":{\r\n \"schemaTransactionPeakCount\":0,\r\n \"readTransactionPeakCount\":1,\r\n \"writeTransactionPeakCount\":1\r\n }\r\n },\r\n {\r\n \"database\":\"3717486\",\r\n \"schema\":{\r\n \"typeCount\":5\r\n },\r\n \"data\":{\r\n \"entityCount\":0,\r\n \"relationCount\":0,\r\n \"attributeCount\":0,\r\n \"hasCount\":0,\r\n \"roleCount\":0,\r\n \"storageInBytes\":0,\r\n \"storageKeyCount\":0\r\n },\r\n \"connection\":{\r\n \"schemaTransactionPeakCount\":0,\r\n \"readTransactionPeakCount\":2,\r\n \"writeTransactionPeakCount\":1\r\n }\r\n }\r\n ],\r\n \"actions\":[\r\n {\r\n \"name\":\"CONNECTION_OPEN\",\r\n \"successful\":2,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"DATABASES_ALL\",\r\n \"successful\":2,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"DATABASES_GET\",\r\n \"successful\":2,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"SERVERS_ALL\",\r\n \"successful\":2,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"DATABASES_CONTAINS\",\r\n \"database\":\"212487319\",\r\n \"successful\":1,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"SESSION_OPEN\",\r\n \"database\":\"212487319\",\r\n \"successful\":1,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"TRANSACTION_EXECUTE\",\r\n \"database\":\"212487319\",\r\n \"successful\":32,\r\n \"failed\":2\r\n },\r\n {\r\n \"name\":\"SESSION_CLOSE\",\r\n \"database\":\"212487319\",\r\n \"successful\":1,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"DATABASES_CONTAINS\",\r\n \"database\":\"3717486\",\r\n \"successful\":1,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"SESSION_OPEN\",\r\n \"database\":\"3717486\",\r\n \"successful\":1,\r\n \"failed\":0\r\n },\r\n {\r\n \"name\":\"TRANSACTION_EXECUTE\",\r\n \"database\":\"3717486\",\r\n \"successful\":27,\r\n \"failed\":4\r\n },\r\n {\r\n \"name\":\"SESSION_CLOSE\",\r\n \"database\":\"3717486\",\r\n \"successful\":1,\r\n \"failed\":0\r\n }\r\n ],\r\n \"errors\":[\r\n {\r\n \"code\":\"TYR03\",\r\n \"database\":\"3717486\",\r\n \"count\":3\r\n },\r\n {\r\n \"code\":\"TXN08\",\r\n \"database\":\"3717486\",\r\n \"count\":1\r\n }\r\n ]\r\n}\r\n```\r\n\r\nExample of diagnostics JSON data sent once when the reporting flag is\r\nturned **off**:\r\n```\r\n{\r\n \"version\":1,\r\n \"deploymentID\":\"HTAOYJNSRYY2WOUR\",\r\n \"serverID\":\"HTAOYJNSRYY2WOUR\",\r\n \"distribution\":\"TypeDB Core\",\r\n \"timestamp\":\"2024-05-14T10:03:53\",\r\n \"periodInSeconds\":3600,\r\n \"enabled\":false,\r\n \"server\":{\r\n \"version\":\"2.28.0\"\r\n }\r\n}\r\n```\r\n\r\n## Implementation\r\nThere is no huge refactoring as it's planned to be a cleaner feature in\r\nthe incoming 3.0.","shortMessageHtmlLink":"Update diagnostics service to version 1 (#7059)"}},{"before":null,"after":"de51caf0e6e497707d3b719605c693d35bd10d80","ref":"refs/heads/test-diagnostics-ci","pushedAt":"2024-05-20T13:55:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"farost","name":"Georgii Novoselov","path":"/farost","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/22564079?s=80&v=4"},"commit":{"message":"Make branch running all CIs and pushing to diagnostics.typedb.dev","shortMessageHtmlLink":"Make branch running all CIs and pushing to diagnostics.typedb.dev"}},{"before":"b58c529e869705c1e775beef869024fccb1011f1","after":"042cdb2e93528aa874ab10e30119c6a2f31a9cb5","ref":"refs/heads/development","pushedAt":"2024-05-17T15:23:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Turn off statistics reporting in CI (#7068)\n\n## Usage and product changes\r\nWe turn off the `--diagnostics.reporting.statistics` in our CI builds\r\nnot to send non-real diagnostics data.\r\n\r\nIn version 2.28 and earlier, this flag purely prevents `TypeDB` from\r\nsending any diagnostics data.\r\nIn the upcoming version 2.28.1, this flag still allows `TypeDB` to send\r\na single diagnostics snapshot with the information of when the\r\ndiagnostics data has been turned off, but it happens only after the\r\nserver runs for 1 hour, so we expect the CI builds not to reach this\r\npoint and not to send any diagnostics data as well.","shortMessageHtmlLink":"Turn off statistics reporting in CI (#7068)"}},{"before":"a9b3a41883a11572986f28172f5f29965a278e7c","after":"46aa2274fcf2d368b355e5fd9e853f6d10479d0a","ref":"refs/heads/3.0","pushedAt":"2024-05-15T15:47:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Database thing statistics (#7064)\n\n## Usage and product changes\r\n\r\nWe implement the architecture and most of the implementation required\r\nfor tracking data statistics. The statistics will primarily be used for\r\nquery planning. We achieved several design goals:\r\n\r\n1) Not scanning the entire storage to update statistics\r\n2) Allowing access to old versions statistics, which allows even very\r\nold time travel/MVCC usage without too much performance degradation\r\n3) Not writing statistics to the storage layer in RocksDB, since we can\r\ndegrade performance by updating the statistics keys on every transcation\r\nand statistics can/should be a primarily in-memory structure.\r\n\r\nHowever, we take the trade off that the statistics are not always\r\nup-to-date. The update frequency is parameter we can optimise.\r\n\r\nIn the end, there is a single database-wide statistics struct, which is\r\nimmutable and updated periodically. We update it by scanning the data\r\nWAL records and summing the count deltas since, and then replacing the\r\nStatistics struct held by the database atomically. The statistics are\r\ncheckpointed into the WAL, which also allows us to time-travel to older\r\nsnapshots and find a relatively accurate statistics entry from near that\r\nversion.\r\n\r\n**This means we are solidifying the requirement that WAL cleaning, and\r\nMVCC compaction are tied to the same time-scale** - both are required\r\nfor going back to previous data versions correctly.\r\n\r\n**Future work**\r\nWe could find that reading from the WAL to update statistics is a\r\nbottleneck. We can solve several problems at once, by extracting the\r\ncommit data \"cache\" from the IsolationManager into the\r\n`DurabilityClient`, which can then be shared across isolation and\r\nstatistics operations.\r\n\r\n## Implementation\r\n\r\n### Architecture\r\n\r\n- Promote WAL and Checkpoint management into Database\r\n- we move `Checkpoint` and associated `commit_replay` methods into a new\r\nmodule: `//storage/recovery`\r\n- we also add an (ultimately unused) system to 'extend' a checkpoint\r\nwith additional data\r\n\r\n- Split database creation and loading into two separate entry points,\r\nand rearrange the corresponding methods all the way down into Storage,\r\nWAL, and Checkpointing. We also update corresponding tests.\r\n\r\n- Given a database directory, each module creates its own subdirectory:\r\n - `MVCCStorage` creates `db-name/storage`\r\n - `WAL` creates `db-name/wal`\r\n - `Checkpoint` creates `db-name/checkpoint`\r\n\r\n- Introduce `//concept/thing/Statistics`, which stores `thing`\r\nstatistics for instances of each type, role playing, and relation\r\nindexing, etc.\r\n\r\n- We checkpoint statistics into the WAL using a new record type, and\r\nload the last one on bootup. This also helps solve the MVCC time-travel\r\nproblem, where going back in time could lead to mismatched statistics\r\nbeing used (or even not relevant for the different schema!). We probably\r\nallow using the existing Statistics if the \"old\" sequence number being\r\nopened is no more than N (~100) versions behind the statistics version.\r\n\r\n**This means we are solidifying the requirement that WAL cleaning, and\r\nMVCC compaction are tied to the same time-scale** - both are required\r\nfor going back to previous data versions correctly.\r\n\r\n- Statistics catch-up/synchronisation is implemented by reading data\r\ncommit records from the WAL.\r\n- For this we re-creatte write snapshots from commit data read from\r\ndisk. However, this constructor intentionally returns a narrower API\r\nwhich means we cannot write or commit to a re-created write snapshots.\r\n- We add `CommitType` to the `CommitRecord` generated by\r\n`CommittableSnapshot`s. This allows deserialising and recreating the\r\ncorrect type of snapshot (data or schema) from a WAL entry.\r\n\r\n- Refactor out the `//storage/durability` module into `//durability`\r\npackage, which contains a simplified `Service` trait\r\n- We then create the `DurabilityClient` trait, which is now used\r\nthroughout the code base wherever `DurabilityService` was used before\r\n- The intent is to allow extracting Durability into remote machine(s)\r\nusing a Calvin-style partitioned WAL, if we wanted to. We will use the\r\n`client` to communicate with a set of durability servers, and manage\r\ncollecting ordering information, etc.\r\n- For now, we only have a `WALClient` which wraps a WAL but conforms to\r\nthe `DurabilityClient` trait\r\n\r\n### UX\r\nWe create a more consistent/comprehensive error structure for what\r\nhappens if any of storage/wal/checkpoint are not present on bootup.\r\n\r\nThe presence or absence of the `storage` directory is irrelevant to\r\nbootup/recovery (same path). Being present simply optimises the recovery\r\nprocess since we have to copy fewer files from the checkpoints.\r\n\r\n- If the WAL is present on bootup, but no checkpoint is provided, we\r\nreplay the WAL from scratch\r\n- If the WAL is present on bootup, and a checkpoint is provided, we\r\nreplace the `storage` with the checkpoint and replay the WAL since the\r\ncheckpoint\r\n- If the `db-name` database directory is present, but no WAL is present,\r\nthis is an error state.\r\n- If the WAL directory is present, but for any reason data is required\r\nfrom the WAL is not present (for example, deleted or cleaned up) this is\r\nan error. This could happen when replaying the WAL from the start when\r\nthe checkpoint is absent, or when a checkpoint is provided and the\r\nrequired replay point is not available in the WAL.","shortMessageHtmlLink":"Database thing statistics (#7064)"}},{"before":"f6863e1f0894204610ba6b16bd72015e554360b1","after":"a9b3a41883a11572986f28172f5f29965a278e7c","ref":"refs/heads/3.0","pushedAt":"2024-05-15T15:17:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dmitrii-ubskii","name":"Dmitrii Ubskii","path":"/dmitrii-ubskii","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18616863?s=80&v=4"},"commit":{"message":"Attribute and entity BDD (#7066)","shortMessageHtmlLink":"Attribute and entity BDD (#7066)"}},{"before":"a133a2a1674c2e1a53da9ba424b10f241093fbef","after":"f6863e1f0894204610ba6b16bd72015e554360b1","ref":"refs/heads/3.0","pushedAt":"2024-05-15T14:10:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"flyingsilverfin","name":"Joshua Send","path":"/flyingsilverfin","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1386526?s=80&v=4"},"commit":{"message":"Types BDD (#7065)\n\n## Usage and product changes\r\nImplements a reasonable portion of the type BDD steps. Notably missing\r\nany sort of validation.","shortMessageHtmlLink":"Types BDD (#7065)"}},{"before":"e59888a37c2c3617fe4d738cf60ff5da9a29f87b","after":"b58c529e869705c1e775beef869024fccb1011f1","ref":"refs/heads/development","pushedAt":"2024-05-15T11:36:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vaticle-bot","name":"TypeDB Bot","path":"/vaticle-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84574929?s=80&v=4"},"commit":{"message":"//tool/sync:dependencies vaticle/typeql@2.28.1","shortMessageHtmlLink":"//tool/sync:dependencies vaticle/typeql@2.28.1"}},{"before":"3b2afd897d206976f7a878eef2bcee4dfdb537bf","after":"e59888a37c2c3617fe4d738cf60ff5da9a29f87b","ref":"refs/heads/development","pushedAt":"2024-05-15T11:14:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vaticle-bot","name":"TypeDB Bot","path":"/vaticle-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84574929?s=80&v=4"},"commit":{"message":"//tool/sync:dependencies vaticle/typeql@0f9e9d1","shortMessageHtmlLink":"//tool/sync:dependencies vaticle/typeql@0f9e9d1"}},{"before":"7ba06b2ad575906cda8ea2ad18717f87f5d9de61","after":"3b2afd897d206976f7a878eef2bcee4dfdb537bf","ref":"refs/heads/development","pushedAt":"2024-05-15T09:56:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vaticle-bot","name":"TypeDB Bot","path":"/vaticle-bot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84574929?s=80&v=4"},"commit":{"message":"//tool/sync:dependencies vaticle/typeql@8116591","shortMessageHtmlLink":"//tool/sync:dependencies vaticle/typeql@8116591"}},{"before":"0c101d0b31123562ff5f87dae8c58ab6b6856f18","after":"a133a2a1674c2e1a53da9ba424b10f241093fbef","ref":"refs/heads/3.0","pushedAt":"2024-05-10T13:29:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"krishnangovindraj","name":"Krishnan Govindraj","path":"/krishnangovindraj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4918770?s=80&v=4"},"commit":{"message":"Refactor type cache with templates (#7063)\n\n## Usage and product changes\r\nRemove duplication in type_cache using generics.\r\n\r\n## Implementation\r\n* Introduces the `KindAPI` to hold properties of the vertex types (`EntityType, AttributeType, RelationType, RoleType`) \r\n* Refactor all `get_X_type_y(x)` methods to be `get_y(x: X)` where X is a fundamental type, and y is some property of it such as supertype, label, etc.\r\n* Create a `selection` submodule Introducing the traits needed to do this\r\n - CacheGetter: To pick the member cache of TypeCache corresponding to X\r\n - HasCommonCache: HasCommonCache trait - to restrict the get_X_type_y methods to X which implement KindAPI\r\n - HasOwnerPlayerCache: to restrict the get_X_type_y methods to X which implement OwnerAPI and PlayerAPI\r\n* Move functions for construction of TypeCache & all subcaches into a `construction` submodule.","shortMessageHtmlLink":"Refactor type cache with templates (#7063)"}},{"before":"c65deeb2616ef3c362f011e25d770b244b1e228a","after":"0c101d0b31123562ff5f87dae8c58ab6b6856f18","ref":"refs/heads/3.0","pushedAt":"2024-05-08T17:32:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"krishnangovindraj","name":"Krishnan Govindraj","path":"/krishnangovindraj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4918770?s=80&v=4"},"commit":{"message":"Fix snapshots to respect buffered deletes on get (#7060)\n\n## Usage and product changes\r\nWe fix a bug where the get operation on snapshots would treat a buffered delete as an absent key. Usages of it would then fall back to storage and find the key..\r\n\r\n## Usage and product changes\r\n* Make usages of snapshot.get explicitly handle deletes.\r\n* Add test checking deletes of committed keys are seen by the deleting snapshot","shortMessageHtmlLink":"Fix snapshots to respect buffered deletes on get (#7060)"}},{"before":"aba384ce61d18f26c3f57ed382b548f848049d62","after":"70a8f9e6b129764ae00ca1f02fc2b76d3ee952f4","ref":"refs/heads/new-readme","pushedAt":"2024-05-08T17:30:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"cxdorn","name":"Christoph Dorn","path":"/cxdorn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/24720490?s=80&v=4"},"commit":{"message":"Learning center","shortMessageHtmlLink":"Learning center"}},{"before":null,"after":"aba384ce61d18f26c3f57ed382b548f848049d62","ref":"refs/heads/new-readme","pushedAt":"2024-05-08T16:54:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"james-whiteside","name":"James Whiteside","path":"/james-whiteside","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/117453030?s=80&v=4"},"commit":{"message":"Updated readme\n\nUpdated readme to align with new messaging.","shortMessageHtmlLink":"Updated readme"}},{"before":"8b3656088fdc3115b1b1082200c4603c4925a180","after":"c65deeb2616ef3c362f011e25d770b244b1e228a","ref":"refs/heads/3.0","pushedAt":"2024-05-08T16:09:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"krishnangovindraj","name":"Krishnan Govindraj","path":"/krishnangovindraj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4918770?s=80&v=4"},"commit":{"message":"Fix generics on ReadableType trait (#7058)\n\n## Usage and product changes\r\nFix generics on ReadableType trait\r\n\r\n## Implementation\r\nChanges the output type lifetime to be a generic parameter on the method rather than on the trait.","shortMessageHtmlLink":"Fix generics on ReadableType trait (#7058)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWSZjvAA","startCursor":null,"endCursor":null}},"title":"Activity · vaticle/typedb"}