<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Datomic Knowledgebase - Questions without answers in Ions</title>
<link>https://ask.datomic.com/index.php/unanswered/ions</link>
<description>Powered by Question2Answer</description>
<item>
<title>Ion push failing with error message about (missing?, unreadable?) maven artifact ion-1.0.47.jar</title>
<link>https://ask.datomic.com/index.php/1890/failing-error-message-about-missing-unreadable-maven-artifact</link>
<description>&lt;p&gt;Attempting to push an ion and get an error about not finding (or unable to read) &lt;code&gt;ion-1.0.47.jar&lt;/code&gt;. I tried some troubleshooting and I don&#039;t think it is a permissions issue, because I am able to use the aws cli and copy &lt;code&gt;ion-0.9.7.jar&lt;/code&gt;. So why is 1.0.47 not working?&lt;/p&gt;
&lt;p&gt;deps.edn:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:mvn/repos {&quot;datomic-cloud&quot; {:url &quot;s3://datomic-releases-1fc2183a/maven/releases&quot;}}

 :aliases {
           :ion-dev {:deps {com.datomic/ion-dev {:mvn/version &quot;1.0.352&quot;}
                            com.datomic/client-cloud {:mvn/version &quot;1.0.131&quot;}
                            com.datomic/ion {:mvn/version &quot;1.0.71&quot;}}
                     :main-opts [&quot;-m&quot; &quot;datomic.ion.dev&quot;]}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;command I&#039;m trying to run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clojure -M:ion-dev &#039;{:op :push :creds-profile &quot;byt-wrought-test&quot; :region &quot;us-west-2&quot;}&#039;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:command-failed
 &quot;{:op :push :creds-profile \&quot;byt-wrought-test\&quot; :region \&quot;us-west-2\&quot;}&quot;,
 :causes
 ({:message
   &quot;Failed to read artifact descriptor for com.datomic:ion-http-direct:jar:1.0.47&quot;,
   :class ArtifactDescriptorException}
  {:message
   &quot;Could not transfer artifact com.datomic:ion-http-direct:pom:1.0.47 from/to datomic-cloud (s3://datomic-releases-1fc2183a/maven/releases): Unexpected error downloading artifact from datomic-releases-1fc2183a&quot;,
   :class ArtifactResolutionException}
  {:message
   &quot;Could not transfer artifact com.datomic:ion-http-direct:pom:1.0.47 from/to datomic-cloud (s3://datomic-releases-1fc2183a/maven/releases): Unexpected error downloading artifact from datomic-releases-1fc2183a&quot;,
   :class ArtifactTransferException}
  {:message
   &quot;Unexpected error downloading artifact from datomic-releases-1fc2183a&quot;,
   :class ExceptionInfo,
   :data
   {:bucket &quot;datomic-releases-1fc2183a&quot;,
    :path
    &quot;maven/releases/com/datomic/ion-http-direct/1.0.47/ion-http-direct-1.0.47.pom&quot;,
    :reason :cognitect.anomalies/fault}})}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Based on some conversations I found on slack and datomic dev forum, I tried this as a troubleshooting step:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aws --profile byt-wrangle-test s3 cp s3://datomic-releases-1fc2183a/maven/releases/com/datomic/ion/0.9.7/ion-0.9.7.jar .

download: s3://datomic-releases-1fc2183a/maven/releases/com/datomic/ion/0.9.7/ion-0.9.7.jar to ./ion-0.9.7.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and that works. But the same attempt with 1.0.47 does not:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aws --profile byt-wrangle-test s3 cp s3://datomic-releases-1fc2183a/maven/releases/com/datomic/ion/1.0.47/ion-1.0.47.jar .
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1890/failing-error-message-about-missing-unreadable-maven-artifact</guid>
<pubDate>Tue, 19 May 2026 19:40:21 +0000</pubDate>
</item>
<item>
<title>How to change the default 1 minute jetty async servlet timeout?</title>
<link>https://ask.datomic.com/index.php/939/how-to-change-the-default-minute-jetty-async-servlet-timeout</link>
<description>&lt;p&gt;We have some ring routes in our HTTP direct ring handler, which returns some Excel files, which are constructed on the fly.&lt;/p&gt;
&lt;p&gt;This handler sometimes runs for more than a minute, resulting in the following error:&lt;br&gt;
&lt;code&gt;HTTP ERROR 503 Async servlet timeout
URI:	/...
STATUS:	503
MESSAGE:	Async servlet timeout
SERVLET:	cognitect.http_endpoint.jetty.FnServlet-49bf6f8c
Powered by Jetty:// 9.4.48.v20220622&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;How can we raise this timeout to ~5minutes, which is the maximum timeout of AWS NLBs?&lt;/p&gt;
&lt;p&gt;(We are exposing the HTTP direct ion endpoint to the public internet via an AWS NLB, to avoid the 30s timeout and 10MB response payload limit of the AWS API Gateway)&lt;/p&gt;
&lt;p&gt;Multiple sources on the internet - eg. &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/ring-clojure/ring/issues/299&quot;&gt;https://github.com/ring-clojure/ring/issues/299&lt;/a&gt; - mention a &lt;code&gt;org.eclipse.jetty.server.HttpChannelState.DEFAULT_TIMEOUT&lt;/code&gt; Java property which is supposed to affect Jetty&#039;s async context timeout.&lt;/p&gt;
&lt;p&gt;Since the change of this property at runtime is not picked up by a running jetty instance, we have added provided it as a startup option, via the &lt;code&gt;OverrideSettings&lt;/code&gt; CloudFormation template parameter:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
{:OverrideSettings&lt;br&gt;
 (str &quot;export JVM_FLAGS=\&quot;$JVM_FLAGS&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  &quot; -Dclojure.server.repl=&quot;
  &quot;{:address,\\\&quot;0.0.0.0\\\&quot;,:port,50505,:accept,clojure.core.server/repl}&quot;
  &quot; -Dorg.eclipse.jetty.server.HttpChannelState.DEFAULT_TIMEOUT=300000&quot;
  &quot;\&quot;&quot;)}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It is indeed observable within the ion JVM process:&lt;br&gt;
&lt;code&gt;(Long/getLong &quot;org.eclipse.jetty.server.HttpChannelState.DEFAULT_TIMEOUT&quot;)
=&amp;gt; 300000&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Yet we are getting a 503 timeout response from the &lt;code&gt;cognitect.http_endpoint.jetty.FnServlet-49bf6f8c&lt;/code&gt; servlet after 1 minute still.&lt;/p&gt;
&lt;p&gt;Request, which take less then a minute work as expected.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/939/how-to-change-the-default-minute-jetty-async-servlet-timeout</guid>
<pubDate>Thu, 10 Aug 2023 16:01:07 +0000</pubDate>
</item>
<item>
<title>Troubleshooting :deploy-status &quot;FAILED&quot;, :code-deploy-status &quot;SUCCEEDED&quot;</title>
<link>https://ask.datomic.com/index.php/706/troubleshooting-deploy-status-failed-deploy-status-succeeded</link>
<description>&lt;p&gt;After a few days of attempting to launch Datomic Ion on AWS following the &lt;strong&gt;Ion Tutorial&lt;/strong&gt; [0], this appears to be the best I can do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:deploy-status &quot;FAILED&quot;, :code-deploy-status &quot;SUCCEEDED&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Searching CloudWatch for “Alert - Alert” reveals no events.&lt;/p&gt;
&lt;p&gt;I did not modify the &lt;code&gt;ion-starter&lt;/code&gt; codebase except for configuring the correct &lt;code&gt;:endpoint&lt;/code&gt; and &lt;code&gt;:app-name&lt;/code&gt;. (I believe this was done correctly because I completed all steps in “Develop at the REPL”[1] without a hitch.)&lt;/p&gt;
&lt;p&gt;[0]: &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/ions/ions-tutorial.html&quot;&gt;https://docs.datomic.com/cloud/ions/ions-tutorial.html&lt;/a&gt;&lt;br&gt;
[1]: &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/ions/ions-tutorial.html#repl&quot;&gt;https://docs.datomic.com/cloud/ions/ions-tutorial.html#repl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you for any pointers.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/706/troubleshooting-deploy-status-failed-deploy-status-succeeded</guid>
<pubDate>Mon, 21 Feb 2022 13:33:43 +0000</pubDate>
</item>
<item>
<title>How datomic.client.api/connect work?</title>
<link>https://ask.datomic.com/index.php/683/how-datomic-client-api-connect-work</link>
<description>&lt;p&gt;I interested how connection work.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When connection is open? (all time or when we call him)&lt;/li&gt;
&lt;li&gt;Can we hold connection opened all time ?  Is this good or bad?&lt;/li&gt;
&lt;li&gt;When we execute any transaction is it updated connection?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;maybe the questions are simple, but I would like to better understand how it works.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/683/how-datomic-client-api-connect-work</guid>
<pubDate>Mon, 15 Nov 2021 14:46:44 +0000</pubDate>
</item>
<item>
<title>How do I initialize core.async connections in Datomic Cloud?</title>
<link>https://ask.datomic.com/index.php/539/how-do-i-initialize-core-async-connections-in-datomic-cloud</link>
<description>&lt;p&gt;I need to &quot;hook up&quot; a core.async channel to a thread on system initialization. How might I go about doing this, or doing any initialization tasks?&lt;/p&gt;
&lt;p&gt;Thanks,&lt;br&gt;
Hadil&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/539/how-do-i-initialize-core-async-connections-in-datomic-cloud</guid>
<pubDate>Sat, 28 Nov 2020 23:53:01 +0000</pubDate>
</item>
<item>
<title>How can I get a ring-like request in ionized web handlers?</title>
<link>https://ask.datomic.com/index.php/537/how-can-i-get-a-ring-like-request-in-ionized-web-handlers</link>
<description>&lt;p&gt;Hello! After hearing the talks and reading the tutorial and documentation, I was under the impression that ions receive their requests in a ring-like format, and that we can &quot;wire a web handler to a single function, using a routing library such as Compojure or pedestal.&quot;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/ions/ions-tutorial.html#conclusion&quot;&gt;1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On one hand, this seems to be true with standard ion lambdas, but these are not exposed to the web. OTOH if we want to expose our web service, we need to write a web handler that we&#039;ll ionize. When we do that, the requests coming in lose their ring-like shape, and only expose the following keys:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; :headers
 :server-name
 :body
 :datomic.ion.edn.api-gateway/json
 :datomic.ion.edn.api-gateway/data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that, our router (reitit backed by ring) fails.&lt;/p&gt;
&lt;p&gt;I have seen different examples on the web where some router is exposed behind a single web handler, the most promising of which being probably &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/markbastian/replion&quot;&gt;Replion (look at the code)&lt;/a&gt; (and he uses reitit and ring and seems to have more success than us) and &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/pedestal/pedestal-ions-sample&quot;&gt;Pedestal Ions Sample&lt;/a&gt; (but Pedestal works in a relaxed ring context).&lt;/p&gt;
&lt;p&gt;So my question is: is there something obvious that I don&#039;t understand? Are there more working examples? Some people seem to write adapters to transform the requests to make them more ring-like. Are they doing the right thing, or are we all missing something?&lt;/p&gt;
&lt;p&gt;For example, here&#039;s a very naive adapter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defn get-path [req]
  (let [s (get-in req [:datomic.ion.edn.api-gateway/data :requestContext :stage] &quot;stg&quot;)
        p (get-in req [:datomic.ion.edn.api-gateway/data :requestContext :http :path] &quot;/&quot;)]
    (get (str/split p (re-pattern (str &quot;/&quot; s))) 1 &quot;/&quot;))) ; get rid of stage leading path!

(defn req-&amp;gt;ring-req [req]
  (assoc req
         :protocol (get-in req
                           [:datomic.ion.edn.api-gateway/data :requestContext :http :protocol] &quot;HTTP/1.1&quot;)
         :remote-addr (get-in req [:headers &quot;host&quot;] &quot;example.com&quot;)
         :request-method (keyword
                          (str/lower-case
                           (get-in req [:datomic.ion.edn.api-gateway/data :requestContext :http :method] &quot;GET&quot;)))
         :uri (get-path req)))

(defn app
  &quot;Web handler that returns the app&#039;s responses for each web request.&quot;
  [arg]
  (let [sta (start! arg)
        req (req-&amp;gt;ring-req arg)
        ret ((handler/app) req)]
    ret))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Another related question is: what is the &lt;code&gt;:integration&lt;/code&gt; key on &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/ions/ions-reference.html#lambda-config&quot;&gt;lambda configurations&lt;/a&gt;? Why does &quot;nobody&quot; use it, except Stu&#039;s slack event handler? What does it do? We tried setting it and didn&#039;t seem to observe an impact.&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/537/how-can-i-get-a-ring-like-request-in-ionized-web-handlers</guid>
<pubDate>Thu, 26 Nov 2020 19:04:57 +0000</pubDate>
</item>
<item>
<title>Bind Ions to IAM roles separate from their ambient compute role</title>
<link>https://ask.datomic.com/index.php/465/bind-ions-iam-roles-separate-from-their-ambient-compute-role</link>
<description>&lt;p&gt;Right now Ions run under the role of the underlying compute resources that they are deployed to. It would be nice to be able to give Ions a role independent of the ambient compute. This can be managed by the Ion runtime machinery by calling AssumeRole in the background, and supplying those creds to the Ions&lt;/p&gt;
&lt;p&gt;This is important so that Ions don&#039;t have to run with the permissions of all the other ions running in the same compute.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/465/bind-ions-iam-roles-separate-from-their-ambient-compute-role</guid>
<pubDate>Sun, 25 Oct 2020 19:58:49 +0000</pubDate>
</item>
<item>
<title>Bind Ions to IAM roles separate from their ambient compute role</title>
<link>https://ask.datomic.com/index.php/421/bind-ions-iam-roles-separate-from-their-ambient-compute-role</link>
<description>&lt;p&gt;Right now Ions run under the role of the underlying compute resources that they are deployed to. It would be nice to be able to give Ions a role independent of the ambient compute. This can be managed by the Ion runtime machinery by calling AssumeRole in the background, and supplying those creds to the Ions&lt;/p&gt;
&lt;p&gt;This is important so that Ions don&#039;t have to run with the permissions of all the other ions running in the same compute.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/421/bind-ions-iam-roles-separate-from-their-ambient-compute-role</guid>
<pubDate>Thu, 22 Oct 2020 17:28:02 +0000</pubDate>
</item>
<item>
<title>Allow users to redirect each type of Datomic.ion.cast message to different targets in local dev environment</title>
<link>https://ask.datomic.com/index.php/422/allow-redirect-datomic-message-different-targets-environment</link>
<description>&lt;p&gt;Ability to direct each ion.cast type (Event, alert, dev, metric) to specific targets in local dev.&lt;/p&gt;
</description>
<category>Ions</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/422/allow-redirect-datomic-message-different-targets-environment</guid>
<pubDate>Thu, 22 Oct 2020 17:06:23 +0000</pubDate>
</item>
</channel>
</rss>