aboutsummaryrefslogtreecommitdiff
path: root/src/datastore
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-04-15 20:12:21 +0000
committerChristian Grothoff <christian@grothoff.org>2011-04-15 20:12:21 +0000
commitae6871c097e55b61d10a66428b1c9a732a0fe803 (patch)
treeb95dd510cc8d44bf2cdd59344353de9554e36938 /src/datastore
parentadfeb308f7af770dd7ff16b3e5ce79943ddb6818 (diff)
downloadgnunet-ae6871c097e55b61d10a66428b1c9a732a0fe803.tar.gz
gnunet-ae6871c097e55b61d10a66428b1c9a732a0fe803.zip
fixes
Diffstat (limited to 'src/datastore')
-rw-r--r--src/datastore/gnunet-service-datastore.c10
-rw-r--r--src/datastore/perf_datastore_api.c34
-rw-r--r--src/datastore/plugin_datastore_mysql.c75
3 files changed, 45 insertions, 74 deletions
diff --git a/src/datastore/gnunet-service-datastore.c b/src/datastore/gnunet-service-datastore.c
index 619d89732..566a227c1 100644
--- a/src/datastore/gnunet-service-datastore.c
+++ b/src/datastore/gnunet-service-datastore.c
@@ -1345,9 +1345,6 @@ remove_callback (void *cls,
1345{ 1345{
1346 struct RemoveContext *rc = cls; 1346 struct RemoveContext *rc = cls;
1347 1347
1348 fprintf (stderr,
1349 "remove called with key %p\n",
1350 key);
1351 if (key == NULL) 1348 if (key == NULL)
1352 { 1349 {
1353#if DEBUG_DATASTORE 1350#if DEBUG_DATASTORE
@@ -1422,13 +1419,6 @@ handle_remove (void *cls,
1422 GNUNET_CRYPTO_hash (&dm[1], 1419 GNUNET_CRYPTO_hash (&dm[1],
1423 ntohl(dm->size), 1420 ntohl(dm->size),
1424 &vhash); 1421 &vhash);
1425 fprintf (stderr,
1426 "remove does get for key %s\n",
1427 GNUNET_h2s (&dm->key));
1428 fprintf (stderr,
1429 "remove does get for %u vhash %s\n",
1430 ntohl (dm->type),
1431 GNUNET_h2s (&vhash));
1432 plugin->api->get (plugin->api->cls, 1422 plugin->api->get (plugin->api->cls,
1433 &dm->key, 1423 &dm->key,
1434 &vhash, 1424 &vhash,
diff --git a/src/datastore/perf_datastore_api.c b/src/datastore/perf_datastore_api.c
index 306e6d5e0..6ea65c68d 100644
--- a/src/datastore/perf_datastore_api.c
+++ b/src/datastore/perf_datastore_api.c
@@ -88,7 +88,8 @@ enum RunPhase
88 RP_DONE = 0, 88 RP_DONE = 0,
89 RP_PUT, 89 RP_PUT,
90 RP_CUT, 90 RP_CUT,
91 RP_REPORT 91 RP_REPORT,
92 RP_ERROR
92 }; 93 };
93 94
94 95
@@ -116,10 +117,16 @@ check_success (void *cls,
116 const char *msg) 117 const char *msg)
117{ 118{
118 struct CpsRunContext *crc = cls; 119 struct CpsRunContext *crc = cls;
120
119 if (GNUNET_OK != success) 121 if (GNUNET_OK != success)
120 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 122 {
121 "%s\n", msg); 123 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
122 GNUNET_assert (GNUNET_OK == success); 124 "Check success failed: `%s'\n", msg);
125 crc->phase = RP_ERROR;
126 GNUNET_SCHEDULER_add_now (&run_continuation,
127 crc);
128 return;
129 }
123#if REPORT_ID 130#if REPORT_ID
124 fprintf (stderr, "I"); 131 fprintf (stderr, "I");
125#endif 132#endif
@@ -157,6 +164,15 @@ remove_next(void *cls,
157{ 164{
158 struct CpsRunContext *crc = cls; 165 struct CpsRunContext *crc = cls;
159 166
167 if (GNUNET_OK != success)
168 {
169 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
170 "remove_next failed: `%s'\n", msg);
171 crc->phase = RP_ERROR;
172 GNUNET_SCHEDULER_add_now (&run_continuation,
173 crc);
174 return;
175 }
160#if REPORT_ID 176#if REPORT_ID
161 fprintf (stderr, "D"); 177 fprintf (stderr, "D");
162#endif 178#endif
@@ -168,7 +184,7 @@ remove_next(void *cls,
168 184
169static void 185static void
170delete_value (void *cls, 186delete_value (void *cls,
171 const GNUNET_HashCode * key, 187 const GNUNET_HashCode *key,
172 size_t size, 188 size_t size,
173 const void *data, 189 const void *data,
174 enum GNUNET_BLOCK_Type type, 190 enum GNUNET_BLOCK_Type type,
@@ -178,7 +194,7 @@ delete_value (void *cls,
178 expiration, uint64_t uid) 194 expiration, uint64_t uid)
179{ 195{
180 struct CpsRunContext *crc = cls; 196 struct CpsRunContext *crc = cls;
181 197
182 GNUNET_assert (NULL != key); 198 GNUNET_assert (NULL != key);
183 stored_ops++; 199 stored_ops++;
184 stored_bytes -= size; 200 stored_bytes -= size;
@@ -275,6 +291,11 @@ run_continuation (void *cls,
275 GNUNET_free (crc); 291 GNUNET_free (crc);
276 ok = 0; 292 ok = 0;
277 break; 293 break;
294 case RP_ERROR:
295 GNUNET_DATASTORE_disconnect (datastore, GNUNET_YES);
296 GNUNET_free (crc);
297 ok = 1;
298 break;
278 default: 299 default:
279 GNUNET_assert (0); 300 GNUNET_assert (0);
280 } 301 }
@@ -383,7 +404,6 @@ main (int argc, char *argv[])
383 char *pos; 404 char *pos;
384 char dir_name[128]; 405 char dir_name[128];
385 406
386 if (1) return 0;
387 /* determine name of plugin to use */ 407 /* determine name of plugin to use */
388 plugin_name = argv[0]; 408 plugin_name = argv[0];
389 while (NULL != (pos = strstr(plugin_name, "_"))) 409 while (NULL != (pos = strstr(plugin_name, "_")))
diff --git a/src/datastore/plugin_datastore_mysql.c b/src/datastore/plugin_datastore_mysql.c
index 863c55ad8..005026c92 100644
--- a/src/datastore/plugin_datastore_mysql.c
+++ b/src/datastore/plugin_datastore_mysql.c
@@ -262,28 +262,28 @@ struct Plugin
262#define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?" 262#define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?"
263 struct GNUNET_MysqlStatementHandle *delete_entry_by_uid; 263 struct GNUNET_MysqlStatementHandle *delete_entry_by_uid;
264 264
265#define COUNT_ENTRY_BY_HASH "SELECT count(*) FROM gn090 FORCE INDEX (idx_hash) WHERE hash=?" 265#define COUNT_ENTRY_BY_HASH "SELECT count(*) FROM gn090 WHERE hash=?"
266 struct GNUNET_MysqlStatementHandle *count_entry_by_hash; 266 struct GNUNET_MysqlStatementHandle *count_entry_by_hash;
267 267
268#define SELECT_ENTRY_BY_HASH "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX (idx_hash_uid) WHERE hash=? ORDER BY uid LIMIT 1 OFFSET ?" 268#define SELECT_ENTRY_BY_HASH "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE hash=? ORDER BY uid LIMIT 1 OFFSET ?"
269 struct GNUNET_MysqlStatementHandle *select_entry_by_hash; 269 struct GNUNET_MysqlStatementHandle *select_entry_by_hash;
270 270
271#define COUNT_ENTRY_BY_HASH_AND_VHASH "SELECT count(*) FROM gn090 FORCE INDEX (idx_hash_vhash) WHERE hash=? AND vhash=?" 271#define COUNT_ENTRY_BY_HASH_AND_VHASH "SELECT count(*) FROM gn090 WHERE hash=? AND vhash=?"
272 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_and_vhash; 272 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_and_vhash;
273 273
274#define SELECT_ENTRY_BY_HASH_AND_VHASH "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX (idx_hash_vhash) WHERE hash=? AND vhash=? ORDER BY uid LIMIT 1 OFFSET ?" 274#define SELECT_ENTRY_BY_HASH_AND_VHASH "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE hash=? AND vhash=? ORDER BY uid LIMIT 1 OFFSET ?"
275 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_and_vhash; 275 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_and_vhash;
276 276
277#define COUNT_ENTRY_BY_HASH_AND_TYPE "SELECT count(*) FROM gn090 FORCE INDEX (idx_hash_type_uid) WHERE hash=? AND type=?" 277#define COUNT_ENTRY_BY_HASH_AND_TYPE "SELECT count(*) FROM gn090 WHERE hash=? AND type=?"
278 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_and_type; 278 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_and_type;
279 279
280#define SELECT_ENTRY_BY_HASH_AND_TYPE "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX (idx_hash_type_uid) WHERE hash=? AND type=? ORDER BY uid LIMIT 1 OFFSET ?" 280#define SELECT_ENTRY_BY_HASH_AND_TYPE "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE hash=? AND type=? ORDER BY uid LIMIT 1 OFFSET ?"
281 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_and_type; 281 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_and_type;
282 282
283#define COUNT_ENTRY_BY_HASH_VHASH_AND_TYPE "SELECT count(*) FROM gn090 FORCE INDEX (idx_hash_vhash) WHERE hash=? AND vhash=? AND type=?" 283#define COUNT_ENTRY_BY_HASH_VHASH_AND_TYPE "SELECT count(*) FROM gn090 WHERE hash=? AND vhash=? AND type=?"
284 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_vhash_and_type; 284 struct GNUNET_MysqlStatementHandle *count_entry_by_hash_vhash_and_type;
285 285
286#define SELECT_ENTRY_BY_HASH_VHASH_AND_TYPE "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX (idx_hash_vhash) WHERE hash=? AND vhash=? AND type=? ORDER BY uid ASC LIMIT 1 OFFSET ?" 286#define SELECT_ENTRY_BY_HASH_VHASH_AND_TYPE "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE hash=? AND vhash=? AND type=? ORDER BY uid ASC LIMIT 1 OFFSET ?"
287 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_vhash_and_type; 287 struct GNUNET_MysqlStatementHandle *select_entry_by_hash_vhash_and_type;
288 288
289#define UPDATE_ENTRY "UPDATE gn090 SET prio=prio+?,expire=IF(expire>=?,expire,?) WHERE uid=?" 289#define UPDATE_ENTRY "UPDATE gn090 SET prio=prio+?,expire=IF(expire>=?,expire,?) WHERE uid=?"
@@ -295,16 +295,16 @@ struct Plugin
295#define SELECT_SIZE "SELECT SUM(BIT_LENGTH(value) DIV 8) FROM gn090" 295#define SELECT_SIZE "SELECT SUM(BIT_LENGTH(value) DIV 8) FROM gn090"
296 struct GNUNET_MysqlStatementHandle *get_size; 296 struct GNUNET_MysqlStatementHandle *get_size;
297 297
298#define SELECT_IT_NON_ANONYMOUS "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX(idx_anonLevel_uid) WHERE anonLevel=0 ORDER BY uid DESC LIMIT 1 OFFSET ?" 298#define SELECT_IT_NON_ANONYMOUS "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE anonLevel=0 ORDER BY uid DESC LIMIT 1 OFFSET ?"
299 struct GNUNET_MysqlStatementHandle *zero_iter; 299 struct GNUNET_MysqlStatementHandle *zero_iter;
300 300
301#define SELECT_IT_EXPIRATION "(SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX(idx_expire_prio) WHERE expire < ? ORDER BY prio ASC LIMIT 1) "\ 301#define SELECT_IT_EXPIRATION "(SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 WHERE expire < ? ORDER BY prio ASC LIMIT 1) "\
302 "UNION "\ 302 "UNION "\
303 "(SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX(idx_prio) ORDER BY prio ASC LIMIT 1) "\ 303 "(SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 ORDER BY prio ASC LIMIT 1) "\
304 "ORDER BY expire ASC LIMIT 1" 304 "ORDER BY expire ASC LIMIT 1"
305 struct GNUNET_MysqlStatementHandle *select_expiration; 305 struct GNUNET_MysqlStatementHandle *select_expiration;
306 306
307#define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 FORCE INDEX(idx_repl) ORDER BY repl DESC,RAND() LIMIT 1" 307#define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 ORDER BY repl DESC,RAND() LIMIT 1"
308 struct GNUNET_MysqlStatementHandle *select_replication; 308 struct GNUNET_MysqlStatementHandle *select_replication;
309 309
310}; 310};
@@ -866,7 +866,6 @@ return_ok (void *cls,
866 unsigned int num_values, 866 unsigned int num_values,
867 MYSQL_BIND *values) 867 MYSQL_BIND *values)
868{ 868{
869 fprintf (stderr, "Here: %u\n", num_values);
870 return GNUNET_OK; 869 return GNUNET_OK;
871} 870}
872 871
@@ -948,16 +947,6 @@ mysql_plugin_put (void *cls,
948 hashSize2 = sizeof (GNUNET_HashCode); 947 hashSize2 = sizeof (GNUNET_HashCode);
949 lsize = size; 948 lsize = size;
950 GNUNET_CRYPTO_hash (data, size, &vhash); 949 GNUNET_CRYPTO_hash (data, size, &vhash);
951 {
952 fprintf (stderr,
953 "inserting content with key `%s'\n",
954 GNUNET_h2s (key));
955 fprintf (stderr,
956 "inserting %u-byte content with vhash `%s'\n",
957 (unsigned int) size,
958 GNUNET_h2s (&vhash));
959 }
960
961 if (GNUNET_OK != 950 if (GNUNET_OK !=
962 prepared_statement_run (plugin, 951 prepared_statement_run (plugin,
963 plugin->insert_entry, 952 plugin->insert_entry,
@@ -1128,19 +1117,6 @@ mysql_next_request_cont (void *next_cls,
1128 exp); 1117 exp);
1129#endif 1118#endif
1130 expiration.abs_value = exp; 1119 expiration.abs_value = exp;
1131
1132 {
1133 GNUNET_HashCode vh;
1134
1135 GNUNET_CRYPTO_hash (value, size, &vh);
1136 fprintf (stderr,
1137 "found content under with key `%s'\n",
1138 GNUNET_h2s (&key));
1139 fprintf (stderr,
1140 "found %u-byte content with vhash `%s'\n",
1141 (unsigned int) size,
1142 GNUNET_h2s (&vh));
1143}
1144 ret = nrc->dviter (nrc->dviter_cls, 1120 ret = nrc->dviter (nrc->dviter_cls,
1145 (nrc->one_shot == GNUNET_YES) ? NULL : nrc, 1121 (nrc->one_shot == GNUNET_YES) ? NULL : nrc,
1146 &key, 1122 &key,
@@ -1279,12 +1255,6 @@ get_statement_prepare (void *cls,
1279 { 1255 {
1280 if (gc->have_vhash) 1256 if (gc->have_vhash)
1281 { 1257 {
1282 fprintf (stderr,
1283 "Select by key `%s'\n",
1284 GNUNET_h2s (&gc->key));
1285 fprintf (stderr,
1286 "Select by vhash `%s'\n",
1287 GNUNET_h2s (&gc->vhash));
1288 ret = 1258 ret =
1289 prepared_statement_run_select (plugin, 1259 prepared_statement_run_select (plugin,
1290 plugin->select_entry_by_hash_and_vhash, 1260 plugin->select_entry_by_hash_and_vhash,
@@ -1385,12 +1355,6 @@ mysql_plugin_get (void *cls,
1385 { 1355 {
1386 if (vhash != NULL) 1356 if (vhash != NULL)
1387 { 1357 {
1388 fprintf (stderr,
1389 "Count by key `%s'\n",
1390 GNUNET_h2s (key));
1391 fprintf (stderr,
1392 "Count by vhash `%s'\n",
1393 GNUNET_h2s (vhash));
1394 ret = 1358 ret =
1395 prepared_statement_run_select (plugin, 1359 prepared_statement_run_select (plugin,
1396 plugin->count_entry_by_hash_and_vhash, 1360 plugin->count_entry_by_hash_and_vhash,
@@ -1412,12 +1376,6 @@ mysql_plugin_get (void *cls,
1412 -1); 1376 -1);
1413 } 1377 }
1414 } 1378 }
1415 fprintf (stderr,
1416 "Got %u results (ret: %d / `%s')\n",
1417 (unsigned int) total,
1418 ret,
1419 mysql_error (plugin->dbf));
1420
1421 if ((ret != GNUNET_OK) || (0 >= total)) 1379 if ((ret != GNUNET_OK) || (0 >= total))
1422 { 1380 {
1423 iter (iter_cls, 1381 iter (iter_cls,
@@ -1592,6 +1550,7 @@ repl_iter (void *cls,
1592 struct Plugin *plugin = rc->plugin; 1550 struct Plugin *plugin = rc->plugin;
1593 unsigned long long oid; 1551 unsigned long long oid;
1594 int ret; 1552 int ret;
1553 int iret;
1595 1554
1596 ret = rc->iter (rc->iter_cls, 1555 ret = rc->iter (rc->iter_cls,
1597 next_cls, key, 1556 next_cls, key,
@@ -1601,12 +1560,12 @@ repl_iter (void *cls,
1601 if (NULL != key) 1560 if (NULL != key)
1602 { 1561 {
1603 oid = (unsigned long long) uid; 1562 oid = (unsigned long long) uid;
1604 ret = prepared_statement_run (plugin, 1563 iret = prepared_statement_run (plugin,
1605 plugin->dec_repl, 1564 plugin->dec_repl,
1606 NULL, 1565 NULL,
1607 MYSQL_TYPE_LONGLONG, &oid, GNUNET_YES, 1566 MYSQL_TYPE_LONGLONG, &oid, GNUNET_YES,
1608 -1); 1567 -1);
1609 if (ret == GNUNET_SYSERR) 1568 if (iret == GNUNET_SYSERR)
1610 { 1569 {
1611 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 1570 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1612 "Failed to reduce replication counter\n"); 1571 "Failed to reduce replication counter\n");
@@ -1761,7 +1720,8 @@ libgnunet_plugin_datastore_mysql_init (void *cls)
1761 " vhash BINARY(64) NOT NULL DEFAULT ''," 1720 " vhash BINARY(64) NOT NULL DEFAULT '',"
1762 " value BLOB NOT NULL DEFAULT ''," 1721 " value BLOB NOT NULL DEFAULT '',"
1763 " uid BIGINT NOT NULL AUTO_INCREMENT," 1722 " uid BIGINT NOT NULL AUTO_INCREMENT,"
1764 " PRIMARY KEY (uid)," 1723 " PRIMARY KEY (uid)"
1724#if 0
1765 " INDEX idx_hash (hash(64))," 1725 " INDEX idx_hash (hash(64)),"
1766 " INDEX idx_hash_uid (hash(64),uid)," 1726 " INDEX idx_hash_uid (hash(64),uid),"
1767 " INDEX idx_hash_vhash (hash(64),vhash(64))," 1727 " INDEX idx_hash_vhash (hash(64),vhash(64)),"
@@ -1770,6 +1730,7 @@ libgnunet_plugin_datastore_mysql_init (void *cls)
1770 " INDEX idx_repl (repl)," 1730 " INDEX idx_repl (repl),"
1771 " INDEX idx_expire_prio (expire,prio)," 1731 " INDEX idx_expire_prio (expire,prio),"
1772 " INDEX idx_anonLevel_uid (anonLevel,uid)" 1732 " INDEX idx_anonLevel_uid (anonLevel,uid)"
1733#endif
1773 ") ENGINE=InnoDB") || 1734 ") ENGINE=InnoDB") ||
1774 MRUNS ("SET AUTOCOMMIT = 1") || 1735 MRUNS ("SET AUTOCOMMIT = 1") ||
1775 PINIT (plugin->insert_entry, INSERT_ENTRY) || 1736 PINIT (plugin->insert_entry, INSERT_ENTRY) ||