Environment
- com.datomic/client-cloud 0.8.105
History
Get the docstring for d/client
.
(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. "us-east-1"
: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.
Note the second sentence in the docstring: "This function does not communicate with a server and returns immediately." Next call d/client
with an endpoint that does not exist.
(d/client {:server-type :ion
:system "my-system"
:endpoint "http://i-dont-exist.datomic.net:8182"
:region "us-west-2"})
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
Expectation
Calling d/client
does not communicate with a server.
Actual
Calling d/client
does communicate with a server.
Evidence
The above reproducible example indicates the d/client
function call is attempted to communicate the the passing in :endpoint
string given the exception thrown.
Impact
The d/client
docstring misleads the user by saying no server communication will occur when it does occur. The result is calls to d/client
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 d/connect
with an unavailable anomaly, and instead the calls would fail at d/client
with an unavailable anomaly.