@@ -72,20 +72,17 @@ func (db *BindingPersistence) PutBinding(ephemeral, longTerm view.Identity) erro
7272 "INSERT INTO %s (ephemeral_hash, long_term_id) " +
7373 "SELECT '%s', long_term_id FROM %s WHERE ephemeral_hash=$1" ,
7474 db .table , ephemeral .UniqueID (), db .table )
75- result , err := db .writeDB .Exec (query , longTerm .UniqueID ())
76- if err != nil {
77- return errors .Wrapf (err , "failed executing query [%s]" , query )
78- }
79- rowsAffected , err := result .RowsAffected ()
80- if err != nil {
81- return errors .Wrapf (err , "query failed: %s" , query )
82- }
8375
84- if rowsAffected > 1 {
76+ if result , err := db .writeDB .Exec (query , longTerm .UniqueID ()); err != nil && errors .Is (db .errorWrapper .WrapError (err ), driver .UniqueKeyViolation ) {
77+ logger .Warnf ("Tuple [%s,%s] already in db. Skipping..." , ephemeral , longTerm )
78+ return nil
79+ } else if err != nil {
80+ return errors .Wrapf (err , "failed executing query [%s]" , query )
81+ } else if rowsAffected , err := result .RowsAffected (); err != nil {
82+ return errors .Wrapf (err , "failed fetching affected rows for query: %s" , query )
83+ } else if rowsAffected > 1 {
8584 panic ("unexpected result" )
86- }
87-
88- if rowsAffected == 1 {
85+ } else if rowsAffected == 1 {
8986 logger .Debugf ("New binding registered [%s:%s]" , ephemeral , longTerm )
9087 return nil
9188 }
@@ -96,11 +93,11 @@ func (db *BindingPersistence) PutBinding(ephemeral, longTerm view.Identity) erro
9693 // return errors.Wrapf(err, "failed inserting long-term id and ephemeral id")
9794 //}
9895 query = fmt .Sprintf ("INSERT INTO %s (ephemeral_hash, long_term_id) VALUES ($1, $2)" , db .table )
99- if _ , err = db .writeDB .Exec (query , longTerm .UniqueID (), longTerm ); err != nil {
96+ if _ , err : = db .writeDB .Exec (query , longTerm .UniqueID (), longTerm ); err != nil {
10097 return errors .Wrapf (err , "failed inserting long-term id and ephemeral id" )
10198 }
10299 query = fmt .Sprintf ("INSERT INTO %s (ephemeral_hash, long_term_id) VALUES ($1, $2)" , db .table )
103- if _ , err = db .writeDB .Exec (query , ephemeral .UniqueID (), longTerm ); err != nil {
100+ if _ , err : = db .writeDB .Exec (query , ephemeral .UniqueID (), longTerm ); err != nil {
104101 return errors .Wrapf (err , "failed inserting long-term id and ephemeral id" )
105102 }
106103 logger .Infof ("Long-term and ephemeral ids registered [%s,%s]" , longTerm , ephemeral )
0 commit comments