wallet: Moving wallet_channel->peer_id into the peer struct

This was supposed to be a temporary solution anyway, and I had a
rather annoying mixup between peer_id and unique_id, the latter of
which is actually a connection identifier.
This commit is contained in:
Christian Decker 2017-08-14 22:06:59 +02:00 committed by Rusty Russell
parent 29785d4990
commit 4bc0750882
5 changed files with 12 additions and 11 deletions

View File

@ -541,7 +541,6 @@ static struct wallet_channel *peer_channel_new(struct wallet *w,
wc->peer = peer;
/* TODO(cdecker) See if we already stored this peer in the DB and load if yes */
wc->peer_id = 0;
wc->id = 0;
if (!wallet_channel_save(w, wc)) {

View File

@ -20,6 +20,9 @@ struct crypto_state;
struct peer {
struct lightningd *ld;
/* Database ID of the peer */
u64 dbid;
/* Unique ID of connection (works even if we have multiple to same id) */
u64 unique_id;

View File

@ -395,7 +395,7 @@ static bool wallet_peer_load(struct wallet *w, const u64 id, struct peer *peer)
sqlite3_finalize(stmt);
return false;
}
peer->unique_id = sqlite3_column_int64(stmt, 0);
peer->dbid = sqlite3_column_int64(stmt, 0);
ok &= sqlite3_column_pubkey(stmt, 1, &peer->id);
sqlite3_finalize(stmt);
return ok;
@ -420,8 +420,8 @@ static bool wallet_stmt2channel(struct wallet *w, sqlite3_stmt *stmt,
chan->peer = talz(chan, struct peer);
}
chan->peer->unique_id = sqlite3_column_int64(stmt, col++);
chan->peer_id = sqlite3_column_int64(stmt, col++);
wallet_peer_load(w, chan->peer_id, chan->peer);
chan->peer->dbid = sqlite3_column_int64(stmt, col++);
wallet_peer_load(w, chan->peer->dbid, chan->peer);
if (sqlite3_column_short_channel_id(stmt, col++, &scid)) {
chan->peer->scid = tal(chan->peer, struct short_channel_id);
@ -649,19 +649,19 @@ bool wallet_channel_save(struct wallet *w, struct wallet_channel *chan){
struct peer *p = chan->peer;
tal_t *tmpctx = tal_tmpctx(w);
if (chan->peer_id == 0) {
if (p->dbid == 0) {
/* Need to store the peer first */
ok &= db_exec(__func__, w->db,
"INSERT INTO peers (node_id) VALUES ('%s');",
db_serialize_pubkey(tmpctx, &chan->peer->id));
chan->peer_id = sqlite3_last_insert_rowid(w->db->sql);
p->dbid = sqlite3_last_insert_rowid(w->db->sql);
}
db_begin_transaction(w->db);
/* Insert a stub, that we can update, unifies INSERT and UPDATE paths */
if (chan->id == 0) {
ok &= db_exec(__func__, w->db, "INSERT INTO channels (peer_id) VALUES (%"PRIu64");", chan->peer_id);
ok &= db_exec(__func__, w->db, "INSERT INTO channels (peer_id) VALUES (%"PRIu64");", p->dbid);
chan->id = sqlite3_last_insert_rowid(w->db->sql);
}

View File

@ -52,7 +52,6 @@ struct wallet_shachain {
/* TODO(cdecker) Separate peer from channel */
struct wallet_channel {
u64 id;
u64 peer_id;
struct peer *peer;
};

View File

@ -132,7 +132,7 @@ static bool channelseq(struct wallet_channel *c1, struct wallet_channel *c2)
struct channel_info *ci1 = p1->channel_info, *ci2 = p2->channel_info;
struct changed_htlc *lc1 = p1->last_sent_commit, *lc2 = p2->last_sent_commit;
CHECK(c1->id == c2->id);
CHECK(c1->peer_id == c2->peer_id);
CHECK(c1->peer->dbid == c2->peer->dbid);
CHECK(p1->their_shachain.id == p2->their_shachain.id);
CHECK_MSG(pubkey_eq(&p1->id, &p2->id), "NodeIDs do not match");
CHECK((p1->scid == NULL && p2->scid == NULL) || short_channel_id_eq(p1->scid, p2->scid));
@ -221,7 +221,7 @@ static bool test_channel_crud(const tal_t *ctx)
/* We just inserted them into an empty DB so this must be 1 */
CHECK(c1.id == 1);
CHECK(c1.peer_id == 1);
CHECK(c1.peer->dbid == 1);
CHECK(c1.peer->their_shachain.id == 1);
/* Variant 2: update with scid set */
@ -232,7 +232,7 @@ static bool test_channel_crud(const tal_t *ctx)
/* Updates should not result in new ids */
CHECK(c1.id == 1);
CHECK(c1.peer_id == 1);
CHECK(c1.peer->dbid == 1);
CHECK(c1.peer->their_shachain.id == 1);
/* Variant 3: update with our_satoshi set */