|
|
|
@ -28,54 +28,38 @@ const sqlRemovePeer = "DELETE FROM peers WHERE mhash=$1;"
|
|
|
|
|
func getPeerStatus(mHash string) PeerStatus { |
|
|
|
|
var status PeerStatus |
|
|
|
|
row := getDB().QueryRow(sqlFindPeerByStatus, mHash) |
|
|
|
|
switch err := row.Scan(&status); err { |
|
|
|
|
case sql.ErrNoRows: |
|
|
|
|
err := row.Scan(&status) |
|
|
|
|
if err == sql.ErrNoRows { |
|
|
|
|
return "unknown" |
|
|
|
|
case nil: |
|
|
|
|
return status |
|
|
|
|
default: |
|
|
|
|
panicf("getPeerStatus failure: %s", err) |
|
|
|
|
panic(err) |
|
|
|
|
} |
|
|
|
|
check(err, "getPeerStatus error I") |
|
|
|
|
return status |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func addPeer(mHash string, status PeerStatus) { |
|
|
|
|
tx, err := getDB().Begin() |
|
|
|
|
if err != nil { |
|
|
|
|
panicf("Failed to begin addPeer trx (0): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err, "Failed to begin addPeer trx (0): %s", err) |
|
|
|
|
_, err2 := tx.Exec(sqlCreatePeer, mHash, status) |
|
|
|
|
if err2 != nil { |
|
|
|
|
// This .Commit() call never gets hit:
|
|
|
|
|
err1 := tx.Rollback() |
|
|
|
|
if err1 != nil { |
|
|
|
|
panicf("Failed to rollback peer (1): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err1, "Failed to rollback peer (1): %s", err) |
|
|
|
|
panic(fmt.Sprintf("Failure. Possible duplicate peer?: %s", err2)) |
|
|
|
|
} |
|
|
|
|
err1 := tx.Commit() |
|
|
|
|
if err1 != nil { |
|
|
|
|
panicf("Failed to commit peer (2): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err1, "Failed to commit peer (2): %s", err1) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func removePeer(mHash string) { |
|
|
|
|
tx, err := getDB().Begin() |
|
|
|
|
if err != nil { |
|
|
|
|
panicf("Failed to begin removePeer trx (0): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err, "Failed to begin removePeer trx (0): %s", err) |
|
|
|
|
_, err2 := tx.Exec(sqlRemovePeer, mHash) |
|
|
|
|
if err2 != nil { |
|
|
|
|
err1 := tx.Rollback() |
|
|
|
|
if err1 != nil { |
|
|
|
|
panicf("Failed to rollback removePeer (1): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err1, "Failed to rollback removePeer (1): %s", err) |
|
|
|
|
panic(fmt.Sprintf("Failure. Possible duplicate peer?: %s", err2)) |
|
|
|
|
} |
|
|
|
|
err1 := tx.Commit() |
|
|
|
|
if err1 != nil { |
|
|
|
|
panicf("Failed to commit peer removal (2): %s", err) |
|
|
|
|
} |
|
|
|
|
check(err1, "Failed to commit peer removal (2): %s", err1) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func listPeers() []peer { |
|
|
|
@ -84,22 +68,16 @@ func listPeers() []peer {
|
|
|
|
|
mhash string |
|
|
|
|
) |
|
|
|
|
rows, err := getDB().Query(sqlGetAllPeers) |
|
|
|
|
if err != nil { |
|
|
|
|
panicf("showPeers query failure: %s", err) |
|
|
|
|
} |
|
|
|
|
check(err, "showPeers query failure: %s", err) |
|
|
|
|
defer rows.Close() |
|
|
|
|
output := []peer{} |
|
|
|
|
for rows.Next() { |
|
|
|
|
err := rows.Scan(&mhash, &status) |
|
|
|
|
if err != nil { |
|
|
|
|
panicf("Show peers row scan failure: %s", err) |
|
|
|
|
} |
|
|
|
|
check(err, "Show peers row scan failure: %s", err) |
|
|
|
|
output = append(output, peer{mhash: mhash, status: status}) |
|
|
|
|
} |
|
|
|
|
err = rows.Err() |
|
|
|
|
if err != nil { |
|
|
|
|
panicf("showPeers row error: %s", err) |
|
|
|
|
} |
|
|
|
|
check(err, "showPeers row error: %s", err) |
|
|
|
|
return output |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|