<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Datomic Knowledgebase - Recent questions in Cloud</title>
<link>https://ask.datomic.com/index.php/questions/datomic/cloud</link>
<description>Powered by Question2Answer</description>
<item>
<title>is there a &quot;un-divert&quot; to undo divert-system</title>
<link>https://ask.datomic.com/index.php/1021/is-there-a-un-divert-to-undo-divert-system</link>
<description>&lt;p&gt;after using datomic.dev-local/divert, is there a way to undo this in a repl to switch back to the original endpoint?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1021/is-there-a-un-divert-to-undo-divert-system</guid>
<pubDate>Wed, 15 May 2024 18:23:15 +0000</pubDate>
</item>
<item>
<title>import-cloud fails with &quot;No reader function for tag object&quot;</title>
<link>https://ask.datomic.com/index.php/999/import-cloud-fails-with-no-reader-function-for-tag-object</link>
<description>&lt;p&gt;The recent release of version 1.0.277 of datomic-local allowed me to run &lt;code&gt;import-cloud&lt;/code&gt; to completion successfully.  Unfortunately, the resulting database is unusable.  When I try to connect, I get this error message:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;{:type java.lang.RuntimeException&lt;br&gt;
   :message &quot;No reader function for tag object&quot;&lt;br&gt;
   :at [clojure.lang.EdnReader$TaggedReader readTagged &quot;EdnReader.java&quot; 801]}]&lt;br&gt;
 :trace&lt;br&gt;
 [[clojure.lang.EdnReader$TaggedReader readTagged &quot;EdnReader.java&quot; 801]&lt;br&gt;
  [clojure.lang.EdnReader$TaggedReader invoke &quot;EdnReader.java&quot; 783]&lt;br&gt;
  [clojure.lang.EdnReader$DispatchReader invoke &quot;EdnReader.java&quot; 549]&lt;br&gt;
  [clojure.lang.EdnReader readDelimitedList &quot;EdnReader.java&quot; 757]&lt;br&gt;
  [clojure.lang.EdnReader$MapReader invoke &quot;EdnReader.java&quot; 680]&lt;br&gt;
  [clojure.lang.EdnReader readDelimitedList &quot;EdnReader.java&quot; 757]&lt;br&gt;
  [clojure.lang.EdnReader$MapReader invoke &quot;EdnReader.java&quot; 680]&lt;br&gt;
  [clojure.lang.EdnReader readDelimitedList &quot;EdnReader.java&quot; 757]&lt;br&gt;
  [clojure.lang.EdnReader$VectorReader invoke &quot;EdnReader.java&quot; 672]&lt;br&gt;
  [clojure.lang.EdnReader readDelimitedList &quot;EdnReader.java&quot; 757]&lt;br&gt;
  [clojure.lang.EdnReader$MapReader invoke &quot;EdnReader.java&quot; 680]&lt;br&gt;
  [clojure.lang.EdnReader read &quot;EdnReader.java&quot; 145]&lt;br&gt;
  [clojure.lang.EdnReader read &quot;EdnReader.java&quot; 111]&lt;br&gt;
  [clojure.lang.EdnReader readString &quot;EdnReader.java&quot; 67]&lt;br&gt;
  [clojure.edn$read_string invokeStatic &quot;edn.clj&quot; 46]&lt;br&gt;
  [clojure.edn$read_string invokeStatic &quot;edn.clj&quot; 37]&lt;br&gt;
  [clojure.edn$read_string invoke &quot;edn.clj&quot; 37]&lt;br&gt;
  [datomic.dev_local.btindex_set$read_latest_root invokeStatic &quot;btindex_set.clj&quot; 99]&lt;br&gt;
  [datomic.dev_local.btindex_set$read_latest_root invoke &quot;btindex_set.clj&quot; 95]&lt;br&gt;
  [datomic.dev_local.btindex_set$current_index_files invokeStatic &quot;btindex_set.clj&quot; 149]&lt;br&gt;
  [datomic.dev_local.btindex_set$current_index_files invoke &quot;btindex_set.clj&quot; 146]&lt;br&gt;
  [datomic.dev_local.btindex_set$old_index_files invokeStatic &quot;btindex_set.clj&quot; 159]&lt;br&gt;
  [datomic.dev_local.btindex_set$old_index_files invoke &quot;btindex_set.clj&quot; 156]&lt;br&gt;
  [datomic.dev_local.btindex_set$delete_old_index_files invokeStatic &quot;btindex_set.clj&quot; 176]&lt;br&gt;
  [datomic.dev_local.btindex_set$delete_old_index_files invoke &quot;btindex_set.clj&quot; 169]&lt;br&gt;
  [datomic.dev_local.btindex_db$delete_unused_files invokeStatic &quot;btindex_db.clj&quot; 604]&lt;br&gt;
  [datomic.dev_local.btindex_db$delete_unused_files invoke &quot;btindex_db.clj&quot; 602]&lt;br&gt;
  [datomic.dev_local.impl$create_durable_connection invokeStatic &quot;impl.clj&quot; 189]&lt;br&gt;
  [datomic.dev_local.impl$create_durable_connection invoke &quot;impl.clj&quot; 187]&lt;br&gt;
  [datomic.dev_local.impl$create_connection invokeStatic &quot;impl.clj&quot; 205]&lt;br&gt;
  [datomic.dev_local.impl$create_connection invoke &quot;impl.clj&quot; 201]&lt;br&gt;
  [datomic.dev_local.impl.DurableClient connect &quot;impl.clj&quot; 271]&lt;br&gt;
  [datomic.client.api$connect invokeStatic &quot;api.clj&quot; 151]&lt;br&gt;
  [datomic.client.api$connect invoke &quot;api.clj&quot; 138]&lt;br&gt;
  [st.system$ensure_db_BANG_ invokeStatic &quot;system.clj&quot; 117]&lt;br&gt;
  [st.system$ensure_db_BANG_ invoke &quot;system.clj&quot; 114]&lt;br&gt;
  [st.system$eval57307$fn__57309$fn__57311 invoke &quot;system.clj&quot; 122]&lt;br&gt;
  [clojure.core$mapv$fn__8535 invoke &quot;core.clj&quot; 6979]&lt;br&gt;
...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note that I use a custom credentials provider and it appears as an opaque java object in the resulting db-root-00000000 file.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/999/import-cloud-fails-with-no-reader-function-for-tag-object</guid>
<pubDate>Wed, 14 Feb 2024 18:08:30 +0000</pubDate>
</item>
<item>
<title>Equivalents for d/with; transaction function test scaffold story when using cloud</title>
<link>https://ask.datomic.com/index.php/949/equivalents-transaction-function-scaffold-story-using-cloud</link>
<description>&lt;p&gt;Is there absolutely no way to access the peer api on datomic cloud?&lt;/p&gt;
&lt;p&gt;My thinking is that, conceptually, since it uses clients, that implies that peer servers do exist.&lt;/p&gt;
&lt;p&gt;I realise that light horizontal scaling is the point in DC, but the peer api, and in particular &lt;code&gt;d/with&lt;/code&gt; I'm finding important to allow test scaffolds for transaction functions.&lt;/p&gt;
&lt;p&gt;So the thought here is it would be nice to be able to access the richer peer api just for one off tasks, such as managing schema or even here making speculative databases so one can create a test scaffold to test a more complex transaction function.&lt;/p&gt;
&lt;p&gt;I don't know what the test scaffold story is with DC or if there is one. Bit of a dark area on the map for me at the moment so any suggestions would be appreciated. &lt;/p&gt;
&lt;p&gt;I guess one last-resort option is to develop using Pro and test transaction functions that way. Then copy them over to DC. I have found though that in a previous iteration trying to think about Pro and Cloud at the same time as designing for your domain is something I would want to avoid where possible.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update: I've just realised that the client api does actually include d/with, but I'll leave the question up anyway, in case anyone has any related thoughts they'd like to share.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Further Update: looking back at my initial inept attempts to build a datomic system and schema which utilised transaction functions to avoid race conditions given a complex content hierarchy in the domain I am modelling, it looks like the reason I felt forced to use the Peer API and not Client, for those Database Functions, was the absence of d/function in the Client API. I wonder if Client API actually is fully capable in terms of installing and testing database functions, but that wasn't clear to me at the time. So much is required to be able to develop in Datomic. It might be that my missing a little detail of Clojure/Java design (an easy syntactic alternative to d/function?) ended up pushing my design decision in an unnecessary direction. &lt;br&gt;
I suppose the answer may be, re. DB functions - &quot;Client API yes&quot;, &quot;Cloud no&quot;?&lt;br&gt;
(Illustrating the point that it is best not to try to think about Pro and Cloud at the same time...)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Remaining question: I'm finding it very difficult to find out what the difference is between d/function on the peer API, vs. use of the #db/fn literal.  Cannot locate an explanation in the docs. GPT is telling me the latter is for an inline database function which will not be installed, whereas d/function is for installing the fn into the database, but it I know it could be hallucinating in such a case.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/949/equivalents-transaction-function-scaffold-story-using-cloud</guid>
<pubDate>Wed, 01 Nov 2023 11:24:08 +0000</pubDate>
</item>
<item>
<title>Why do values of :db.type/uri return as com.cognitect.transit.impl.URIImpl?</title>
<link>https://ask.datomic.com/index.php/943/why-values-type-uri-return-com-cognitect-transit-impl-uriimpl</link>
<description>&lt;p&gt;I've recently worked with dev-local try out Datomic and when I moved to Cloud I noticed the following scenario, whenever I transact a fact that is of the &lt;code&gt;java.net.URI&lt;/code&gt; type and try to query it back I get &lt;code&gt;com.cognitect.transit.impl.URIImpl&lt;/code&gt; back as the type, I have found no documentation about this, I was expecting that the types remain the same, is there any way to disable this behavior or at least convert back to &lt;code&gt;java.net.URI&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;This matters because I had some code break because it was expecting &lt;code&gt;java.net.URI&lt;/code&gt; and because this behavior is undocumented (or if documented inaccessible by searching the Datomic documentation and search engines)&lt;/p&gt;
&lt;p&gt;Thank you for your time&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;code&gt;deps.edn&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;org.clojure/clojure {:mvn/version &quot;1.11.1&quot;}
com.datomic/client-cloud {:mvn/version &quot;1.0.123&quot;}
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/943/why-values-type-uri-return-com-cognitect-transit-impl-uriimpl</guid>
<pubDate>Mon, 02 Oct 2023 03:56:45 +0000</pubDate>
</item>
<item>
<title>Is `(pull $db2 ?e [*])` supported officially?</title>
<link>https://ask.datomic.com/index.php/937/is-pull-db2-e-supported-officially</link>
<description>&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/query/query-data-reference.html?search=p#pull-expressions&quot;&gt;documentation&lt;/a&gt; only mentions the syntax without a &lt;code&gt;src-var&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;pull-expr                  = ['pull' variable pattern]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;but found that this syntax also works:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;pull-expr                  = ['pull' src-var variable pattern]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have a self-contained code example here, which demonstrates a use-case, where an entity is split between 2 Datomic databases, for privacy reasons:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.datomic.com/t/pull-db-entity-pattern-is-undocumented/2299&quot;&gt;https://forum.datomic.com/t/pull-db-entity-pattern-is-undocumented/2299&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Is this variant of the &lt;code&gt;pull-expr&lt;/code&gt; in Datalog queries are not supported officially?&lt;/p&gt;
&lt;p&gt;Should I use it in production or does it have some undefined behaviour, compared to its binary arity variant?&lt;/p&gt;
&lt;p&gt;Or the documentation is just incomplete?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/937/is-pull-db2-e-supported-officially</guid>
<pubDate>Sat, 15 Jul 2023 04:42:45 +0000</pubDate>
</item>
<item>
<title>Datomic Cloud IAM role drift on setup - is this normal?</title>
<link>https://ask.datomic.com/index.php/935/datomic-cloud-iam-role-drift-on-setup-is-this-normal</link>
<description>&lt;p&gt;hi, just set up DC for the first time (ran the two AWS cloudformation templates). The storage stack is showing drift on the IAM managed policy &lt;code&gt;datomic-admin-...&lt;/code&gt;, shows 'MODIFIED', in red. Is this normal upon setup? (checking the changes in the 'versions' tab, the difference is addition of autoscaling and s3 actions to the policy; the second version, presumably causing the 'drift', was added during the provisioning). Is this just a setup artifact nothing to worry about? &lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/935/datomic-cloud-iam-role-drift-on-setup-is-this-normal</guid>
<pubDate>Wed, 12 Jul 2023 09:34:33 +0000</pubDate>
</item>
<item>
<title>How create more one production compute?</title>
<link>https://ask.datomic.com/index.php/930/how-create-more-one-production-compute</link>
<description>&lt;p&gt;Hello, &lt;br&gt;
I need to use my existing storage with additional compute and tried create new production compute with this system name(storage stack name). And I get creation error: &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Export with name myname-VpcLinkId is already exported by stack myname-compute. Rollback requested by user.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I understand that this is due to a name conflict, but I don’t understand how then to correctly create a compute.&lt;/p&gt;
&lt;p&gt;I want to run my application in a separate server(сompute) but use the same storage.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/930/how-create-more-one-production-compute</guid>
<pubDate>Wed, 05 Jul 2023 13:54:33 +0000</pubDate>
</item>
<item>
<title>Can a tuple value be added when one of the parts of the tuple is an lookup-ref?</title>
<link>https://ask.datomic.com/index.php/891/can-tuple-value-added-when-one-the-parts-the-tuple-lookup-ref</link>
<description>&lt;p&gt;I'm wanting to use a lookup ref instead of an entity id (:db-id) when specifying the value for a tuple of attributes where one of the attributes is of type :db.type/ref. Is this possible? I've looked over the Datomic Cloud grammar on transactions and I don't see how to specify a tuple value at all (maybe I'm missing something). I've tried what I thought would be the obvious way to do it and this doesn't work. Here's what I have...&lt;/p&gt;
&lt;p&gt;Truncated schema:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:db/ident       :molecule/legacy-id
 :db/unique      :db.unique/identity
 :db/valueType   :db.type/long
 :db/cardinality :db.cardinality/one
 :db/doc         &quot;The Molecule/Complex id from the ProcessDB Oracle database.&quot;}
{:db/ident       :molecule-part/number
 :db/valueType   :db.type/long
 :db/cardinality :db.cardinality/one
 :db/doc         &quot;The number of molecules for this molecule. The entity with this attribute may be reused and is
 not unique for a particular complex so do not change this number. Instead, check for another existing entity
 or create one.&quot;}
{:db/ident       :molecule-part/molecule
 :db/valueType   :db.type/ref
 :db/cardinality :db.cardinality/one
 :db/doc         &quot;The molecule this part refers to. The entity with this attribute may be reused and is
 not unique for a particular complex.&quot;}
{:db/ident       :molecule-part/number+molecule
 :db/unique      :db.unique/identity
 :db/valueType   :db.type/tuple
 :db/tupleAttrs  [:molecule-part/number :molecule-part/molecule]
 :db/cardinality :db.cardinality/one
 :db/doc         &quot;The number and molecule that collectively form the unique identity of this entity.&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I try to add a molecule part using&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/transact (db/get-connection) {:tx-data [{:molecule-part/molecule [:molecule/legacy-id 717] :molecule-part/number 1 :molecule-part/number+molecule [1 [:molecule/legacy-id 717]]}]})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And get the following error&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:db.error/invalid-tuple-value Invalid tuple value
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If I replace &quot;[:molecule/legacy-id 717]&quot; with the entity id (:db/id) for that molecule then it works. But I don't want to use the entity id... I want to use the lookup ref, because what I have is the :molecule/legacy-id. I don't want to have to do a query to resolve this before doing a transaction to add the :molecule-part.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/891/can-tuple-value-added-when-one-the-parts-the-tuple-lookup-ref</guid>
<pubDate>Thu, 20 Apr 2023 20:09:32 +0000</pubDate>
</item>
<item>
<title>Backup Datomic Cloud to another account</title>
<link>https://ask.datomic.com/index.php/884/backup-datomic-cloud-to-another-account</link>
<description>&lt;p&gt;Is there a way to backup a datomic cloud instance to another aws account? I know that cloud is based on HA technology inside the AWS, (dynamo, s3, etc) but backups are important for business continuity. In the event of an attack, &lt;em&gt;everything&lt;/em&gt; can be deleted within our aws account with one breach. I can make the tools to copy s3 items, it does not seem possible to import an existing s3 db into datomic.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/884/backup-datomic-cloud-to-another-account</guid>
<pubDate>Fri, 31 Mar 2023 13:55:41 +0000</pubDate>
</item>
<item>
<title>Request Entity Too Large - clojure.lang.ExceptionInfo: Response body did not conform to Datomic client protocol</title>
<link>https://ask.datomic.com/index.php/882/request-clojure-exceptioninfo-response-conform-protocol</link>
<description>&lt;p&gt;There seems to be a bug in Datomic 990-9202 that breaks the d/tx-range function.&lt;/p&gt;
&lt;p&gt;Earlier I could use the tx-range function the fetch data from my database.&lt;/p&gt;
&lt;p&gt;But after upgrading to Datomic 990-9202 I get and exception when a transaction has too much data. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
clojure.lang.ExceptionInfo: Response body did not conform to Datomic client protocol&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cognitect.anomalies/category: :cognitect.anomalies/incorrect
 cognitect.anomalies/message: &quot;Response body did not conform to Datomic client protocol&quot;
                 http-result: {:status 413,
                               :headers
                               {&quot;apigw-requestid&quot; &quot;Vg4UxisCDoEEJsQ=&quot;,
                                &quot;server&quot; &quot;Jetty(9.4.44.v20210927)&quot;,
                                &quot;connection&quot; &quot;keep-alive&quot;,
                                &quot;content-length&quot; &quot;38&quot;,
                                &quot;date&quot; &quot;Tue, 19 Jul 2022 12:17:47 GMT&quot;,
                                &quot;content-type&quot; &quot;application/json&quot;},
                               :body &quot;{\&quot;message\&quot;:\&quot;Request Entity Too Large\&quot;}&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/882/request-clojure-exceptioninfo-response-conform-protocol</guid>
<pubDate>Tue, 21 Mar 2023 12:26:20 +0000</pubDate>
</item>
<item>
<title>How can I connect to Datomic after upgrade to 990-9202, the bastion disappeared?</title>
<link>https://ask.datomic.com/index.php/880/how-connect-datomic-after-upgrade-9202-bastion-disappeared</link>
<description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;After I upgraded Datomic cloud to version 2023/02/28 990-9202 the bastion disappeared in AWS. So now I can't connect to Datomic anymore.&lt;/p&gt;
&lt;p&gt;When I try to connect to it with &lt;code&gt;datomic client access &amp;lt;SYSTEM-NAME&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; I get this error:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
{:clojure.main/message&lt;br&gt;
 &quot;Execution error at datomic.tools.ops.aws/get-ip (aws.clj:116).\nGateway not found, make sure gateway is running.\n&quot;,&lt;br&gt;
 :clojure.main/triage&lt;br&gt;
 {:clojure.error/class java.lang.RuntimeException,&lt;br&gt;
  :clojure.error/line 116,&lt;br&gt;
  :clojure.error/cause&lt;br&gt;
  &quot;Gateway not found, make sure gateway is running.&quot;,&lt;br&gt;
  :clojure.error/symbol datomic.tools.ops.aws/get-ip,&lt;br&gt;
  :clojure.error/source &quot;aws.clj&quot;,&lt;br&gt;
  :clojure.error/phase :execution},&lt;br&gt;
 :clojure.main/trace&lt;br&gt;
 {:via&lt;br&gt;
  [{:type java.lang.RuntimeException,&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:message &quot;Gateway not found, make sure gateway is running.&quot;,
:at [datomic.tools.ops.aws$get_ip invokeStatic &quot;aws.clj&quot; 116]}],
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  :trace&lt;br&gt;
  [[datomic.tools.ops.aws$get_ip invokeStatic &quot;aws.clj&quot; 116]&lt;br&gt;
   [datomic.tools.ops.aws$get_ip invoke &quot;aws.clj&quot; 113]&lt;br&gt;
   [datomic.tools.ops.ssh$access invokeStatic &quot;ssh.clj&quot; 77]&lt;br&gt;
   [datomic.tools.ops.ssh$access invoke &quot;ssh.clj&quot; 56]&lt;br&gt;
   [datomic.tools.ops.cli.client$eval13301$fn__13302&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;invoke
&quot;client.clj&quot;
68]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;   [clojure.lang.MultiFn invoke &quot;MultiFn.java&quot; 229]&lt;br&gt;
   [datomic.tools.ops$_main invokeStatic &quot;ops.clj&quot; 83]&lt;br&gt;
   [datomic.tools.ops$_main doInvoke &quot;ops.clj&quot; 76]&lt;br&gt;
   [clojure.lang.RestFn applyTo &quot;RestFn.java&quot; 137]&lt;br&gt;
   [clojure.lang.Var applyTo &quot;Var.java&quot; 705]&lt;br&gt;
   [clojure.core$apply invokeStatic &quot;core.clj&quot; 667]&lt;br&gt;
   [clojure.main$main_opt invokeStatic &quot;main.clj&quot; 514]&lt;br&gt;
   [clojure.main$main_opt invoke &quot;main.clj&quot; 510]&lt;br&gt;
   [clojure.main$main invokeStatic &quot;main.clj&quot; 664]&lt;br&gt;
   [clojure.main$main doInvoke &quot;main.clj&quot; 616]&lt;br&gt;
   [clojure.lang.RestFn applyTo &quot;RestFn.java&quot; 137]&lt;br&gt;
   [clojure.lang.Var applyTo &quot;Var.java&quot; 705]&lt;br&gt;
   [clojure.main main &quot;main.java&quot; 40]],&lt;br&gt;
  :cause &quot;Gateway not found, make sure gateway is running.&quot;}}&lt;br&gt;
  &lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;  What should I do to be able to connect to Datomic again?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/880/how-connect-datomic-after-upgrade-9202-bastion-disappeared</guid>
<pubDate>Fri, 17 Mar 2023 09:42:45 +0000</pubDate>
</item>
<item>
<title>Could not find artifact com.datomic:datomic-free:jar:1.0.6610</title>
<link>https://ask.datomic.com/index.php/871/could-not-find-artifact-com-datomic-datomic-free-jar-1-0-6610</link>
<description>&lt;p&gt;I am just exploring this for my company, and I am trying to set up free version to follow the tutorial.  I downloaded datomic-1.0.6610, am on Windows with leiningen.  This is in my &lt;code&gt;project.clj&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  :dependencies [[org.clojure/clojure &quot;1.11.1&quot;]
                 [com.datomic/datomic-free &quot;1.0.6610&quot;]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I run &lt;code&gt;lein repl&lt;/code&gt;, I get this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\Users\irinzn\personal\datomic-try&amp;gt;lein repl
Retrieving org/clojure/clojure/1.11.1/clojure-1.11.1.pom from central
Retrieving org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.pom from central
Retrieving org/clojure/pom.contrib/1.1.0/pom.contrib-1.1.0.pom from central
Retrieving org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.pom from central
Retrieving nrepl/nrepl/1.0.0/nrepl-1.0.0.pom from clojars
Retrieving org/nrepl/incomplete/0.1.0/incomplete-0.1.0.pom from clojars
Retrieving org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.jar from central
Retrieving org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.jar from central
Retrieving org/clojure/clojure/1.11.1/clojure-1.11.1.jar from central
Retrieving org/nrepl/incomplete/0.1.0/incomplete-0.1.0.jar from clojars
Retrieving nrepl/nrepl/1.0.0/nrepl-1.0.0.jar from clojars
Could not find artifact com.datomic:datomic-free:jar:1.0.6610 in central (https://repo1.maven.org/maven2/)
Could not find artifact com.datomic:datomic-free:jar:1.0.6610 in clojars (https://repo.clojars.org/)
This could be due to a typo in :dependencies, file system permissions, or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.
Could not resolve dependencies
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then it hangs.  I am following the instructions here: &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/peer/integrating-peer-lib.html&quot;&gt;https://docs.datomic.com/on-prem/peer/integrating-peer-lib.html&lt;/a&gt; .  Can someone tell me what I am doing wrong?&lt;/p&gt;
&lt;p&gt;Also, peeking at those repos, this version may not be there, at least in free version?&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://repo.clojars.org/datomic-free/datomic-free/&quot;&gt;https://repo.clojars.org/datomic-free/datomic-free/&lt;/a&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://repo1.maven.org/maven2/com/datomic/&quot;&gt;https://repo1.maven.org/maven2/com/datomic/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also, is this possibly the answer?  &lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.datomic.com/index.php/453/datomic-free-releases-arent-uploaded-public-clojars-anymore&quot;&gt;https://ask.datomic.com/index.php/453/datomic-free-releases-arent-uploaded-public-clojars-anymore&lt;/a&gt;&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/871/could-not-find-artifact-com-datomic-datomic-free-jar-1-0-6610</guid>
<pubDate>Thu, 16 Feb 2023 22:51:25 +0000</pubDate>
</item>
<item>
<title>d/with crashes when called rapidly in dev-local</title>
<link>https://ask.datomic.com/index.php/866/d-with-crashes-when-called-rapidly-in-dev-local</link>
<description>&lt;p&gt;&lt;code&gt;com.datomic/dev-local {:mvn/version &quot;1.0.243&quot;}&lt;/code&gt;&lt;br&gt;
&lt;code&gt;datomic.client.api&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;One of our dataflow experiments is thrashing d/with rapidly (for each keystroke in a form connected by websocket) and it crashes. Obviously this is not a reasonable circumstance but wanted to report as a possible concurrency bug.&lt;/p&gt;
&lt;p&gt;I'm not able to repro minimally yet. Confounding variables include concurrency model, whether the d/with calls are parallel or composed, whether the d/with calls are interrupting each other or concurrent, how Datomic responds to ThreadInterruptedException, and likely more.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;d/with, tx: ([:db/add 536561674378709 :label/name &quot;6&quot;]) ...success

d/with, tx: ([:db/add 536561674378709 :label/name &quot;65&quot;]) ...failure, e:  
#error {
 :cause nil
 :via
 [{:type java.nio.channels.ClosedChannelException
   :message nil
   :at [sun.nio.ch.FileChannelImpl ensureOpen FileChannelImpl.java 159]}]
 :trace
 [[sun.nio.ch.FileChannelImpl ensureOpen FileChannelImpl.java 159]
  [sun.nio.ch.FileChannelImpl read FileChannelImpl.java 814]
  [datomic.dev_local.io$read_n_bbuf invokeStatic io.clj 66]
  [datomic.dev_local.io$read_n_bbuf invoke io.clj 63]
  [datomic.dev_local.io$read_n_buf invokeStatic io.clj 72]
  [datomic.dev_local.io$read_n_buf invoke io.clj 69]
  [datomic.dev_local.tx$keyoff_datom_bbuf invokeStatic tx.clj 374]
  [datomic.dev_local.tx$keyoff_datom_bbuf invokePrim tx.clj -1]
  [datomic.dev_local.tx$datom_lookup_valfn invokeStatic tx.clj 401]
  [datomic.dev_local.tx$datom_lookup_valfn invoke tx.clj 397]
  [datomic.dev_local.local_log.LocalLog valAt local_log.clj 56]
  [datomic.dev_local.btindex_db$double_lookup$reify__19853 valAt btindex_db.clj 404]
  [datomic.dev_local.btindex$lookup_cmp$reify__19649 valAt btindex.clj 268]
  [datomic.dev_local.btindex.BTIndexLeaf leftk btindex.clj 238]
  [datomic.dev_local.btindex$leftk invokeStatic btindex.clj 59]
  [datomic.dev_local.btindex$leftk invoke btindex.clj 58]
  [datomic.dev_local.btindex.BTIndexBranch bspos btindex.clj 165]
  [datomic.dev_local.btindex.BTIndexBranch seek btindex.clj 184]
  [datomic.dev_local.btindex.BTIndexBranch seek btindex.clj 185]
  [datomic.dev_local.btindex.BTIndex seek btindex.clj 310]
  [datomic.core.btset$seek invokeStatic btset.clj 405]
  [datomic.core.btset$seek invoke btset.clj 400]
  [datomic.core.db.Db seekEAVT db.clj 2195]
  [datomic.core.db$find_eavt invokeStatic db.clj 1135]
  [datomic.core.db$find_eavt invoke db.clj 1129]
  [datomic.core.db$find_eavt invokeStatic db.clj 1132]
  [datomic.core.db$find_eavt invoke db.clj 1129]
  [datomic.core.db$next_valid_inst invokeStatic db.clj 3041]
  [datomic.core.db$next_valid_inst invoke db.clj 3037]
  [datomic.core.db.ProcessExpander getData db.clj 3291]
  [datomic.dev_local.btindex_db$expand_tx invokeStatic btindex_db.clj 445]
  [datomic.dev_local.btindex_db$expand_tx invoke btindex_db.clj 429]
  [datomic.dev_local.with_db.WithDb with with_db.clj 73]
  [datomic.client.api$with invokeStatic api.clj 363]
  [datomic.client.api$with invoke api.clj 353]
  [clojure.core$eval39795$fn__39796$fn__39797 invoke NO_SOURCE_FILE 0]
  [clojure.core$eval39787$fn__39788$fn__39789$fn__39790 invoke NO_SOURCE_FILE 0]
  [clojure.lang.Atom swap Atom.java 37]
  [clojure.core$swap_BANG_ invokeStatic core.clj 2369]
  [clojure.core$swap_BANG_ invoke core.clj 2362]
  [clojure.core$eval39787$fn__39788$fn__39789 invoke NO_SOURCE_FILE 0]
  [hyperfiddle.photon$wrap_STAR_$cr31022_block_0__31024$cr31022_place_2__31025 invoke photon.cljc 154]
  [missionary.impl.Thunk run Thunk.java 58]
  [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1136]
  [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 635]
  [java.lang.Thread run Thread.java 833]]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;some test code that does NOT repro the bug:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  (def tx1 [[:db/add 536561674378709 :label/name &quot;6&quot;]])
  (def tx2 [[:db/add 536561674378709 :label/name &quot;65&quot;]])
  
  (def db0 (d/with-db test/datomic-conn)) ; mbrainz-samples
  
  (do
    (:db-after (d/with db0 {:tx-data tx1}))
    (:db-after (d/with db0 {:tx-data tx2})))

  (let [db1 (:db-after (d/with db0 {:tx-data tx1}))
        db2 (:db-after (d/with db1 {:tx-data tx2}))]
    db2)
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/866/d-with-crashes-when-called-rapidly-in-dev-local</guid>
<pubDate>Mon, 19 Dec 2022 18:11:18 +0000</pubDate>
</item>
<item>
<title>What's the state of the art in distributed Datomic?</title>
<link>https://ask.datomic.com/index.php/863/whats-the-state-of-the-art-in-distributed-datomic</link>
<description>&lt;p&gt;I'd like to get an idea of the state of the art in distributed Datomic.  FWIW, my wish list includes the ability for selected processing nodes to have local images and/or participate in federated global images, linked by CRDTs, etc. And a pony.&lt;/p&gt;
&lt;p&gt;-r&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/863/whats-the-state-of-the-art-in-distributed-datomic</guid>
<pubDate>Sun, 18 Dec 2022 00:37:33 +0000</pubDate>
</item>
<item>
<title>Querying 2000+ entities, by passing in uuids (Really slow)</title>
<link>https://ask.datomic.com/index.php/862/querying-2000-entities-by-passing-in-uuids-really-slow</link>
<description>&lt;p&gt;Passing in over 2000 uuids to mysql for a fairly simple query takes milliseconds to retrieve relevant data. However we're running into an issue with datomic where it takes noticeable longer. Is there a specific syntax to use when processing such long lists, or is the linked example the only way? &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/query/query.html#collection-binding&quot;&gt;https://docs.datomic.com/on-prem/query/query.html#collection-binding&lt;/a&gt;&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/862/querying-2000-entities-by-passing-in-uuids-really-slow</guid>
<pubDate>Wed, 14 Dec 2022 09:24:29 +0000</pubDate>
</item>
<item>
<title>Inconsistency between d/pull and d/q + pull for non-existent entities</title>
<link>https://ask.datomic.com/index.php/860/inconsistency-between-pull-and-pull-for-existent-entities</link>
<description>&lt;p&gt;Inconsistency between d/pull and d/q + pull for non-existent entities&lt;/p&gt;
&lt;p&gt;Datomic returns a map with the &lt;code&gt;:db/id&lt;/code&gt; of the entity being pulled, even if the entity doesn't exist in the database. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/pull (d/db conn) '[*] 9999999999)
=&amp;gt; #:db{:id 9999999999}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This behavior is somewhat confusing, especially when using &lt;code&gt;d/pull&lt;/code&gt; with time filters. I was expecting &lt;code&gt;d/pull&lt;/code&gt; to return &lt;code&gt;nil&lt;/code&gt; or &lt;code&gt;#:db{:id nil}&lt;/code&gt; if the entity wasn't created at the given point in time. However, Datomic always returns a map with the entity ID:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/pull (as-of (d/db conn) 1) '[*] 9999999999)
=&amp;gt; #:db{:id 9999999999}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Surprisingly, I see the expected behavior if I pull the entity information from a query using &lt;code&gt;d/q&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/q '{:find [(pull ?e [*])]
        :in   [?e]}
      (d/db conn) 9999999999)
=&amp;gt; [[#:db{:id nil}]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Is that difference in behavior expected? How can I determine if an entity existed at any point in time using &lt;code&gt;d/pull&lt;/code&gt;?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/860/inconsistency-between-pull-and-pull-for-existent-entities</guid>
<pubDate>Sat, 10 Dec 2022 15:55:29 +0000</pubDate>
</item>
<item>
<title>How do you add relationship properties, e.g. the time a person met another person?</title>
<link>https://ask.datomic.com/index.php/854/how-you-relationship-properties-time-person-another-person</link>
<description>&lt;p&gt;I have some experience with Neo4j / cypher. In cypher relationships are first-class citizens, so they can have properties, which I really like.&lt;/p&gt;
&lt;p&gt;How do I do something similar with datalog? Do I have to have a &quot;mapping entity&quot; in between two entities that have a relationship?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/854/how-you-relationship-properties-time-person-another-person</guid>
<pubDate>Mon, 07 Nov 2022 08:35:28 +0000</pubDate>
</item>
<item>
<title>Is there a way to create permanent aliases for reverse relationships?</title>
<link>https://ask.datomic.com/index.php/739/there-way-create-permanent-aliases-reverse-relationships</link>
<description>&lt;p&gt;Datomic documentation recommends modeling relationships in one direction only. So, if I have a reference &quot;whole&quot; on an entity &quot;part&quot;, I don't need to declare another reference &quot;parts&quot; on an entity &quot;whole&quot;. The following attribute declaration is enough.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:db/ident       :part/whole
 :db/valueType   :db.type/ref
 :db/cardinality :db.cardinality/one}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, I can use &lt;code&gt;:part/_whole&lt;/code&gt; as a key to fetch all parts of a &quot;whole&quot;. Even though it works, it's counterintuitive at times.&lt;/p&gt;
&lt;p&gt;Is there a way to create a permanent alias for the reverse relationship, equivalent to the pull pattern &lt;code&gt;:as&lt;/code&gt; option?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/pull db '[* {[:part/_whole :as :whole/parts] [*]}] whole-db-id)
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/739/there-way-create-permanent-aliases-reverse-relationships</guid>
<pubDate>Wed, 31 Aug 2022 14:45:19 +0000</pubDate>
</item>
<item>
<title>Notifying clients of database changes in Datomic Cloud?</title>
<link>https://ask.datomic.com/index.php/719/notifying-clients-of-database-changes-in-datomic-cloud</link>
<description>&lt;p&gt;In your 2013 blog post &lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.datomic.com/2013/10/the-transaction-report-queue.html&quot;&gt;The Transaction Report Queue&lt;/a&gt;, you write:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;In Datomic, you can monitor all transactions.  Any peer process in the&lt;br&gt;
system can request a transaction report queue of every transaction&lt;br&gt;
against a particular database.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Is there a change data capture or related mechanism in Datomic Cloud, where changes to the database can be pushed to a client?&lt;/p&gt;
&lt;p&gt;Thank you,&lt;/p&gt;
&lt;p&gt;Andrew&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/719/notifying-clients-of-database-changes-in-datomic-cloud</guid>
<pubDate>Sat, 04 Jun 2022 15:18:15 +0000</pubDate>
</item>
<item>
<title>How to retract entities that reference a retracted entity</title>
<link>https://ask.datomic.com/index.php/692/how-to-retract-entities-that-reference-a-retracted-entity</link>
<description>&lt;p&gt;In my database model, I have several entities referencing the user entity.&lt;br&gt;
When I retract the user entity using :db/retractEntity, the user is correctly retracted, as well as its refs in the other entities, for example :message/user.&lt;br&gt;
For some entities, when the user is retracted the entity itself should also be retracted, but since the entity is not a component of the user, as the relation is the other way around, I did not find a way to retract the entire entity.&lt;br&gt;
Is there a way to make this happen for some entities?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/692/how-to-retract-entities-that-reference-a-retracted-entity</guid>
<pubDate>Thu, 06 Jan 2022 09:52:00 +0000</pubDate>
</item>
<item>
<title>Why does :db/ensure appear as an attribute in my entities?</title>
<link>https://ask.datomic.com/index.php/681/why-does-db-ensure-appear-as-an-attribute-in-my-entities</link>
<description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;I wonder if you might be able to help me with something?&lt;/p&gt;
&lt;p&gt;I am trying to use an entity spec with datomic to provide constraint checking when entities are transacted/retracted from the database using &lt;code&gt;:db/ensure&lt;/code&gt;. This works fine - if my predicate fails the entities are not transacted into Datomic. But in the case where the predicate passes the &lt;code&gt;:db/ensure&lt;/code&gt; key/value also appears to be stored in the database - it's visible when I pull the entity out again. This isn't what I expected to happen according to the docs:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/schema/schema-reference.html#entity-specs&quot;&gt;https://docs.datomic.com/cloud/schema/schema-reference.html#entity-specs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&quot;:db/ensure is a virtual attribute. It is not added in the database; instead it triggers checks based on the named entity.&quot;&lt;/p&gt;
&lt;p&gt;Have I done something wrong causing &lt;code&gt;:db/ensure&lt;/code&gt; to be added to the database? Or have I misunderstood the docs?&lt;/p&gt;
&lt;p&gt;I've got a simple test case showing this behaviour if it helps see what I mean. You can find that in the Clojurians Slack channel where I originally asked this question: &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C03RZMDSH/p1635858493193300&quot;&gt;https://clojurians.slack.com/archives/C03RZMDSH/p1635858493193300&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If anyone can point me in the right direction that would be much appreciated, cheers!&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/681/why-does-db-ensure-appear-as-an-attribute-in-my-entities</guid>
<pubDate>Tue, 09 Nov 2021 16:52:46 +0000</pubDate>
</item>
<item>
<title>What is the recommended way of dumping the whole datomic schema?</title>
<link>https://ask.datomic.com/index.php/677/what-is-the-recommended-way-dumping-the-whole-datomic-schema</link>
<description>&lt;p&gt;The recommended answer from &lt;a rel=&quot;nofollow&quot; href=&quot;https://stackoverflow.com/questions/26575320/how-can-i-get-the-current-datomic-schema/45726168#45726168&quot;&gt;here&lt;/a&gt; is to use&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[:find ?attr ?type ?card
 :where
 [_ :db.install/attribute ?a]
 [?a :db/valueType ?t]
 [?a :db/cardinality ?c]
 [?a :db/ident ?attr]
 [?t :db/ident ?type]
 [?c :db/ident ?card]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I'm curious what folks are using themselves. Also, what about &lt;code&gt;db/index&lt;/code&gt; ?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/677/what-is-the-recommended-way-dumping-the-whole-datomic-schema</guid>
<pubDate>Mon, 01 Nov 2021 18:22:07 +0000</pubDate>
</item>
<item>
<title>Broken Web Link</title>
<link>https://ask.datomic.com/index.php/675/broken-web-link</link>
<description>&lt;p&gt;In &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/time/filters.html&quot;&gt;https://docs.datomic.com/cloud/time/filters.html&lt;/a&gt; - the &quot;example inventory database&quot; link to &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/cognitect-labs/day-of-datomic-cloud/blob/master/tutorial/filters.clj&quot;&gt;https://github.com/cognitect-labs/day-of-datomic-cloud/blob/master/tutorial/filters.clj&lt;/a&gt; is broken/404&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/675/broken-web-link</guid>
<pubDate>Wed, 20 Oct 2021 07:17:30 +0000</pubDate>
</item>
<item>
<title>Datom &quot;value&quot; - content?</title>
<link>https://ask.datomic.com/index.php/668/datom-value-content</link>
<description>&lt;p&gt;What “kind” of content can the Datom value have?&lt;/p&gt;
&lt;p&gt;Beyond a simple string like “pizza”, can the value be an entity id?&lt;/p&gt;
&lt;p&gt;In the product docs there’s also “:green” as the value, what is that? Sorry, I’m not even sure what the colon means…&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/668/datom-value-content</guid>
<pubDate>Sun, 26 Sep 2021 08:29:14 +0000</pubDate>
</item>
<item>
<title>noHistory and transaction data</title>
<link>https://ask.datomic.com/index.php/655/nohistory-and-transaction-data</link>
<description>&lt;p&gt;We've got an attribute that we write to fairly often, but don't need history for. While &lt;code&gt;:db:noHistory&lt;/code&gt; is clearly the write solution for not logging the history of the data itself, I'm worried that we're also going to accrue a large number of transaction entities as well.&lt;/p&gt;
&lt;p&gt;Will that happen? Are transactions still made when the the only datom is for a noHistory attribute? Will we still have database growth issues due to the transactions themselves?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/655/nohistory-and-transaction-data</guid>
<pubDate>Wed, 25 Aug 2021 16:55:02 +0000</pubDate>
</item>
<item>
<title>How to authenticate and authorize access to API Gateway endpoints for datomic?</title>
<link>https://ask.datomic.com/index.php/651/authenticate-authorize-access-gateway-endpoints-datomic</link>
<description>&lt;p&gt;I'm currently evaluating Datomic and I've deployed a production topology using a split stack. DatomicCloudVersion is 9095 and DatomicCFTVersion is 884. The CloudFormation stack created two API Gateway endpoints: &lt;code&gt;datomic-[system]-client-api&lt;/code&gt; and &lt;code&gt;datomic-[system]-ions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;From my local computer I can get a client by using &lt;code&gt;datomic-[system]-client-api&lt;/code&gt; endpoint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/client {:system &quot;my-system&quot;
           :server-type :ion
           :region &quot;us-east-1&quot;
           :endpoint &quot;https://[endpoint-id].execute-api.us-east-1.amazonaws.com/&quot;})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Above, &lt;code&gt;https://[endpoint-id].execute-api.us-east-1.amazonaws.com/&lt;/code&gt; is the client-api API Gateway endpoint. It works, but the endpoint is open to the world. I then added an IAM authorizer to &lt;code&gt;datomic-[system]-client-api&lt;/code&gt; and used an authorized IAM user to make a request to the now authenticated endpoint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;awscurl --service execute-api -X GET https://[endpoint-id].execute-api.us-east-1.amazonaws.com --profile datomic
{:s3-auth-path &quot;long s3 path&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;awscurl&lt;/code&gt; is just a tool to make authenticated calls to AWS services. As you can see, I can get a response from the endpoint by using my local profile named &quot;datomic&quot;. If I try using regular curl without the v4 AWS signature it fails:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -X GET https://[endpoint-id].execute-api.us-east-1.amazonaws.com
{&quot;message&quot;:&quot;Forbidden&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Works as expected. The problem is now I can't get a client using:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/client {:system &quot;my-system&quot;
           :server-type :ion
           :region &quot;us-east-1&quot;
           :creds-profile &quot;datomic&quot;
           :endpoint &quot;https://[endpoint-id].execute-api.us-east-1.amazonaws.com/&quot;})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The response I get is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:status 403,
:headers
{&quot;apigw-requestid&quot; &quot;EUsyNi9aIAMEPlg=&quot;,
&quot;connection&quot; &quot;keep-alive&quot;,
&quot;content-length&quot; &quot;23&quot;,
&quot;date&quot; &quot;Thu, 19 Aug 2021 17:01:40 GMT&quot;,
&quot;content-type&quot; &quot;application/json&quot;},
:body &quot;{\&quot;message\&quot;:\&quot;Forbidden\&quot;}&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is as if the &lt;code&gt;d/client&lt;/code&gt; call is ignoring the profile or not generating the proper signature. I tried setting the &lt;code&gt;AWS_PROFILE&lt;/code&gt; environment variable as well, to no avail.&lt;/p&gt;
&lt;p&gt;Is using an IAM Authorizer not the proper way to go? How can I protect both the client-api and ions endpoints? Finally, what's the difference between the client-api and ions endpoints?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/651/authenticate-authorize-access-gateway-endpoints-datomic</guid>
<pubDate>Thu, 19 Aug 2021 17:05:29 +0000</pubDate>
</item>
<item>
<title>Highly available deployments when desired capacity is 1</title>
<link>https://ask.datomic.com/index.php/650/highly-available-deployments-when-desired-capacity-is-1</link>
<description>&lt;p&gt;Hi! With the new Datomic Cloud, I set a compute group's auto scaling configuration this way:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cluster node instance type = &lt;strong&gt;t3.small&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Desired capacity = &lt;strong&gt;Default&lt;/strong&gt; (1)&lt;/li&gt;
&lt;li&gt;Minimum instances = &lt;strong&gt;Default&lt;/strong&gt; (1)&lt;/li&gt;
&lt;li&gt;Maximum instances = &lt;strong&gt;Default&lt;/strong&gt; (3)&lt;/li&gt;
&lt;li&gt;Minimum number of instances during update = &lt;strong&gt;2&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Due to the last config bullet (5), should the system spin up a &lt;strong&gt;2nd&lt;/strong&gt; instance when the update starts, before deploying the new app code, in order to enable high availability during deployments, and scale back to the desired capacity after the deployment concludes?&lt;/p&gt;
&lt;p&gt;I tested it and the system/ASG didn't scale a 2nd instance up during the deployment, so it caused downtime.&lt;/p&gt;
&lt;p&gt;My understanding is that bullets 2-3-4 control the ASG, while bullet 5 would control something in CodeDeploy, but it's not clear to me how CodeDeploy and the ASG would coordinate to honor my setting config (5) to &lt;strong&gt;2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Are my expectations wrong about setting it up like I did?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/650/highly-available-deployments-when-desired-capacity-is-1</guid>
<pubDate>Thu, 19 Aug 2021 12:53:18 +0000</pubDate>
</item>
<item>
<title>Is there an easy way to migrate data from Datomic to DocumentDB (AWS MongDB version) ?</title>
<link>https://ask.datomic.com/index.php/648/there-easy-migrate-data-datomic-documentdb-mongdb-version</link>
<description>&lt;p&gt;We use Datomic in our company, but we decided to migrate data from Datomic to DocumentDB. Is there any software tools or library to perform that in an easy way ?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/648/there-easy-migrate-data-datomic-documentdb-mongdb-version</guid>
<pubDate>Mon, 26 Jul 2021 14:35:14 +0000</pubDate>
</item>
<item>
<title>Datomic returns empty results where &quot;Insufficient bindings, will cause db scan&quot; exception is expected</title>
<link>https://ask.datomic.com/index.php/644/datomic-returns-insufficient-bindings-exception-expected</link>
<description>&lt;p&gt;Hello&lt;/p&gt;
&lt;p&gt;If we change &lt;code&gt;#uuid&quot;...&quot;&lt;/code&gt; to &lt;code&gt;&quot;&quot;&lt;/code&gt; (from uuid to string), we get the exception (desired behavior)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clj -Sdeps '{:deps {com.datomic/dev-local {:mvn/version &quot;0.9.232&quot;}}}' -M \
  -e &quot;(require '[datomic.client.api :as d])&quot; \
  -e '(def client (d/client {:server-type :dev-local :system &quot;hello&quot;}))' \
  -e '(d/create-database client {:db-name &quot;hello&quot;})' \
  -e '(def conn (d/connect client {:db-name &quot;hello&quot;}))' \
  -e &quot;(d/q '[:find ?e :where [?e _ #uuid\&quot;00000000-0000-0000-0000-000000000000\&quot;]] (d/db conn))&quot;
=&amp;gt; #'user/client
=&amp;gt; true
=&amp;gt; #'user/conn
=&amp;gt; []
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Occour on (old) versions of datomic-free too&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clj -Sdeps '{:deps {com.datomic/datomic-free {:mvn/version &quot;0.9.5697&quot;}}}' \
  -M --report stderr \
  -e &quot;(require '[datomic.api :as d])&quot; \
  -e '(d/create-database &quot;datomic:mem://hello&quot;)' \
  -e '(def conn (d/connect &quot;datomic:mem://hello&quot;))' \
  -e &quot;(d/q '[:find ?e :where [?e _ #uuid\&quot;00000000-0000-0000-0000-000000000000\&quot;]] (d/db conn))&quot;
WARNING: requiring-resolve already refers to: #'clojure.core/requiring-resolve in namespace: datomic.common, being replaced by: #'datomic.common/requiring-resolve
=&amp;gt; true
=&amp;gt; #'user/conn
=&amp;gt; #{}
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/644/datomic-returns-insufficient-bindings-exception-expected</guid>
<pubDate>Wed, 07 Jul 2021 14:30:05 +0000</pubDate>
</item>
<item>
<title>Data model for simple shopping app</title>
<link>https://ask.datomic.com/index.php/643/data-model-for-simple-shopping-app</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I've got a question about data modeling with Datomic.&lt;/p&gt;
&lt;p&gt;I am learning Datomic by moving the storage from a small side project I built (&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/rollacaster/shopping-cards&quot;&gt;https://github.com/rollacaster/shopping-cards&lt;/a&gt;) from .edn files to Datomic.&lt;/p&gt;
&lt;p&gt;I translated the current data model 1:1 and got the following result (I used &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/hodur-org/hodur-graphviz-schema&quot;&gt;https://github.com/hodur-org/hodur-graphviz-schema&lt;/a&gt; to create this schema :&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/rollacaster/shopping-cards/blob/datomic/shopping-cards-schema.png&quot;&gt;https://github.com/rollacaster/shopping-cards/blob/datomic/shopping-cards-schema.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Is this is a &quot;proper&quot; Datomic data model or does Datomic has any capabilities to simplify this model (e.g. removing the CookedWith Entity)?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/643/data-model-for-simple-shopping-app</guid>
<pubDate>Tue, 06 Jul 2021 06:57:58 +0000</pubDate>
</item>
<item>
<title>Query values for more than one entity in a single datomic query (Roam Alpha Api)</title>
<link>https://ask.datomic.com/index.php/640/query-values-more-than-entity-single-datomic-query-roam-alpha</link>
<description>&lt;p&gt;I'd like to in a single datomic/datalog query get output relating to multiple entities&lt;/p&gt;
&lt;p&gt;E.g. &lt;/p&gt;
&lt;p&gt;In my db (querying Roam graph via RoamAlphaApi) for one value (&lt;code&gt;&quot;YjpbFUsTx&quot;&lt;/code&gt;) I can do this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[:find ?e ?stri :where [?e :block/uid &quot;YjpbFUsTx&quot;][?e :block/string ?stri]]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;gives me&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/IJMejXk.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;But I want to pass on two values &lt;code&gt;&quot;YjpbFUsTx&quot;&lt;/code&gt; and &lt;code&gt;&quot;TgpgOssBM&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;to give me&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/H6FzU4u.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;How do I do that? &lt;/p&gt;
&lt;p&gt;I've tried several variations but none give any output.&lt;/p&gt;
&lt;p&gt;Useful reference: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.zsolt.blog/2021/01/Roam-Data-Structure-Query.html&quot;&gt;https://www.zsolt.blog/2021/01/Roam-Data-Structure-Query.html&lt;/a&gt; .  &lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/640/query-values-more-than-entity-single-datomic-query-roam-alpha</guid>
<pubDate>Sat, 26 Jun 2021 19:47:35 +0000</pubDate>
</item>
<item>
<title>ClassCastException, d/with  inside transact function</title>
<link>https://ask.datomic.com/index.php/638/classcastexception-d-with-inside-transact-function</link>
<description>&lt;p&gt;Calling a transaction function that uses d/with in a dev-local, filesystem (i.e., not :storage-dir :mem) throws a ClassCastException on internal Datomic code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;com.datomic/dev-local {:mvn/version &quot;0.9.232&quot;}&lt;/li&gt;
&lt;li&gt;client-cloud 0.8.105&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Example with exception using file system dev-local.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def client (d/client {:server-type :dev-local
                         :storage-dir &quot;/tmp/cce-bug3&quot;
                         :system      &quot;test&quot;}))
=&amp;gt; #'user/client
(d/create-database client {:db-name &quot;test&quot;})
=&amp;gt; true
(def conn (d/connect client {:db-name &quot;test&quot;}))
=&amp;gt; #'user/conn
(d/transact conn {:tx-data [{:db/ident       :user/name
                               :db/valueType   :db.type/string
                               :db/cardinality :db.cardinality/one}]})
=&amp;gt;
{:db-before #datomic.core.db.Db{:id &quot;test&quot;,
                                :basisT 5,
                                :indexBasisT 0,
                                :index-root-id nil,
                                :asOfT nil,
                                :sinceT nil,
                                :raw nil},
 :db-after #datomic.core.db.Db{:id &quot;test&quot;,
                               :basisT 6,
                               :indexBasisT 0,
                               :index-root-id nil,
                               :asOfT nil,
                               :sinceT nil,
                               :raw nil},
 :tx-data [#datom[13194139533318 50 #inst&quot;2021-05-09T00:49:46.400-00:00&quot; 13194139533318 true]
           #datom[73 10 :user/name 13194139533318 true]
           #datom[73 40 23 13194139533318 true]
           #datom[73 41 35 13194139533318 true]
           #datom[0 13 73 13194139533318 true]],
 :tempids {}}
(defn my-tx-fn
    [db argm]
    (let [tx-report (d/with db {:tx-data [{:user/name &quot;asd&quot;}]})]
      []))
=&amp;gt; #'user/my-tx-fn
(d/transact conn {:tx-data [(list 'user/my-tx-fn {})]})
Execution error (ClassCastException) at datomic.dev-local.tx/datom-lookup-valfn (tx.clj:397).
class datomic.core.db.Datum cannot be cast to class java.lang.Number (datomic.core.db.Datum is in unnamed module of loader 'app'; java.lang.Number is in module java.base of loader 'bootstrap')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Working memdb example.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def client-memdb (d/client {:server-type :dev-local
                               :storage-dir :mem
                               :system      &quot;test&quot;}))
=&amp;gt; #'user/client-memdb
(d/create-database client-memdb {:db-name &quot;test&quot;})
=&amp;gt; true
(def conn-memdb (d/connect client-memdb {:db-name &quot;test&quot;}))
=&amp;gt; #'user/conn-memdb
(d/transact conn-memdb {:tx-data [{:db/ident       :user/name
                                     :db/valueType   :db.type/string
                                     :db/cardinality :db.cardinality/one}]})
=&amp;gt;
{:db-before #datomic.core.db.Db{:id &quot;394c7a65-bfeb-4dd4-b188-7aecd2057692&quot;,
                                :basisT 5,
                                :indexBasisT 0,
                                :index-root-id nil,
                                :asOfT nil,
                                :sinceT nil,
                                :raw nil},
 :db-after #datomic.core.db.Db{:id &quot;394c7a65-bfeb-4dd4-b188-7aecd2057692&quot;,
                               :basisT 6,
                               :indexBasisT 0,
                               :index-root-id nil,
                               :asOfT nil,
                               :sinceT nil,
                               :raw nil},
 :tx-data [#datom[13194139533318 50 #inst&quot;2021-05-09T01:02:57.965-00:00&quot; 13194139533318 true]
           #datom[73 10 :user/name 13194139533318 true]
           #datom[73 40 23 13194139533318 true]
           #datom[73 41 35 13194139533318 true]
           #datom[0 13 73 13194139533318 true]],
 :tempids {}}
(d/transact conn-memdb {:tx-data [(list 'user/my-tx-fn {})]})
=&amp;gt;
{:db-before #datomic.core.db.Db{:id &quot;394c7a65-bfeb-4dd4-b188-7aecd2057692&quot;,
                                :basisT 6,
                                :indexBasisT 0,
                                :index-root-id nil,
                                :asOfT nil,
                                :sinceT nil,
                                :raw nil},
 :db-after #datomic.core.db.Db{:id &quot;394c7a65-bfeb-4dd4-b188-7aecd2057692&quot;,
                               :basisT 7,
                               :indexBasisT 0,
                               :index-root-id nil,
                               :asOfT nil,
                               :sinceT nil,
                               :raw nil},
 :tx-data [#datom[13194139533319 50 #inst&quot;2021-05-09T01:03:08.042-00:00&quot; 13194139533319 true]],
 :tempids {}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Expectation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Transaction functions that use d/with do not throw a ClassCastException. Additionally, the behavior of d/with in all Datomic environments (Cloud, File system, Memdb) is consistent. Given a &lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.datomic.com/t/datomic-cloud-589-8846/1328&quot;&gt;previous Datomic Cloud release&lt;/a&gt; fixed a problem with using with-db from an Ion, it seems using d/with in a transaction function is a supported behavior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actual&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The final d/transact transaction function throws a ClassCastException when using d/with on some internal Datomic code. This only occurs when using a dev-local, file system environment.&lt;/p&gt;
&lt;p&gt;Full stacktrace is pasted below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#error{:cause &quot;class datomic.core.db.Datum cannot be cast to class java.lang.Number (datomic.core.db.Datum is in unnamed module of loader 'app'; java.lang.Number is in module java.base of loader 'bootstrap')&quot;,
       :via [{:type java.lang.ClassCastException,
              :message &quot;class datomic.core.db.Datum cannot be cast to class java.lang.Number (datomic.core.db.Datum is in unnamed module of loader 'app'; java.lang.Number is in module java.base of loader 'bootstrap')&quot;,
              :at [datomic.dev_local.tx$datom_lookup_valfn invokeStatic &quot;tx.clj&quot; 397]}],
       :trace [[datomic.dev_local.tx$datom_lookup_valfn invokeStatic &quot;tx.clj&quot; 397]
               [datomic.dev_local.tx$datom_lookup_valfn invoke &quot;tx.clj&quot; 397]
               [datomic.dev_local.local_log.LocalLog valAt &quot;local_log.clj&quot; 56]
               [clojure.lang.RT get &quot;RT.java&quot; 760]
               [datomic.dev_local.btindex.BTIndex cons &quot;btindex.clj&quot; 281]
               [clojure.lang.RT conj &quot;RT.java&quot; 677]
               [clojure.core$conj__5390 invokeStatic &quot;core.clj&quot; 85]
               [clojure.core$conj__5390 invoke &quot;core.clj&quot; 82]
               [datomic.core.db.Db addData &quot;db.clj&quot; 2322]
               [datomic.core.db$add_ensured_data invokeStatic &quot;db.clj&quot; 3353]
               [datomic.core.db$add_ensured_data invoke &quot;db.clj&quot; 3351]
               [datomic.core.db$with_tx invokeStatic &quot;db.clj&quot; 3370]
               [datomic.core.db$with_tx invoke &quot;db.clj&quot; 3357]
               [datomic.core.db.Db with &quot;db.clj&quot; 2164]
               [datomic.core.local_db$fn__25633 invokeStatic &quot;local_db.clj&quot; 67]
               [datomic.core.local_db$fn__25633 invoke &quot;local_db.clj&quot; 24]
               [datomic.client.api.protocols$fn__11959$G__11877__11966 invoke &quot;protocols.clj&quot; 126]
               [datomic.client.api$with invokeStatic &quot;api.clj&quot; 363]
               [datomic.client.api$with invoke &quot;api.clj&quot; 353]
               [user$my_tx_fn invokeStatic &quot;user.clj&quot; 3]
               [user$my_tx_fn invoke &quot;user.clj&quot; 20]
               [clojure.lang.AFn applyToHelper &quot;AFn.java&quot; 156]
               [clojure.lang.AFn applyTo &quot;AFn.java&quot; 144]
               [clojure.lang.Var applyTo &quot;Var.java&quot; 705]
               [clojure.core$apply invokeStatic &quot;core.clj&quot; 667]
               [clojure.core$apply invoke &quot;core.clj&quot; 660]
               [datomic.core.db.ProcessExpander inject &quot;db.clj&quot; 3229]
               [datomic.core.db.ProcessInpoint inject &quot;db.clj&quot; 2950]
               [datomic.dev_local.btindex_db$expand_tx$inject_all__18586$fn__18587 invoke &quot;btindex_db.clj&quot; 440]
               [clojure.lang.PersistentVector reduce &quot;PersistentVector.java&quot; 343]
               [clojure.core$reduce invokeStatic &quot;core.clj&quot; 6827]
               [clojure.core$reduce invoke &quot;core.clj&quot; 6810]
               [datomic.dev_local.btindex_db$expand_tx$inject_all__18586 invoke &quot;btindex_db.clj&quot; 440]
               [datomic.dev_local.btindex_db$expand_tx invokeStatic &quot;btindex_db.clj&quot; 444]
               [datomic.dev_local.btindex_db$expand_tx invoke &quot;btindex_db.clj&quot; 429]
               [datomic.dev_local.btindex_db$with_tx invokeStatic &quot;btindex_db.clj&quot; 468]
               [datomic.dev_local.btindex_db$with_tx invoke &quot;btindex_db.clj&quot; 461]
               [datomic.dev_local.impl.DurableConnection transact &quot;impl.clj&quot; 161]
               [datomic.client.api$transact invokeStatic &quot;api.clj&quot; 200]
               [datomic.client.api$transact invoke &quot;api.clj&quot; 183]
               [user$eval124260 invokeStatic &quot;user.clj&quot; 25]
               [user$eval124260 invoke &quot;user.clj&quot; 25]
               [clojure.lang.Compiler eval &quot;Compiler.java&quot; 7177]
               [clojure.lang.Compiler eval &quot;Compiler.java&quot; 7132]
               [clojure.core$eval invokeStatic &quot;core.clj&quot; 3214]
               [clojure.core$eval invoke &quot;core.clj&quot; 3210]
               [nrepl.middleware.interruptible_eval$evaluate$fn__959 invoke &quot;interruptible_eval.clj&quot; 91]
               [clojure.main$repl$read_eval_print__9086$fn__9089 invoke &quot;main.clj&quot; 437]
               [clojure.main$repl$read_eval_print__9086 invoke &quot;main.clj&quot; 437]
               [clojure.main$repl$fn__9095 invoke &quot;main.clj&quot; 458]
               [clojure.main$repl invokeStatic &quot;main.clj&quot; 458]
               [clojure.main$repl doInvoke &quot;main.clj&quot; 368]
               [clojure.lang.RestFn invoke &quot;RestFn.java&quot; 1523]
               [nrepl.middleware.interruptible_eval$evaluate invokeStatic &quot;interruptible_eval.clj&quot; 84]
               [nrepl.middleware.interruptible_eval$evaluate invoke &quot;interruptible_eval.clj&quot; 56]
               [nrepl.middleware.interruptible_eval$interruptible_eval$fn__985$fn__989
                invoke
                &quot;interruptible_eval.clj&quot;
                155]
               [clojure.lang.AFn run &quot;AFn.java&quot; 22]
               [nrepl.middleware.session$session_exec$main_loop__1086$fn__1090 invoke &quot;session.clj&quot; 190]
               [nrepl.middleware.session$session_exec$main_loop__1086 invoke &quot;session.clj&quot; 189]
               [clojure.lang.AFn run &quot;AFn.java&quot; 22]
               [java.lang.Thread run &quot;Thread.java&quot; 829]]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Evidence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The previously pasted example is reproducible and always throws a ClassCastException.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are unable to test functionality in a consistent manner. Local setups using dev-local file systems will not function as expected. Developers are unable to test features in the same way they will work in production.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/638/classcastexception-d-with-inside-transact-function</guid>
<pubDate>Thu, 24 Jun 2021 14:57:51 +0000</pubDate>
</item>
<item>
<title>d/client external server communication</title>
<link>https://ask.datomic.com/index.php/637/d-client-external-server-communication</link>
<description>&lt;p&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;com.datomic/client-cloud 0.8.105&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Get the docstring for &lt;code&gt;d/client&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(clojure.repl/doc d/client)
-------------------------
datomic.client.api/client
([arg-map])
  Create a client for a Datomic system. This function does not
communicate with a server and returns immediately.

For a cloud system, arg-map requires:

  :server-type   - :cloud
  :region        - AWS region, e.g. &quot;us-east-1&quot;
  :system        - your system name
  :endpoint      - IP address of your system or query group

Optionally, a cloud system arg-map accepts:

  :creds-provider  - instance of com.amazonaws.auth.AWSCredentialsProvider. Defaults to DefaultAWSCredentialsProviderChain
  :creds-profile   - name of an AWS Named Profile. See http://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html
  :proxy-port      - local port for SSH tunnel to bastion 

  Note: :creds-provider and :creds-profile are mutually exclusive, providing both will result in an error.

For a dev-local system, arg-map comprises:

  :server-type   - :dev-local (required)
  :system        - a system name (required)
  :storage-dir   - optional, overrides :storage-dir in ~/.datomic/dev-local.edn

dev-local stores databases under ${storage-dir}/${system}/${db-name}.

For a peer-server system, arg-map requires:

  :server-type   - :peer-server
  :access-key    - access-key from peer server launch
  :secret        - secret from peer server launch
  :endpoint      - peer server host:port
  :validate-hostnames  - false

Returns a client object.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the second sentence in the docstring: &quot;This function does not communicate with a server and returns immediately.&quot; Next call &lt;code&gt;d/client&lt;/code&gt; with an endpoint that does not exist.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/client {:server-type :ion
             :system      &quot;my-system&quot;
             :endpoint    &quot;http://i-dont-exist.datomic.net:8182&quot;
             :region      &quot;us-west-2&quot;})
Execution error (ExceptionInfo) at datomic.client.impl.cloud/get-s3-auth-path (cloud.clj:179).
Unable to connect to http://i-dont-exist.datomic.net:8182
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Expectation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Calling &lt;code&gt;d/client&lt;/code&gt; does not communicate with a server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actual&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Calling &lt;code&gt;d/client&lt;/code&gt; does communicate with a server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evidence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The above reproducible example indicates the &lt;code&gt;d/client&lt;/code&gt; function call is attempted to communicate the the passing in &lt;code&gt;:endpoint&lt;/code&gt; string given the exception thrown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;d/client&lt;/code&gt; docstring misleads the user by saying no server communication will occur when it does occur. The result is calls to &lt;code&gt;d/client&lt;/code&gt; can fail in unexpected ways when an external server communication is not accounted for. For example, we spin up Datomic Cloud query groups dynamically and attempt to communicate with the newly spun up cluster. Until the cluster is up and healthy, we expect calls to fail at &lt;code&gt;d/connect&lt;/code&gt; with an unavailable anomaly, and instead the calls would fail at &lt;code&gt;d/client&lt;/code&gt; with an unavailable anomaly.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/637/d-client-external-server-communication</guid>
<pubDate>Thu, 24 Jun 2021 14:55:59 +0000</pubDate>
</item>
<item>
<title>Failure to transact a DB after delete and re-create</title>
<link>https://ask.datomic.com/index.php/630/failure-to-transact-a-db-after-delete-and-re-create</link>
<description>&lt;p&gt;Hi, when we perform these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;delete-database&lt;/li&gt;
&lt;li&gt;create-database&lt;/li&gt;
&lt;li&gt;transact schema&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;...the transact fails with a cognitect.anomaly/forbidden citing a 403.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:msg &quot;YADA ! yada.components.user.handlers CreateUserTx:STEP MSG&quot;, :outcome &quot; FAILURE: Datomic Client Exception&quot;, :lvl &quot;⚠️ WARN&quot;, :loc &quot;yada/components/user/handlers.clj:134&quot;}
; Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).
; Datomic Client Exception
clj꞉yada.core꞉&amp;gt; 
*e
#error {
 :cause &quot;Datomic Client Exception&quot;
 :data {:cognitect.anomalies/category :cognitect.anomalies/forbidden, :http-result {:status 403, :headers {&quot;server&quot; &quot;Jetty(9.4.36.v20210114)&quot;, &quot;content-length&quot; &quot;19&quot;, &quot;date&quot; &quot;Wed, 23 Jun 2021 17:38:56 GMT&quot;, &quot;content-type&quot; &quot;application/transit+msgpack&quot;}, :body nil}}
 :via
 [{:type clojure.lang.ExceptionInfo
   :message &quot;Datomic Client Exception&quot;
   :data {:cognitect.anomalies/category :cognitect.anomalies/forbidden, :http-result {:status 403, :headers {&quot;server&quot; &quot;Jetty(9.4.36.v20210114)&quot;, &quot;content-length&quot; &quot;19&quot;, &quot;date&quot; &quot;Wed, 23 Jun 2021 17:38:56 GMT&quot;, &quot;content-type&quot; &quot;application/transit+msgpack&quot;}, :body nil}}
   :at [datomic.client.api.async$ares invokeStatic &quot;async.clj&quot; 58]}]
 :trace
 [[datomic.client.api.async$ares invokeStatic &quot;async.clj&quot; 58]
  [datomic.client.api.async$ares invoke &quot;async.clj&quot; 54]
  [datomic.client.api.sync$eval37636$fn__37641 invoke &quot;sync.clj&quot; 104]
  [datomic.client.api.protocols$fn__11841$G__11795__11848 invoke &quot;protocols.clj&quot; 72]
  [datomic.client.api$transact invokeStatic &quot;api.clj&quot; 200]
  [datomic.client.api$transact invoke &quot;api.clj&quot; 183]
  [datomic.cloud.client.local.Connection transact &quot;local.clj&quot; 97]
  [datomic.client.api$transact invokeStatic &quot;api.clj&quot; 200]
  [datomic.client.api$transact invoke &quot;api.clj&quot; 183]
  [yada.util.datomic$transact$fn__7133 invoke &quot;datomic.clj&quot; 428]
  [yada.util.anom$with_retry$fn__7039 invoke &quot;anom.clj&quot; 25]
  [yada.util.anom$with_retry invokeStatic &quot;anom.clj&quot; 25]
  [yada.util.anom$with_retry doInvoke &quot;anom.clj&quot; 13]
  [clojure.lang.RestFn invoke &quot;RestFn.java&quot; 410]
  [yada.util.datomic$transact invokeStatic &quot;datomic.clj&quot; 427]
  [yada.util.datomic$transact invoke &quot;datomic.clj&quot; 407]
  [yada.components.user.handlers$create_user_tx invokeStatic &quot;handlers.clj&quot; 142]
  [yada.components.user.handlers$create_user_tx invoke &quot;handlers.clj&quot; 131]
  [clojure.core.reducers$map$fn__26594$fn__26595 invoke &quot;reducers.clj&quot; 134]
  [clojure.lang.ArrayChunk reduce &quot;ArrayChunk.java&quot; 58]
  [clojure.core.protocols$fn__8178 invokeStatic &quot;protocols.clj&quot; 136]
  [clojure.core.protocols$fn__8178 invoke &quot;protocols.clj&quot; 124]
  [clojure.core.protocols$fn__8138$G__8133__8147 invoke &quot;protocols.clj&quot; 19]
  [clojure.core.protocols$seq_reduce invokeStatic &quot;protocols.clj&quot; 31]
  [clojure.core.protocols$fn__8174 invokeStatic &quot;protocols.clj&quot; 75]
  [clojure.core.protocols$fn__8174 invoke &quot;protocols.clj&quot; 75]
  [clojure.core.protocols$fn__8112$G__8107__8125 invoke &quot;protocols.clj&quot; 13]
  [clojure.core.reducers$folder$reify__26569 coll_reduce &quot;reducers.clj&quot; 93]
  [clojure.core$reduce invokeStatic &quot;core.clj&quot; 6833]
  [clojure.core$into invokeStatic &quot;core.clj&quot; 6900]
  [clojure.core$into invoke &quot;core.clj&quot; 6892]
  [yada.db.seed.app_seed.app_data.user$seed invokeStatic &quot;user.clj&quot; 56]
  [yada.db.seed.app_seed.app_data.user$seed invoke &quot;user.clj&quot; 52]
  [yada.db.seed.app_seed.core$seed invokeStatic &quot;core.clj&quot; 12]
  [yada.db.seed.app_seed.core$seed invoke &quot;core.clj&quot; 9]
  [yada.core$eval38738 invokeStatic &quot;NO_SOURCE_FILE&quot; 51]
  [yada.core$eval38738 invoke &quot;NO_SOURCE_FILE&quot; 51]
  [clojure.lang.Compiler eval &quot;Compiler.java&quot; 7181]
  [clojure.lang.Compiler eval &quot;Compiler.java&quot; 7136]
  [clojure.core$eval invokeStatic &quot;core.clj&quot; 3202]
  [clojure.core$eval invoke &quot;core.clj&quot; 3198]
  [nrepl.middleware.interruptible_eval$evaluate$fn__36286$fn__36287 invoke &quot;interruptible_eval.clj&quot; 87]
  [clojure.lang.AFn applyToHelper &quot;AFn.java&quot; 152]
  [clojure.lang.AFn applyTo &quot;AFn.java&quot; 144]
  [clojure.core$apply invokeStatic &quot;core.clj&quot; 667]
  [clojure.core$with_bindings_STAR_ invokeStatic &quot;core.clj&quot; 1977]
  [clojure.core$with_bindings_STAR_ doInvoke &quot;core.clj&quot; 1977]
  [clojure.lang.RestFn invoke &quot;RestFn.java&quot; 425]
  [nrepl.middleware.interruptible_eval$evaluate$fn__36286 invoke &quot;interruptible_eval.clj&quot; 87]
  [clojure.main$repl$read_eval_print__9112$fn__9115 invoke &quot;main.clj&quot; 437]
  [clojure.main$repl$read_eval_print__9112 invoke &quot;main.clj&quot; 437]
  [clojure.main$repl$fn__9121 invoke &quot;main.clj&quot; 458]
  [clojure.main$repl invokeStatic &quot;main.clj&quot; 458]
  [clojure.main$repl doInvoke &quot;main.clj&quot; 368]
  [clojure.lang.RestFn invoke &quot;RestFn.java&quot; 1523]
  [nrepl.middleware.interruptible_eval$evaluate invokeStatic &quot;interruptible_eval.clj&quot; 84]
  [nrepl.middleware.interruptible_eval$evaluate invoke &quot;interruptible_eval.clj&quot; 56]
  [nrepl.middleware.interruptible_eval$interruptible_eval$fn__36317$fn__36321 invoke &quot;interruptible_eval.clj&quot; 152]
  [clojure.lang.AFn run &quot;AFn.java&quot; 22]
  [nrepl.middleware.session$session_exec$main_loop__36385$fn__36389 invoke &quot;session.clj&quot; 202]
  [nrepl.middleware.session$session_exec$main_loop__36385 invoke &quot;session.clj&quot; 201]
  [clojure.lang.AFn run &quot;AFn.java&quot; 22]
  [java.lang.Thread run &quot;Thread.java&quot; 748]]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If we instead:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;delete-database&lt;/li&gt;
&lt;li&gt;redeploy app using Ion's tools for this&lt;/li&gt;
&lt;li&gt;create-database&lt;/li&gt;
&lt;li&gt;transact schema&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;...then all goes fine.&lt;/p&gt;
&lt;p&gt;So it seems that cycling the Datomic server helps somehow.&lt;/p&gt;
&lt;p&gt;We looked to see if we were caching the client or the connection and this doesn't seem to be the case. Is there some operational characteristics we should be aware of that would be in play after deleting a DB?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/630/failure-to-transact-a-db-after-delete-and-re-create</guid>
<pubDate>Tue, 22 Jun 2021 20:32:19 +0000</pubDate>
</item>
<item>
<title>Add query group ASG metrics to query group CW dashboard</title>
<link>https://ask.datomic.com/index.php/619/add-query-group-asg-metrics-to-query-group-cw-dashboard</link>
<description>&lt;p&gt;When looking at the query group dashboard, it is helpful to know what &quot;state&quot; the ASG was in when referencing the various dashboard metrics. Currently, I must do one of the following: 1) reference these metrics in the ASG monitoring tab (e.g., &lt;a rel=&quot;nofollow&quot; href=&quot;https://us-west-2.console.aws.amazon.com/ec2autoscaling/home?region=us-west-2#/details/my-query-group?view=monitoring&quot;&gt;https://us-west-2.console.aws.amazon.com/ec2autoscaling/home?region=us-west-2#/details/my-query-group?view=monitoring&lt;/a&gt;), 2) create a CW dashboard of my own, 3) modify the existing Datomic CW dashboard to add this chart. The ASG metrics answer questions like: 1) how many instances was my query group running? 2) was my query group trying to scale out or in? 3) why did my query group not scale out or in? &lt;/p&gt;
&lt;p&gt;I would find the following &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-monitoring.html#available-cloudwatch-metrics&quot;&gt;ASG metrics&lt;/a&gt; (in order of importance) useful additions to the current query group dashboard.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Service Instances (Count)&lt;/li&gt;
&lt;li&gt;Minimum Group Size (Count), Maximum Group Size (Count), and Desired Capacity (Count)&lt;/li&gt;
&lt;li&gt;Pending Instances (Count)&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/619/add-query-group-asg-metrics-to-query-group-cw-dashboard</guid>
<pubDate>Thu, 27 May 2021 17:22:27 +0000</pubDate>
</item>
<item>
<title>DDB size reduction after restore</title>
<link>https://ask.datomic.com/index.php/618/ddb-size-reduction-after-restore</link>
<description>&lt;p&gt;Hello. We have a large datomic database (15B datoms, 20TB DDB size). We have done a backup and a restore as a test and the resulting DDB is 500GB in size. Is this expected? A couple of datom count queries match on both databases, but the reduction from 20TB to 500GB still look a bit scary&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/618/ddb-size-reduction-after-restore</guid>
<pubDate>Tue, 25 May 2021 09:19:36 +0000</pubDate>
</item>
<item>
<title>How might multiple systems serve the same database in different contexts?</title>
<link>https://ask.datomic.com/index.php/617/might-multiple-systems-serve-database-different-contexts</link>
<description>&lt;p&gt;From &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/operation/planning.html#namin&quot;&gt;the guide on naming&lt;/a&gt; there is the following quote:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Multiple systems might serve the same primary database in different development stages. So you might name systems via the convention &quot;[db]-[stage]&quot;, e.g.&quot;inventory-dev&quot;, &quot;inventory-staging&quot; and &quot;inventory-prod&quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm trying to understand how this would work, and how I should think about my system, application, and database name, but I'm not really sure how this would work.&lt;/p&gt;
&lt;p&gt;My understanding was that you have one System per Storage stack, plus some number of Compute stacks, and that databases are &quot;owned&quot; by the Storage stack, but that doesn't make sense with the quote above.&lt;/p&gt;
&lt;p&gt;Can anyone give some examples of how this would work? I've read &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/operation/planning.html&quot;&gt;the planning guide&lt;/a&gt; but almost certainly don't fully understand it.&lt;/p&gt;
&lt;p&gt;Thank you!&lt;br&gt;
Evan&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/617/might-multiple-systems-serve-database-different-contexts</guid>
<pubDate>Mon, 24 May 2021 15:16:46 +0000</pubDate>
</item>
<item>
<title>What is a performant way to do &quot;and&quot; matching on attribute values?</title>
<link>https://ask.datomic.com/index.php/613/what-is-performant-way-to-do-and-matching-on-attribute-values</link>
<description>&lt;p&gt;So I can use&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[?entity1 ?attrname1 ?attrval]
[?entity2 ?attrname2 ?attrval]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in a &lt;code&gt;:where&lt;/code&gt;  clause to get &lt;code&gt;?entity1&lt;/code&gt; and &lt;code&gt;?entity2&lt;/code&gt; where there exists an &lt;code&gt;?attrval&lt;/code&gt; that matches&lt;/p&gt;
&lt;p&gt;I'm using&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  [(q '[:find (seq ?attrval)
        :in $ ?entity ?attrname
        :where [?entity ?attrname ?attrval]]
      db ?entity1 ?attrname1) [[?attrvals1]]]
  [(q '[:find (seq ?attrval)
        :in $ ?entity ?attrname
        :where [?entity ?attrname ?attrval]]
      db ?entity2 ?attrname2) [[?attrvals2]]]
  (not-join [?attrvals1 ?attrvals2]
               [(seq ?attrvals1) [?element ...]]
               (not [(contains? ?attrvals2 ?element)]))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to get &lt;code&gt;?entity1&lt;/code&gt;  and &lt;code&gt;?entity2&lt;/code&gt; where all &lt;code&gt;?attrval&lt;/code&gt;s for &lt;code&gt;?entity1&lt;/code&gt; exist for &lt;code&gt;?entity2&lt;/code&gt;. Is there a more performant way to do this??&lt;br&gt;
(This feels like a directional &quot;and&quot; to the implicit &quot;or&quot; being applied to each &lt;code&gt;attrval&lt;/code&gt; matching in the first case)&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/613/what-is-performant-way-to-do-and-matching-on-attribute-values</guid>
<pubDate>Fri, 21 May 2021 18:04:41 +0000</pubDate>
</item>
<item>
<title>AssertionError shows up as an Event?</title>
<link>https://ask.datomic.com/index.php/609/assertionerror-shows-up-as-an-event</link>
<description>&lt;p&gt;This surprised me.  In a lambda invocation, a failed &lt;code&gt;assert&lt;/code&gt; shows up as an &lt;code&gt;Event&lt;/code&gt;. I would have expected &lt;code&gt;Alert&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;Msg&quot;: &quot;IonLambdaException&quot;,
&quot;Ex&quot;: {
    &quot;Via&quot;: [
        {
            &quot;Type&quot;: &quot;java.lang.AssertionError&quot;,
            &quot;Message&quot;: &quot;Assert failed: (= (count s) 16)&quot;,
        }
    ],
    &quot;Cause&quot;: &quot;Assert failed: (= (count s) 16)&quot;
},
&quot;Type&quot;: &quot;Event&quot;,
&quot;Tid&quot;: 338,
&quot;Timestamp&quot;: 162134781093
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/609/assertionerror-shows-up-as-an-event</guid>
<pubDate>Tue, 18 May 2021 15:33:51 +0000</pubDate>
</item>
<item>
<title>Use Launch Template instead of Launch Configuration</title>
<link>https://ask.datomic.com/index.php/607/use-launch-template-instead-of-launch-configuration</link>
<description>&lt;p&gt;The compute Datomic CloudFormation templates (primary and query groups) create ASGs using launch configurations. Launch configurations do not support the full set of Auto Scaling group features. For example, you cannot create an Auto Scaling group that launches both Spot and On-Demand Instances or that specifies multiple instance types or multiple launch templates. In fact, &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html&quot;&gt;AWS recommends&lt;/a&gt; creating ASGs using launch templates, not launch configurations. &lt;/p&gt;
&lt;p&gt;We are interested in launch templates for its support for using Spot and On-Demand instances.&lt;/p&gt;
&lt;p&gt;EDIT: As of &lt;a rel=&quot;nofollow&quot; href=&quot;https://aws.amazon.com/blogs/compute/amazon-ec2-auto-scaling-will-no-longer-add-support-for-new-ec2-features-to-launch-configurations/&quot;&gt;2021-10-20&lt;/a&gt;, launch templates will not receive any new EC2 ASG features. &lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/607/use-launch-template-instead-of-launch-configuration</guid>
<pubDate>Fri, 07 May 2021 23:38:51 +0000</pubDate>
</item>
<item>
<title>Support for recent AWS instance types</title>
<link>https://ask.datomic.com/index.php/604/support-for-recent-aws-instance-types</link>
<description>&lt;p&gt;AWS has released several new instance types that are much better price per performance. It'd be great to have the Datomic query group template updated to support these instance types. The Datomic query group template currently supports the following instance types: t3.medium, m5.large, i3.large, i3.xlarge. Based on this, I propose the following additions: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t3a.medium (~10% cheaper than t3.medium)&lt;/li&gt;
&lt;li&gt;m5a.large (~10% cheaper than m5.large)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If Datomic can run on ARM based processors then further additions can be made with even better price per performance (the new AWS Graviton2 processors are fantastic. &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.honeycomb.io/blog/graviton2-one-year-retrospective/&quot;&gt;Read about Honeycomb's success&lt;/a&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t4g.medium (perhaps also large and xlarge, ~20% cheaper than t3.medium)&lt;/li&gt;
&lt;li&gt;m6g.large (~20% cheaper than m5.large)&lt;/li&gt;
&lt;li&gt;r6gd.large	(has NVMe based SSD, 26% cheaper than i3.large)&lt;/li&gt;
&lt;li&gt;I4i (&lt;a rel=&quot;nofollow&quot; href=&quot;https://aws.amazon.com/blogs/aws/new-storage-optimized-amazon-ec2-instances-i4i-powered-by-intel-xeon-scalable-ice-lake-processors/&quot;&gt;released 2022-04-28&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Datomic Solo instance type could also be configurable for some inconsequential savings. See monthly prices below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Current) t3.small primary + t3.nano bastion: $18.90&lt;/li&gt;
&lt;li&gt;t3a.small + t3a.nano: $17.15&lt;/li&gt;
&lt;li&gt;t4g.small + t4g.nano: $15.33&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An example Datomic query group monthly prices. Take a query group with 2 nodes running for the full month. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(Current) m5.large: $140.16&lt;/li&gt;
&lt;li&gt;m5a.large: $125.56 ($14.6/month savings)&lt;/li&gt;
&lt;li&gt;m6g.large: $112.42 ($27.74/month savings)&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/604/support-for-recent-aws-instance-types</guid>
<pubDate>Wed, 24 Mar 2021 18:36:03 +0000</pubDate>
</item>
<item>
<title>Make DesiredCapacity an optional parameter in the query group CF template</title>
<link>https://ask.datomic.com/index.php/603/desiredcapacity-optional-parameter-query-group-template</link>
<description>&lt;p&gt;Currently (March 2021) the Datomic query group CF template has the DesiredCapacity parameter marked as required. Because of this, during a CF template update, CF will always set the DesiredCapacity to the CF parameter for DesiredCapacity. This behavior does not work well in the following situation. &lt;/p&gt;
&lt;p&gt;In the query group template I have the &lt;code&gt;DesiredCapacity&lt;/code&gt; at 2, and &lt;code&gt;MaxCount&lt;/code&gt; at 4. I have an ASG scaling policy to target track 50% average CPU utilization. My query group is currently at the max, because the ASG scaling policy scaled up the group DesiredCapacity to 4 (to match my load). My load has increased to the point where 4 nodes is no longer sufficient. I must update the query group CF template to increase the MacCount. The problem is that when you update the MacCount from 4 to 6 via a CF template update and leave the DesiredCapacity at 2, CF will actually set the DesiredCapacity on the ASG to 2 during the high load situation. This worsens the high load situation. &lt;/p&gt;
&lt;p&gt;One option is to query the ASG for its current DesiredCapacity prior to running a CF update and set the CF parameter to the value you retrieved. This approach complicates the update procedure. It also has a &quot;read-modify-write&quot; race condition -- the DesiredCapacity could have changed from the time you read the DesiredCapacity to the time you are performing the CF update. &lt;/p&gt;
&lt;p&gt;A second option is to make the &lt;code&gt;DesiredCapacity&lt;/code&gt; parameter optional. As per the &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-desiredcapacity&quot;&gt;CF docs&lt;/a&gt;, &lt;code&gt;DesiredCapacity&lt;/code&gt; is not a required parameter. When it is not present, it defaults to the minimum size of the group. Leaving &lt;code&gt;DesiredCapacity&lt;/code&gt; unset will make it so during a CF update, CF will not modify the &lt;code&gt;DesiredCapacity&lt;/code&gt; at all -- leaving the ASG &quot;in control.&quot;&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/603/desiredcapacity-optional-parameter-query-group-template</guid>
<pubDate>Wed, 24 Mar 2021 17:24:25 +0000</pubDate>
</item>
<item>
<title>I am now seeing Iterator+offset is not available doing a an index-pull</title>
<link>https://ask.datomic.com/index.php/601/am-now-seeing-iterator-offset-not-available-doing-index-pull</link>
<description>&lt;p&gt;I am doing an index-pull in Datomic Cloud.  The request was timing out so I addedd :timeout 300000 and not &quot;Iterator+offset is not available&quot; exception starts popping up&lt;/p&gt;
&lt;p&gt;We are on 781-9041&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/601/am-now-seeing-iterator-offset-not-available-doing-index-pull</guid>
<pubDate>Mon, 08 Mar 2021 16:46:35 +0000</pubDate>
</item>
<item>
<title>Stack creation fails in AWS Control-Tower enrolled account</title>
<link>https://ask.datomic.com/index.php/593/stack-creation-fails-in-aws-control-tower-enrolled-account</link>
<description>&lt;p&gt;We tried creating a Solo stack in a new AWS account provisioned through our AWS Control Tower. This would be our second Solo stack, but the only one in this account. Not being used to everything AWS, I didn't think of creating myself an admin IAM user and launched the Cloud Formation directly from my admin SSO account. Here's what happened while creating the Storage's MountTargets:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE_FAILED: The IAM identity making this call has an IAM policy that is too large. Reduce...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/4YpgN9e.png&quot; alt=&quot;IAM policy that is too large&quot;&gt;&lt;/p&gt;
&lt;p&gt;I then realized what was happening and started afresh with a new IAM admin user. But here's what happens, again while creating the Storage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE_FAILED: Embedded stack arn:aws:cloudformation:us-east-1:&amp;lt;ACCOUNT&amp;gt;:stack/yada-demo-Storage&amp;lt;...&amp;gt; was not successfully created: The following resource(s) failed to create: [DatomicCmk, CatalogTable, FileSystem, LogGroup, LogTable].
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/HZXJYi9.png&quot; alt=&quot;Resources failed to create&quot;&gt;&lt;/p&gt;
&lt;p&gt;I suspect the creation failed because of leftovers that the Cloud Formation wasn't able to remove to replace them.&lt;/p&gt;
&lt;p&gt;More precisely, I suspect what's happening is that some of the Control Tower's Guardrails impede the stack (re)creation:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/AsAF4kI.png&quot; alt=&quot;AWS Control Tower Guardrails&quot;&gt;&lt;/p&gt;
&lt;p&gt;I'm currently cleaning out the leftovers and will try again one more time after that.&lt;/p&gt;
&lt;p&gt;If anyone knows anything about this, please share some help! I'll report back with my findings too.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/593/stack-creation-fails-in-aws-control-tower-enrolled-account</guid>
<pubDate>Fri, 26 Feb 2021 13:24:53 +0000</pubDate>
</item>
<item>
<title>Are Ions the only way to develop applications with Datomic Cloud?</title>
<link>https://ask.datomic.com/index.php/591/are-ions-the-only-way-develop-applications-with-datomic-cloud</link>
<description>&lt;p&gt;As I'm reading through the docs and getting a feel for how one interacts with Datomic Cloud, am I correct in thinking that app development happens with Ions, and there isn't a different method of deploying application code?&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/591/are-ions-the-only-way-develop-applications-with-datomic-cloud</guid>
<pubDate>Wed, 17 Feb 2021 17:30:21 +0000</pubDate>
</item>
<item>
<title>String length limit cloud vs dev-local</title>
<link>https://ask.datomic.com/index.php/567/string-length-limit-cloud-vs-dev-local</link>
<description>&lt;p&gt;The page &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/schema/schema-reference.html&quot;&gt;https://docs.datomic.com/cloud/schema/schema-reference.html&lt;/a&gt; states that:&lt;br&gt;
- Strings are limited to 4096 characters.&lt;/p&gt;
&lt;p&gt;And the dev-local page &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/dev-local.html&quot;&gt;https://docs.datomic.com/cloud/dev-local.html&lt;/a&gt; states:&lt;br&gt;
- dev-local limits strings to 4096 characters.&lt;/p&gt;
&lt;p&gt;Is the actual cloud environment string length longer than 4k chars? And what is the real limit.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/567/string-length-limit-cloud-vs-dev-local</guid>
<pubDate>Tue, 05 Jan 2021 13:21:18 +0000</pubDate>
</item>
<item>
<title>Dev-local query does not support :timeout</title>
<link>https://ask.datomic.com/index.php/564/dev-local-query-does-not-support-timeout</link>
<description>&lt;p&gt;Dev-local 0.9.229 does not appear to support &lt;code&gt;:timeout&lt;/code&gt; when querying. Here is a repro. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def client (d/client {:server-type :dev-local
                       :system      &quot;example&quot;}))
(d/create-database client {:db-name &quot;example&quot;})
(def conn (d/connect client {:db-name &quot;example&quot;}))
(d/transact conn {:tx-data [{:db/ident       :string
                             :db/cardinality :db.cardinality/one
                             :db/valueType   :db.type/string}]})
(dotimes [n 1000]
  (d/transact conn {:tx-data (map (fn [i]
                                    {:string (str n i)}) (range 1000))}))
(first
  (d/q {:query   '[:find (pull ?e [*])
                   :where
                   [?e :string]]
        :timeout 1000
        :args    [(d/db conn)]}))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The query takes longer than 1s and does not throw. I would have expected an exception thrown. &lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/564/dev-local-query-does-not-support-timeout</guid>
<pubDate>Wed, 30 Dec 2020 21:25:39 +0000</pubDate>
</item>
<item>
<title>Allow dev-local import-cloud :source and :dest to work with any :server-type</title>
<link>https://ask.datomic.com/index.php/561/allow-dev-local-import-cloud-source-dest-work-with-server-type</link>
<description>&lt;p&gt;Currently &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/dev-local.html#import-cloud&quot;&gt;import-cloud&lt;/a&gt; requires the &lt;code&gt;:source&lt;/code&gt; client &lt;code&gt;:server-type&lt;/code&gt; to be &lt;code&gt;:cloud&lt;/code&gt; and the &lt;code&gt;:dest&lt;/code&gt; &lt;code&gt;:server-type&lt;/code&gt; to be &lt;code&gt;:dev-local&lt;/code&gt;. It'd be great if this function allowed any &lt;code&gt;:server-type&lt;/code&gt; to be passed for &lt;code&gt;:source&lt;/code&gt; and &lt;code&gt;:dest&lt;/code&gt;. A possible use case would be copying a dev-local database to a cloud system for testing in a staging environment. &lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/561/allow-dev-local-import-cloud-source-dest-work-with-server-type</guid>
<pubDate>Sun, 20 Dec 2020 00:37:33 +0000</pubDate>
</item>
<item>
<title>Why is my float attribute returning double values in queries?</title>
<link>https://ask.datomic.com/index.php/558/why-is-my-float-attribute-returning-double-values-in-queries</link>
<description>&lt;p&gt;I have an attribute of type &lt;code&gt;:db.type/float&lt;/code&gt; in my Datomic Cloud (solo) instance. When I query for that value, however, I get values of type &lt;code&gt;java.lang.Double&lt;/code&gt;. (I actually have 6 float attributes and they all behave this way.)&lt;/p&gt;
&lt;p&gt;Is this a bug? I can't see anything in the documentation that describes this behavior. In fact, the &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/schema/schema-reference.html#db-valuetype&quot;&gt;schema reference&lt;/a&gt; seems to specifically say that it should be float value and not a double.&lt;/p&gt;
&lt;p&gt;This is not a big problem, but it is an annoyance because the values I'm transacting as floats are getting extra (noisy) precision added to them, so that e.g. when the user enters a 3.7, it actually shows up as 3.700000047683716. This isn't difficult to fix by casting to float, but it was surprising.&lt;/p&gt;
&lt;p&gt;I only see this behavior in Datomic Cloud, by the way. Using dev-local correctly shows the value as a float.&lt;/p&gt;
&lt;p&gt;Here's some relevant exchanges from a REPL session demonstrating the issue:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user&amp;gt; (d/q '[:find ?attr-type ?value :where
             [71587003061240196 :student/gpa-weighted-9 ?value]
             [:student/gpa-weighted-9 :db/valueType ?t]
             [?t :db/ident ?attr-type]]
           (d/db conn))
[[:db.type/float 3.700000047683716]]
user&amp;gt; (type (-&amp;gt; *1 first second))
java.lang.Double
user&amp;gt; (float 3.700000047683716)
3.7
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/558/why-is-my-float-attribute-returning-double-values-in-queries</guid>
<pubDate>Thu, 17 Dec 2020 04:25:11 +0000</pubDate>
</item>
<item>
<title>Can you use d/with inside a Cloud transaction function?</title>
<link>https://ask.datomic.com/index.php/557/can-you-use-d-with-inside-a-cloud-transaction-function</link>
<description>&lt;p&gt;Can you use d/with inside a Cloud transaction function? It's not clear from the &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/transactions/transaction-functions.html&quot;&gt;the docs&lt;/a&gt; if the db passed to the tx fn is one created by d/with-db.&lt;/p&gt;
</description>
<category>Cloud</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/557/can-you-use-d-with-inside-a-cloud-transaction-function</guid>
<pubDate>Tue, 15 Dec 2020 16:58:24 +0000</pubDate>
</item>
</channel>
</rss>