comparison Framework/MySQL/MySQLDatabase.cpp @ 234:d1b124d116c1

PostgreSQL index plugin handles retries for collisions between multiple writers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Apr 2021 10:50:01 +0200
parents a4918d57435c
children d1d2edbbe6fb
comparison
equal deleted inserted replaced
233:7d46c99523a2 234:d1b124d116c1
67 error == CR_SERVER_LOST || 67 error == CR_SERVER_LOST ||
68 error == ER_QUERY_INTERRUPTED) 68 error == ER_QUERY_INTERRUPTED)
69 { 69 {
70 throw Orthanc::OrthancException(Orthanc::ErrorCode_DatabaseUnavailable); 70 throw Orthanc::OrthancException(Orthanc::ErrorCode_DatabaseUnavailable);
71 } 71 }
72 else if (error == ER_LOCK_DEADLOCK)
73 {
74 throw Orthanc::OrthancException(Orthanc::ErrorCode_DatabaseCannotSerialize);
75 }
72 else 76 else
73 { 77 {
74 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); 78 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database);
75 } 79 }
76 } 80 }
625 protected: 629 protected:
626 virtual IDatabase* TryOpen() 630 virtual IDatabase* TryOpen()
627 { 631 {
628 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); 632 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_));
629 db->Open(); 633 db->Open();
634 db->Execute("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false);
630 return db.release(); 635 return db.release();
631 } 636 }
632 637
633 public: 638 public:
634 Factory(const MySQLParameters& parameters) : 639 Factory(const MySQLParameters& parameters) :