瀏覽代碼

[Crystal] Run Lucky per core on machine (#6086)

* Run Lucky per core on machine

* Set a max pool size in dockerfile

* Add mutex lock around opening database connection

* Optimize Dockerfile for dev work and remove max pool size

* Update AppDatabase#db to match avram update
Matthew McGarvey 4 年之前
父節點
當前提交
9b519ab71f

+ 6 - 4
frameworks/Crystal/lucky/lucky.dockerfile

@@ -1,17 +1,19 @@
 FROM crystallang/crystal:0.35.1
 
 WORKDIR /lucky
+COPY shard.lock shard.lock
+COPY shard.yml shard.yml
+RUN shards install
+
 COPY config config
 COPY src src
 COPY run.sh run.sh
-COPY shard.lock shard.lock
-COPY shard.yml shard.yml
 
 ENV GC_MARKERS 1
 ENV LUCKY_ENV production
-ENV DATABASE_URL postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world?initial_pool_size=56&max_idle_pool_size=56
 
-RUN apt-get install -yqq libyaml-dev
 RUN shards build bench --release --no-debug
 
+ENV DATABASE_URL postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world?initial_pool_size=56&max_idle_pool_size=56
+
 CMD bash run.sh

+ 3 - 1
frameworks/Crystal/lucky/run.sh

@@ -1,5 +1,7 @@
 #!/bin/bash
 
-./bin/bench &
+for i in $(seq 1 $(nproc --all)); do
+  ./bin/bench &
+done
 
 wait

+ 10 - 0
frameworks/Crystal/lucky/src/app_database.cr

@@ -1,2 +1,12 @@
 class AppDatabase < Avram::Database
+  @@lock = Mutex.new
+
+  # added to avram in https://github.com/luckyframework/avram/commit/419cca8d25512be45766d3224e5c56deb2ce5bd2
+  private def db : DB::Database
+    @@db ||= @@lock.synchronize do
+      # check @@db again because a previous request could have set it after
+      # the first time it was checked
+      @@db || Avram::Connection.new(url, database_class: self.class).open
+    end
+  end
 end