diff options
-rw-r--r-- | src/datastore/plugin_datastore_mysql.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/datastore/plugin_datastore_mysql.c b/src/datastore/plugin_datastore_mysql.c index 0041be378..a5f8f2a3e 100644 --- a/src/datastore/plugin_datastore_mysql.c +++ b/src/datastore/plugin_datastore_mysql.c | |||
@@ -194,7 +194,7 @@ struct Plugin | |||
194 | /** | 194 | /** |
195 | * Prepared statements. | 195 | * Prepared statements. |
196 | */ | 196 | */ |
197 | #define INSERT_ENTRY "INSERT INTO gn090 (repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES (?,?,?,?,?,?,?,?,?)" | 197 | #define INSERT_ENTRY "INSERT INTO gn090 (repl,type,prio,anonLevel,expire,rvalue,hash,vhash,value) VALUES (?,?,?,?,?,RAND(),?,?,?)" |
198 | struct GNUNET_MysqlStatementHandle *insert_entry; | 198 | struct GNUNET_MysqlStatementHandle *insert_entry; |
199 | 199 | ||
200 | #define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?" | 200 | #define DELETE_ENTRY_BY_UID "DELETE FROM gn090 WHERE uid=?" |
@@ -242,7 +242,16 @@ struct Plugin | |||
242 | "ORDER BY expire ASC LIMIT 1" | 242 | "ORDER BY expire ASC LIMIT 1" |
243 | struct GNUNET_MysqlStatementHandle *select_expiration; | 243 | struct GNUNET_MysqlStatementHandle *select_expiration; |
244 | 244 | ||
245 | #define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM gn090 ORDER BY repl DESC,RAND() LIMIT 1" | 245 | // select type from (select rand() as v) AS t1 INNER JOIN gn090 ON expire>=t1.v limit 1; |
246 | |||
247 | #define SELECT_IT_REPLICATION "SELECT type,prio,anonLevel,expire,hash,value,uid FROM "\ | ||
248 | "(SELECT RAND() AS v) AS t1 INNER JOIN "\ | ||
249 | "(SELECT MAX(repl) AS m FROM gn090) AS t2 INNER JOIN "\ | ||
250 | "gn090 ON repl=t2.m AND"\ | ||
251 | " (rvalue>=t1.v OR"\ | ||
252 | " NOT EXISTS (SELECT 1 FROM gn090 WHERE repl=t2.m AND rvalue>=t1.v))"\ | ||
253 | "ORDER BY rvalue ASC "\ | ||
254 | "LIMIT 1" | ||
246 | struct GNUNET_MysqlStatementHandle *select_replication; | 255 | struct GNUNET_MysqlStatementHandle *select_replication; |
247 | 256 | ||
248 | }; | 257 | }; |
@@ -848,7 +857,6 @@ mysql_plugin_put (void *cls, | |||
848 | unsigned long hashSize; | 857 | unsigned long hashSize; |
849 | unsigned long hashSize2; | 858 | unsigned long hashSize2; |
850 | unsigned long lsize; | 859 | unsigned long lsize; |
851 | unsigned long rvalue; | ||
852 | GNUNET_HashCode vhash; | 860 | GNUNET_HashCode vhash; |
853 | 861 | ||
854 | if (size > MAX_DATUM_SIZE) | 862 | if (size > MAX_DATUM_SIZE) |
@@ -860,7 +868,6 @@ mysql_plugin_put (void *cls, | |||
860 | hashSize2 = sizeof (GNUNET_HashCode); | 868 | hashSize2 = sizeof (GNUNET_HashCode); |
861 | lsize = size; | 869 | lsize = size; |
862 | GNUNET_CRYPTO_hash (data, size, &vhash); | 870 | GNUNET_CRYPTO_hash (data, size, &vhash); |
863 | rvalue = (unsigned long) GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); | ||
864 | if (GNUNET_OK != | 871 | if (GNUNET_OK != |
865 | prepared_statement_run (plugin, | 872 | prepared_statement_run (plugin, |
866 | plugin->insert_entry, | 873 | plugin->insert_entry, |
@@ -870,7 +877,6 @@ mysql_plugin_put (void *cls, | |||
870 | MYSQL_TYPE_LONG, &ipriority, GNUNET_YES, | 877 | MYSQL_TYPE_LONG, &ipriority, GNUNET_YES, |
871 | MYSQL_TYPE_LONG, &ianonymity, GNUNET_YES, | 878 | MYSQL_TYPE_LONG, &ianonymity, GNUNET_YES, |
872 | MYSQL_TYPE_LONGLONG, &lexpiration, GNUNET_YES, | 879 | MYSQL_TYPE_LONGLONG, &lexpiration, GNUNET_YES, |
873 | MYSQL_TYPE_LONGLONG, &rvalue, GNUNET_YES, | ||
874 | MYSQL_TYPE_BLOB, key, hashSize, &hashSize, | 880 | MYSQL_TYPE_BLOB, key, hashSize, &hashSize, |
875 | MYSQL_TYPE_BLOB, &vhash, hashSize2, &hashSize2, | 881 | MYSQL_TYPE_BLOB, &vhash, hashSize2, &hashSize2, |
876 | MYSQL_TYPE_BLOB, data, lsize, &lsize, | 882 | MYSQL_TYPE_BLOB, data, lsize, &lsize, |
@@ -1427,7 +1433,7 @@ libgnunet_plugin_datastore_mysql_init (void *cls) | |||
1427 | " prio INT(11) UNSIGNED NOT NULL DEFAULT 0," | 1433 | " prio INT(11) UNSIGNED NOT NULL DEFAULT 0," |
1428 | " anonLevel INT(11) UNSIGNED NOT NULL DEFAULT 0," | 1434 | " anonLevel INT(11) UNSIGNED NOT NULL DEFAULT 0," |
1429 | " expire BIGINT UNSIGNED NOT NULL DEFAULT 0," | 1435 | " expire BIGINT UNSIGNED NOT NULL DEFAULT 0," |
1430 | " rvalue BIGINT UNSIGNED NOT NULL," | 1436 | " rvalue DOUBLE UNSIGNED NOT NULL," |
1431 | " hash BINARY(64) NOT NULL DEFAULT ''," | 1437 | " hash BINARY(64) NOT NULL DEFAULT ''," |
1432 | " vhash BINARY(64) NOT NULL DEFAULT ''," | 1438 | " vhash BINARY(64) NOT NULL DEFAULT ''," |
1433 | " value BLOB NOT NULL DEFAULT ''," | 1439 | " value BLOB NOT NULL DEFAULT ''," |