graalvm

bmcgavin 2023-05-03T09:45:37.913129Z

Hello there, I have something that I hope isn't an XY problem relating to holy-lambda, native image, and an aws lambda:thread:

igrishaev 2023-05-05T14:14:11.900199Z

Sorry what is the issue with the igrishaev/dynamodb library?

bmcgavin 2023-05-05T14:20:14.848179Z

Hi! I didn't understand the agent for holy lambda and I think I needed to use that to pre-fetch the masking protocol. No problem with the library itself.

igrishaev 2023-05-05T14:20:21.744219Z

Asking because I've been using that lib with native image in the cloud, and it works

igrishaev 2023-05-05T14:22:20.189009Z

btw, there is another lightweight framework for a binary lambda what you can find useful: https://github.com/igrishaev/lambda

👍 1
bmcgavin 2023-05-05T14:30:48.363549Z

Thanks, I'll check it out.

igrishaev 2023-05-05T14:31:59.152849Z

what is great about that lib, it builds a single bootstrap file which is a runtime by itself. Runs on bare linux (provided.al2)

bmcgavin 2023-05-05T15:03:46.655449Z

Nice, thanks both! I've learnt a lot about bare bones lambdas from these repos.

bmcgavin 2023-05-03T09:47:07.371569Z

I'm trying to call dynamodb from a native image lambda, and I've gone through faraday (which includes deprecated joda.time and commons-logging which caused issues I couldn't / didn't want to get into) and https://github.com/igrishaev/dynamodb which gave a similar error to one I'm about to paste from the cognitect-aws libraries :

bmcgavin 2023-05-03T09:48:26.784639Z

I've added an agent payload for holy-lambda to invoke dynamodb and the agent gives this error (but succeeds) when generating the configs :

Exception in agent-context:  #error {
 :cause No implementation of method: :-invoke of protocol: #'cognitect.aws.client.protocol/Client found for class: nil
 :via
 [{:type java.lang.IllegalArgumentException
   :message No implementation of method: :-invoke of protocol: #'cognitect.aws.client.protocol/Client found for class: nil
   :at [clojure.core$_cache_protocol_fn invokeStatic core_deftype.clj 583]}]
 :trace
 [[clojure.core$_cache_protocol_fn invokeStatic core_deftype.clj 583]
  [cognitect.aws.client.protocol$fn__10680$G__10636__10687 invoke protocol.clj 7]
  [cognitect.aws.client.api$invoke invokeStatic api.clj 130]
  [bmcgavin.birthday.db.dynamodb$fn__13282 invokeStatic dynamodb.clj 112]
  [bmcgavin.birthday.db.dynamodb$fn__13282 invoke dynamodb.clj 112]
  [bmcgavin.birthday.db.dynamodb__init load nil 112]
  [bmcgavin.birthday.db.dynamodb__init <clinit> nil -1]
  [java.lang.Class forName0 Class.java -2]
  [java.lang.Class forName Class.java 398]
  [clojure.lang.RT classForName RT.java 2212]
  [clojure.lang.RT classForName RT.java 2221]
  [clojure.lang.RT loadClassForName RT.java 2240]
  [clojure.lang.RT load RT.java 449]
  [clojure.lang.RT load RT.java 424]
  [clojure.core$load$fn__6856 invoke core.clj 6115]
  [clojure.core$load invokeStatic core.clj 6114]
  [clojure.core$load doInvoke core.clj 6098]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5897]
  [clojure.core$load_one invoke core.clj 5892]
  [clojure.core$load_lib$fn__6796 invoke core.clj 5937]
  [clojure.core$load_lib invokeStatic core.clj 5936]
  [clojure.core$load_lib doInvoke core.clj 5917]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 669]
  [clojure.core$load_libs invokeStatic core.clj 5974]
  [clojure.core$load_libs doInvoke core.clj 5958]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 669]
  [clojure.core$require invokeStatic core.clj 5996]
  [bmcgavin.birthday.db$loading__6737__auto____13264 invoke db.clj 1]
  [bmcgavin.birthday.db__init load nil 1]
  [bmcgavin.birthday.db__init <clinit> nil -1]
  [java.lang.Class forName0 Class.java -2]
  [java.lang.Class forName Class.java 398]
  [clojure.lang.RT classForName RT.java 2212]
  [clojure.lang.RT classForName RT.java 2221]
  [clojure.lang.RT loadClassForName RT.java 2240]
  [clojure.lang.RT load RT.java 449]
  [clojure.lang.RT load RT.java 424]
  [clojure.core$load$fn__6856 invoke core.clj 6115]
  [clojure.core$load invokeStatic core.clj 6114]
  [clojure.core$load doInvoke core.clj 6098]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.core$load_one invokeStatic core.clj 5897]
  [clojure.core$load_one invoke core.clj 5892]
  [clojure.core$load_lib$fn__6796 invoke core.clj 5937]
  [clojure.core$load_lib invokeStatic core.clj 5936]
  [clojure.core$load_lib doInvoke core.clj 5917]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 669]
  [clojure.core$load_libs invokeStatic core.clj 5974]
  [clojure.core$load_libs doInvoke core.clj 5958]
  [clojure.lang.RestFn applyTo RestFn.java 137]
  [clojure.core$apply invokeStatic core.clj 669]
  [clojure.core$require invokeStatic core.clj 5996]
  [bmcgavin.birthday.api$loading__6737__auto____3 invoke api.clj 1]
  [bmcgavin.birthday.api__init load nil 1]
  [bmcgavin.birthday.api__init <clinit> nil -1]
  [java.lang.Class forName0 Class.java -2]
  [java.lang.Class forName Class.java 398]
  [clojure.lang.RT classForName RT.java 2212]
  [clojure.lang.RT classForName RT.java 2221]
  [clojure.lang.RT loadClassForName RT.java 2240]
  [clojure.lang.RT load RT.java 449]
  [clojure.lang.RT load RT.java 424]
  [clojure.core$load$fn__6856 invoke core.clj 6115]
  [clojure.core$load invokeStatic core.clj 6114]
  [clojure.core$load doInvoke core.clj 6098]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [clojure.lang.Var invoke Var.java 384]
  [clojure.lang.Util loadWithClass Util.java 251]
  [bmcgavin.birthday.api <clinit> nil -1]]}

bmcgavin 2023-05-03T09:49:23.859559Z

The error I had with the other dynamodb library was very similar ('no implementation of method for protocol) but about mask and at runtime.

Karol Wójcik 2023-05-03T11:48:43.526159Z

Oh sorry. This is agent throwing an error. If this throws in agent it means it’s in regular Java process. It’s not directly connected to GraalVM.

Karol Wójcik 2023-05-03T11:50:55.211339Z

Took another look. Answered in #holy-lambda channel.

🙌 1