gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-anastasis] branch master updated: Worked on recovery


From: gnunet
Subject: [GNUnet-SVN] [taler-anastasis] branch master updated: Worked on recovery_document upload
Date: Tue, 22 Oct 2019 00:32:31 +0200

This is an automated email from the git hooks/post-receive script.

dennis-neufeld pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new c733ae8  Worked on recovery_document upload
c733ae8 is described below

commit c733ae84027eb667643aed21dcb94b958926101d
Author: Dennis Neufeld <address@hidden>
AuthorDate: Mon Oct 21 22:31:50 2019 +0000

    Worked on recovery_document upload
---
 src/backup-db/DB-Schema.png               | Bin 22631 -> 0 bytes
 src/backup-db/plugin_anastasis_postgres.c |  93 +++++++++++++++++++++++++-----
 2 files changed, 78 insertions(+), 15 deletions(-)

diff --git a/src/backup-db/DB-Schema.png b/src/backup-db/DB-Schema.png
deleted file mode 100644
index 6a214c5..0000000
Binary files a/src/backup-db/DB-Schema.png and /dev/null differ
diff --git a/src/backup-db/plugin_anastasis_postgres.c 
b/src/backup-db/plugin_anastasis_postgres.c
index 9ff91cb..b2d1266 100644
--- a/src/backup-db/plugin_anastasis_postgres.c
+++ b/src/backup-db/plugin_anastasis_postgres.c
@@ -231,22 +231,85 @@ postgres_store_recovery_document (void *cls,
                                   uint32_t *version)
 {
   struct PostgresClosure *pg = cls;
+  enum GNUNET_DB_QueryStatus qs;
+  struct GNUNET_TIME_Absolute paid_until;
+  
+  check_connection (pg);
+    if (GNUNET_OK !=
+        begin_transaction (pg))
+    {
+      GNUNET_break (0);
+      return GNUNET_DB_STATUS_HARD_ERROR;
+    }
+
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_auto_from_type (anastasis_pub),
-    GNUNET_PQ_query_param_fixed_size (data, data_size),
-    GNUNET_PQ_query_param_auto_from_type (payment_secret),
-    //    GNUNET_PQ_query_param_uint32 (version),
     GNUNET_PQ_query_param_end
   };
+  struct GNUNET_PQ_ResultSpec rs[] = {
+      TALER_PQ_result_spec_absolute_time ("paid_until",
+                                         &paid_until),
+      GNUNET_PQ_result_spec_end
+    };
+    
+  qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+                                                  "user_select",
+                                                  params,
+                                                  rs);
+
+  switch (qs)
+  {
+  case GNUNET_DB_STATUS_HARD_ERROR:
+    rollback (pg);
+    return qs;
+  case GNUNET_DB_STATUS_SOFT_ERROR:
+    // FIXME: or: retry internally?
+    rollback (pg);      
+    return qs;
+  case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+    return GNUNET_DB_STATUS_UNKNOWN_USER; //FIXME: This status has to be 
defined!
+  case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+    paid_until = GNUNET_TIME_absolute_max (GNUNET_TIME_absolute_get (),
+              paid_until);
+    break;
+  } 
   
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "inserting recovery document: user_id: %s, version: %i.\n",
-              GNUNET_p2s (anastasis_pub),
-              version);
-  check_connection (pg);
-  return GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                             "store_recovery_document",
-                                             params);
+
+  //upload if last payment is still valid
+  if (GNUNET_TIME_absolute_get_difference(GNUNET_TIME_absolute_get, paid_until 
!= 0))
+  {
+    struct GNUNET_PQ_QueryParam params[] = {
+      GNUNET_PQ_query_param_auto_from_type (anastasis_pub),
+      GNUNET_PQ_query_param_fixed_size (data, data_size),
+      GNUNET_PQ_query_param_end
+    };
+
+    qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
+                                              "recovery_document_insert", 
//FIXME: Has to be defined
+                                              params);
+  }
+
+  switch (qs)
+  {
+  case GNUNET_DB_STATUS_HARD_ERROR:
+    rollback (pg);
+    return qs;
+  case GNUNET_DB_STATUS_SOFT_ERROR:
+    // FIXME: or: retry internally?
+    rollback (pg);      
+    return qs;
+  case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+    GNUNET_break (0);
+    rollback (pg);      
+    return GNUNET_DB_STATUS_HARD_ERROR;
+  case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:      
+    break;
+  }
+
+  qs = commit_transaction (pg);
+  if (qs < 0)
+    return qs;
+  return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
 }
 
 
@@ -374,8 +437,8 @@ postgres_record_payment (void *cls,
       /* user did not yet exist, create */
       struct GNUNET_PQ_QueryParam params[] = {
         GNUNET_PQ_query_param_auto_from_type (anastasis_pub),
-       GNUNET_PQ_query_param_absolute_time (&paid_until),
-       GNUNET_PQ_query_param_end
+             GNUNET_PQ_query_param_absolute_time (&paid_until),
+             GNUNET_PQ_query_param_end
       };
       
       qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
@@ -386,9 +449,9 @@ postgres_record_payment (void *cls,
     {
       /* user exists, update */
       struct GNUNET_PQ_QueryParam params[] = {
-       GNUNET_PQ_query_param_absolute_time (&paid_until),
+             GNUNET_PQ_query_param_absolute_time (&paid_until),
         GNUNET_PQ_query_param_auto_from_type (anastasis_pub),
-       GNUNET_PQ_query_param_end
+             GNUNET_PQ_query_param_end
       };
       
       qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]