mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-04-07 11:08:36 +00:00
Fix bugs revealed by test failures
Introduced by the recent change to rhizome_bid_t everywhere
This commit is contained in:
parent
c3a4ab1f25
commit
f5e7db089c
17
rhizome.c
17
rhizome.c
@ -139,8 +139,7 @@ int rhizome_bundle_import_files(rhizome_manifest *m, const char *manifest_path,
|
||||
|
||||
/* Do we already have this manifest or newer? */
|
||||
int64_t dbVersion = -1;
|
||||
const char *id=rhizome_manifest_get(m, "id", NULL, 0);
|
||||
if (sqlite_exec_int64(&dbVersion, "SELECT version FROM MANIFESTS WHERE id = ?;", TEXT_TOUPPER, id, END) == -1)
|
||||
if (sqlite_exec_int64(&dbVersion, "SELECT version FROM MANIFESTS WHERE id = ?;", RHIZOME_BID_T, &m->cryptoSignPublic, END) == -1)
|
||||
return WHY("Select failure");
|
||||
|
||||
if (dbVersion>=m->version)
|
||||
@ -261,14 +260,12 @@ int rhizome_add_manifest(rhizome_manifest *m_in,int ttl)
|
||||
}
|
||||
|
||||
/* If the manifest already has an ID */
|
||||
char id[SID_STRLEN + 1];
|
||||
if (!rhizome_manifest_get(m_in, "id", id, SID_STRLEN + 1))
|
||||
/* no manifest ID */
|
||||
if (rhizome_bid_t_is_zero(m_in->cryptoSignPublic))
|
||||
return WHY("Manifest does not have an ID");
|
||||
|
||||
/* Discard the new manifest unless it is newer than the most recent known version with the same ID */
|
||||
int64_t storedversion = -1;
|
||||
switch (sqlite_exec_int64(&storedversion, "SELECT version FROM MANIFESTS WHERE id = ?;", TEXT_TOUPPER, id, END)) {
|
||||
switch (sqlite_exec_int64(&storedversion, "SELECT version FROM MANIFESTS WHERE id = ?;", RHIZOME_BID_T, &m_in->cryptoSignPublic, END)) {
|
||||
case -1:
|
||||
return WHY("Select failed");
|
||||
case 0:
|
||||
@ -280,7 +277,7 @@ int rhizome_add_manifest(rhizome_manifest *m_in,int ttl)
|
||||
if (m_in->version < storedversion)
|
||||
return WHY("Newer version exists");
|
||||
if (m_in->version == storedversion)
|
||||
return WHYF("Already have %s:%"PRId64", not adding", id, m_in->version);
|
||||
return WHYF("Already have %s:%"PRId64", not adding", alloca_tohex_rhizome_bid_t(m_in->cryptoSignPublic), m_in->version);
|
||||
break;
|
||||
default:
|
||||
return WHY("Select found too many rows!");
|
||||
@ -290,12 +287,6 @@ int rhizome_add_manifest(rhizome_manifest *m_in,int ttl)
|
||||
return rhizome_store_bundle(m_in);
|
||||
}
|
||||
|
||||
/* Update an existing Rhizome bundle */
|
||||
int rhizome_bundle_push_update(char *id,long long version,unsigned char *data,int appendP)
|
||||
{
|
||||
return WHY("Not implemented");
|
||||
}
|
||||
|
||||
/* When voice traffic is being carried, we need to throttle Rhizome down
|
||||
to a more sensible level. Or possibly even supress it entirely.
|
||||
*/
|
||||
|
@ -545,8 +545,8 @@ int _sqlite_vbind(struct __sourceloc __whence, int log_level, sqlite_retry_state
|
||||
}
|
||||
break;
|
||||
case INT64: {
|
||||
int64_t value = va_arg(ap, int64_t);
|
||||
BIND_DEBUG(INT64, sqlite3_bind_int64, "%"PRId64, value);
|
||||
sqlite3_int64 value = va_arg(ap, int64_t);
|
||||
BIND_DEBUG(INT64, sqlite3_bind_int64, "%"PRId64, (int64_t)value);
|
||||
BIND_RETRY(sqlite3_bind_int64, value);
|
||||
}
|
||||
break;
|
||||
@ -1642,12 +1642,12 @@ static int unpack_manifest_row(rhizome_manifest *m, sqlite3_stmt *statement)
|
||||
* Returns -1 on error
|
||||
* Caller is responsible for allocating and freeing rhizome_manifest
|
||||
*/
|
||||
int rhizome_retrieve_manifest(const rhizome_bid_t *bid, rhizome_manifest *m)
|
||||
int rhizome_retrieve_manifest(const rhizome_bid_t *bidp, rhizome_manifest *m)
|
||||
{
|
||||
sqlite_retry_state retry = SQLITE_RETRY_STATE_DEFAULT;
|
||||
sqlite3_stmt *statement = sqlite_prepare_bind(&retry,
|
||||
"SELECT id, manifest, version, inserttime, author FROM manifests WHERE id = ?",
|
||||
RHIZOME_BID_T, bid,
|
||||
RHIZOME_BID_T, bidp,
|
||||
END);
|
||||
if (!statement)
|
||||
return -1;
|
||||
@ -1655,7 +1655,7 @@ int rhizome_retrieve_manifest(const rhizome_bid_t *bid, rhizome_manifest *m)
|
||||
if (sqlite_step_retry(&retry, statement) == SQLITE_ROW)
|
||||
ret = unpack_manifest_row(m, statement);
|
||||
else
|
||||
INFOF("Manifest id=%s not found", alloca_tohex_rhizome_bid_t(*bid));
|
||||
INFOF("Manifest id=%s not found", alloca_tohex_rhizome_bid_t(*bidp));
|
||||
sqlite3_finalize(statement);
|
||||
return ret;
|
||||
}
|
||||
|
@ -417,8 +417,8 @@ rhizome_manifest *rhizome_direct_get_manifest(unsigned char *bid_prefix,int pref
|
||||
sqlite_retry_state retry = SQLITE_RETRY_STATE_DEFAULT;
|
||||
sqlite3_stmt *statement = sqlite_prepare_bind(&retry,
|
||||
"SELECT manifest, rowid FROM MANIFESTS WHERE id >= ? AND id <= ?",
|
||||
RHIZOME_BID_T, low,
|
||||
RHIZOME_BID_T, high,
|
||||
RHIZOME_BID_T, &low,
|
||||
RHIZOME_BID_T, &high,
|
||||
END);
|
||||
sqlite3_blob *blob=NULL;
|
||||
if (sqlite_step_retry(&retry, statement) == SQLITE_ROW)
|
||||
@ -731,10 +731,10 @@ void rhizome_direct_bundle_iterator_free(rhizome_direct_bundle_cursor **c)
|
||||
it is possible to make provably complete comparison of the contents
|
||||
of the respective rhizome databases.
|
||||
*/
|
||||
int rhizome_direct_get_bars(const rhizome_bid_t *bid_low,
|
||||
rhizome_bid_t *bid_high,
|
||||
int rhizome_direct_get_bars(const rhizome_bid_t *bidp_low,
|
||||
rhizome_bid_t *bidp_high,
|
||||
int64_t size_low, int64_t size_high,
|
||||
const rhizome_bid_t *bid_max,
|
||||
const rhizome_bid_t *bidp_max,
|
||||
unsigned char *bars_out,
|
||||
int bars_requested)
|
||||
{
|
||||
@ -746,8 +746,8 @@ int rhizome_direct_get_bars(const rhizome_bid_t *bid_low,
|
||||
" ORDER BY bar LIMIT ?;",
|
||||
INT64, size_low,
|
||||
INT64, size_high,
|
||||
RHIZOME_BID_T, bid_low,
|
||||
RHIZOME_BID_T, bid_high,
|
||||
RHIZOME_BID_T, bidp_low,
|
||||
RHIZOME_BID_T, bidp_max,
|
||||
INT, bars_requested,
|
||||
// The following formulation doesn't remove the weird returning of
|
||||
// bundles with out of range filesize values
|
||||
@ -797,7 +797,7 @@ int rhizome_direct_get_bars(const rhizome_bid_t *bid_low,
|
||||
|
||||
/* Remember the BID so that we cant write it into bid_high so that the
|
||||
caller knows how far we got. */
|
||||
str_to_rhizome_bid_t(bid_high, (const char *)sqlite3_column_text(statement, 2));
|
||||
str_to_rhizome_bid_t(bidp_high, (const char *)sqlite3_column_text(statement, 2));
|
||||
|
||||
bars_written++;
|
||||
break;
|
||||
|
@ -869,7 +869,7 @@ int rhizome_suggest_queue_manifest_import(rhizome_manifest *m, const struct sock
|
||||
|
||||
if (config.debug.rhizome_rx) {
|
||||
int64_t stored_version;
|
||||
if (sqlite_exec_int64(&stored_version, "SELECT version FROM MANIFESTS WHERE id = ?", RHIZOME_BID_T, m->cryptoSignPublic, END) > 0)
|
||||
if (sqlite_exec_int64(&stored_version, "SELECT version FROM MANIFESTS WHERE id = ?", RHIZOME_BID_T, &m->cryptoSignPublic, END) > 0)
|
||||
DEBUGF(" is new (have version %"PRId64")", stored_version);
|
||||
}
|
||||
|
||||
@ -1301,11 +1301,16 @@ int rhizome_write_complete(struct rhizome_fetch_slot *slot)
|
||||
}
|
||||
}
|
||||
|
||||
if (config.debug.rhizome_rx)
|
||||
if (config.debug.rhizome_rx) {
|
||||
time_ms_t now = gettime_ms();
|
||||
time_ms_t interval = now - slot->start_time;
|
||||
if (interval <= 0)
|
||||
interval = 1;
|
||||
DEBUGF("Closing rhizome fetch slot = 0x%p. Received %lld bytes in %lldms (%lldKB/sec).",
|
||||
slot,(long long)slot->write_state.file_offset,
|
||||
(long long)gettime_ms()-slot->start_time,
|
||||
(long long)(slot->write_state.file_offset)/(gettime_ms()-slot->start_time));
|
||||
(long long)interval,
|
||||
(long long)((slot->write_state.file_offset) / interval));
|
||||
}
|
||||
|
||||
rhizome_fetch_close(slot);
|
||||
RETURN(-1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user