Browse Source

Lithium update (#6336)

* Lithium update.

* Lithium update.
Matthieu Garrigues 4 years ago
parent
commit
985f2155ab
2 changed files with 22 additions and 9 deletions
  1. 12 5
      frameworks/C++/lithium/lithium.cc
  2. 10 4
      frameworks/C++/lithium/lithium_batch.cc

+ 12 - 5
frameworks/C++/lithium/lithium.cc

@@ -9,6 +9,7 @@
 #include "symbols.hh"
 using namespace li;
 
+
 template <typename B>
 void escape_html_entities(B& buffer, const std::string_view& data)
 {
@@ -41,6 +42,12 @@ void escape_html_entities(B& buffer, const std::string_view& data)
     }
 }
 
+int g_seed = 0;
+inline int random_int() { 
+  g_seed = (214013*g_seed+2531011); 
+  return (g_seed>>16)&0x7FFF; 
+} 
+
 #ifdef PROFILE_MODE
 void siege(int port) {
   auto sockets = http_benchmark_connect(512, port);
@@ -137,7 +144,7 @@ int main(int argc, char* argv[]) {
   };
   my_api.get("/db") = [&](http_request& request, http_response& response) {
     sql_db.max_async_connections_per_thread_ = db_nconn;
-    response.write_json(*random_numbers.connect(request.fiber).find_one(s::id = 1 + rand() % 10000));
+    response.write_json(*random_numbers.connect(request.fiber).find_one(s::id = 1 + random_int() % 10000));
   };
 
   my_api.get("/queries") = [&](http_request& request, http_response& response) {
@@ -148,7 +155,7 @@ int main(int argc, char* argv[]) {
     N = std::max(1, std::min(N, 500));
     
     auto c = random_numbers.connect(request.fiber);
-    response.write_json_generator(N, [&] { return *c.find_one(s::id = 1 + rand() % 10000); });
+    response.write_json_generator(N, [&] { return *c.find_one(s::id = 1 + random_int() % 10000); });
   };
 
   random_numbers.connect().forall([&] (const auto& number) {
@@ -160,7 +167,7 @@ int main(int argc, char* argv[]) {
     int N = atoi(N_str.c_str());
 
     response.write_json_generator(std::max(1, std::min(N, 500)), 
-      [&] { return world_cache.get(1 + rand() % 10000); });
+      [&] { return world_cache.get(1 + random_int() % 10000); });
   };
 
   my_api.get("/updates") = [&](http_request& request, http_response& response) {
@@ -180,8 +187,8 @@ int main(int argc, char* argv[]) {
 #endif
       for (int i = 0; i < N; i++)
       {
-        numbers[i] = *c.find_one(s::id = 1 + rand() % 10000);
-        numbers[i].randomNumber = 1 + rand() % 10000;
+        numbers[i] = *c.find_one(s::id = 1 + random_int() % 10000);
+        numbers[i].randomNumber = 1 + random_int() % 10000;
       }
 
       std::sort(numbers.begin(), numbers.end(), [] (auto a, auto b) { return a.id < b.id; });

+ 10 - 4
frameworks/C++/lithium/lithium_batch.cc

@@ -41,6 +41,12 @@ void escape_html_entities(B& buffer, const std::string_view& data)
     }
 }
 
+int g_seed = 0;
+inline int random_int() { 
+  g_seed = (214013*g_seed+2531011); 
+  return (g_seed>>16)&0x7FFF; 
+} 
+
 #ifdef PROFILE_MODE
 void siege(int port) {
   auto sockets = http_benchmark_connect(256, port);
@@ -98,7 +104,7 @@ int main(int argc, char* argv[]) {
     std::vector<decltype(orm.find_one(s::id = 1))> results;
     
     for (int i = 0; i < N; i++)
-      results.push_back(orm.find_one(s::id = 1 + (i*10000/N) + rand() % (10000/N)));
+      results.push_back(orm.find_one(s::id = 1 + (i*10000/N) + random_int() % (10000/N)));
     for (int i = 0; i < N; i++){
       // println(" read result " , i);
       numbers[i] = results[i]().value();
@@ -115,7 +121,7 @@ int main(int argc, char* argv[]) {
     response.write_json(s::message = "Hello, World!");
   };
   my_api.get("/db") = [&](http_request& request, http_response& response) {
-    response.write_json(random_numbers.connect(request.fiber).find_one(s::id = 1 + rand() % 10000)());
+    response.write_json(random_numbers.connect(request.fiber).find_one(s::id = 1 + random_int() % 10000)());
   };
 
   my_api.get("/queries") = [&](http_request& request, http_response& response) {
@@ -127,7 +133,7 @@ int main(int argc, char* argv[]) {
     auto orm = random_numbers.connect(request.fiber);
     std::vector<decltype(orm.find_one(s::id = 1))> results;
     for (int i = 0; i < N; i++)
-      results.push_back(orm.find_one(s::id = 1 + (i*10000/N) + rand() % (10000/N)));
+      results.push_back(orm.find_one(s::id = 1 + (i*10000/N) + random_int() % (10000/N)));
     
     int i = 0;
     response.write_json_generator(N, [&] { return results[i++]().value(); });
@@ -142,7 +148,7 @@ int main(int argc, char* argv[]) {
     auto numbers = select_N_random_numbers(c, N);
  
     for (int i = 0; i < N; i++)
-      numbers[i].randomNumber = 1 + rand() % 10000;
+      numbers[i].randomNumber = 1 + random_int() % 10000;
 
     auto req = c.bulk_update(numbers);
     if (N_SQL_CONNECTIONS * nthreads > 1) c.backend_connection().end_of_batch();