Fix bugs revealed by test failures

Introduced by the recent change to rhizome_bid_t everywhere
This commit is contained in:
Andrew Bettison 2013-10-04 03:12:52 +09:30
parent c3a4ab1f25
commit f5e7db089c
4 changed files with 26 additions and 30 deletions

View File

@ -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.
*/

View File

@ -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;
}

View File

@ -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;

View File

@ -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);