[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] branch master updated: modernize datacache postgres implementat
From: |
gnunet |
Subject: |
[gnunet] branch master updated: modernize datacache postgres implementation |
Date: |
Tue, 22 Nov 2022 15:15:58 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new 7299f45d9 modernize datacache postgres implementation
7299f45d9 is described below
commit 7299f45d97d1dcc22d8155cfeb95939be6422bf4
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Nov 22 15:15:53 2022 +0100
modernize datacache postgres implementation
---
src/datacache/Makefile.am | 7 +++
src/datacache/datacache-0001.sql | 48 +++++++++++++++++
src/datacache/datacache-drop.sql | 25 +++++++++
src/datacache/datacache.conf | 4 ++
src/datacache/plugin_datacache_postgres.c | 85 ++++++++++++++-----------------
5 files changed, 121 insertions(+), 48 deletions(-)
diff --git a/src/datacache/Makefile.am b/src/datacache/Makefile.am
index 4789706ff..2d112b4ca 100644
--- a/src/datacache/Makefile.am
+++ b/src/datacache/Makefile.am
@@ -8,6 +8,13 @@ pkgcfgdir= $(pkgdatadir)/config.d/
dist_pkgcfg_DATA = \
datacache.conf
+sqldir = $(prefix)/share/gnunet/sql/
+
+sql_DATA = \
+ datacache-0001.sql \
+ datacache-drop.sql
+
+
if USE_COVERAGE
AM_CFLAGS = --coverage -O0
XLIBS = -lgcov
diff --git a/src/datacache/datacache-0001.sql b/src/datacache/datacache-0001.sql
new file mode 100644
index 000000000..6567de3c2
--- /dev/null
+++ b/src/datacache/datacache-0001.sql
@@ -0,0 +1,48 @@
+--
+-- This file is part of GNUnet
+-- Copyright (C) 2014--2022 GNUnet e.V.
+--
+-- GNUnet is free software; you can redistribute it and/or modify it under the
+-- terms of the GNU General Public License as published by the Free Software
+-- Foundation; either version 3, or (at your option) any later version.
+--
+-- GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY
+-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR
+-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License along with
+-- GNUnet; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+-- Check patch versioning is in place.
+SELECT _v.register_patch('datacache-0001', NULL, NULL);
+
+-------------------- Schema ----------------------------
+
+CREATE SCHEMA datacache;
+COMMENT ON SCHEMA datacache IS 'gnunet-datacache data';
+
+SET search_path TO datacache;
+
+CREATE TABLE IF NOT EXISTS gn180dc (
+ oid BIGINT GENERATED BY DEFAULT AS IDENTITY,
+ type INT4 NOT NULL,
+ ro INT4 NOT NULL,
+ prox INT4 NOT NULL,
+ expiration_time INT8 NOT NULL,
+ key BYTEA NOT NULL CHECK(LENGTH(key)=64),
+ trunc BYTEA NOT NULL CHECK(LENGTH(trunc)=32),
+ value BYTEA NOT NULL,
+ path BYTEA DEFAULT NULL);
+
+CREATE INDEX IF NOT EXISTS idx_oid
+ ON gn180dc (oid);
+CREATE INDEX IF NOT EXISTS idx_key
+ ON gn180dc (key);
+CREATE INDEX IF NOT EXISTS idx_dt
+ ON gn180dc (expiration_time);
+
+COMMIT;
diff --git a/src/datacache/datacache-drop.sql b/src/datacache/datacache-drop.sql
new file mode 100644
index 000000000..2dd84bca8
--- /dev/null
+++ b/src/datacache/datacache-drop.sql
@@ -0,0 +1,25 @@
+--
+-- This file is part of GNUnet
+-- Copyright (C) 2014--2022 GNUnet e.V.
+--
+-- GNUnet is free software; you can redistribute it and/or modify it under the
+-- terms of the GNU General Public License as published by the Free Software
+-- Foundation; either version 3, or (at your option) any later version.
+--
+-- GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY
+-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR
+-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License along with
+-- GNUnet; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+
+SELECT _v.unregister_patch('datacache-0001');
+
+DROP SCHEMA datacache CASCADE;
+
+COMMIT;
diff --git a/src/datacache/datacache.conf b/src/datacache/datacache.conf
index f9c718eb0..ed5c3da06 100644
--- a/src/datacache/datacache.conf
+++ b/src/datacache/datacache.conf
@@ -1,2 +1,6 @@
[datacache-postgres]
CONFIG = postgres:///gnunet
+
+# Where are the SQL files to setup our tables?
+# Important: this MUST end with a "/"!
+SQL_DIR = $DATADIR/sql/
\ No newline at end of file
diff --git a/src/datacache/plugin_datacache_postgres.c
b/src/datacache/plugin_datacache_postgres.c
index df5fc4454..8bfd04aea 100644
--- a/src/datacache/plugin_datacache_postgres.c
+++ b/src/datacache/plugin_datacache_postgres.c
@@ -66,64 +66,45 @@ struct Plugin
static enum GNUNET_GenericReturnValue
init_connection (struct Plugin *plugin)
{
- struct GNUNET_PQ_ExecuteStatement es[] = {
- GNUNET_PQ_make_try_execute (
- "CREATE TEMPORARY SEQUENCE IF NOT EXISTS gn180dc_oid_seq"),
- GNUNET_PQ_make_execute ("CREATE TEMPORARY TABLE IF NOT EXISTS gn180dc ("
- " oid OID NOT NULL DEFAULT
nextval('gn180dc_oid_seq'),"
- " type INT4 NOT NULL,"
- " ro INT4 NOT NULL,"
- " prox INT4 NOT NULL,"
- " expiration_time INT8 NOT NULL,"
- " key BYTEA NOT NULL CHECK(LENGTH(key)=64),"
- " trunc BYTEA NOT NULL CHECK(LENGTH(trunc)=32),"
- " value BYTEA NOT NULL,"
- " path BYTEA DEFAULT NULL)"),
- GNUNET_PQ_make_try_execute (
- "ALTER SEQUENCE gnu011dc_oid_seq OWNED BY gn180dc.oid"),
- GNUNET_PQ_make_try_execute (
- "CREATE INDEX IF NOT EXISTS idx_oid ON gn180dc (oid)"),
- GNUNET_PQ_make_try_execute (
- "CREATE INDEX IF NOT EXISTS idx_key ON gn180dc (key)"),
- GNUNET_PQ_make_try_execute (
- "CREATE INDEX IF NOT EXISTS idx_dt ON gn180dc (expiration_time)"),
- GNUNET_PQ_make_execute (
- "ALTER TABLE gn180dc ALTER value SET STORAGE EXTERNAL"),
- GNUNET_PQ_make_execute ("ALTER TABLE gn180dc ALTER key SET STORAGE PLAIN"),
- GNUNET_PQ_EXECUTE_STATEMENT_END
- };
struct GNUNET_PQ_PreparedStatement ps[] = {
GNUNET_PQ_make_prepare ("getkt",
- "SELECT expiration_time,type,ro,value,trunc,path
FROM gn180dc "
- "WHERE key=$1 AND type=$2 AND expiration_time >=
$3"),
+ "SELECT expiration_time,type,ro,value,trunc,path"
+ " FROM datacache.gn180dc"
+ " WHERE key=$1 AND type=$2 AND expiration_time >=
$3"),
GNUNET_PQ_make_prepare ("getk",
- "SELECT expiration_time,type,ro,value,trunc,path
FROM gn180dc "
- "WHERE key=$1 AND expiration_time >= $2"),
+ "SELECT expiration_time,type,ro,value,trunc,path"
+ " FROM datacache.gn180dc"
+ " WHERE key=$1 AND expiration_time >= $2"),
GNUNET_PQ_make_prepare ("getex",
- "SELECT LENGTH(value) AS len,oid,key FROM gn180dc"
+ "SELECT LENGTH(value) AS len,oid,key"
+ " FROM datacache.gn180dc"
" WHERE expiration_time < $1"
" ORDER BY expiration_time ASC LIMIT 1"),
GNUNET_PQ_make_prepare ("getm",
- "SELECT LENGTH(value) AS len,oid,key FROM gn180dc"
+ "SELECT LENGTH(value) AS len,oid,key"
+ " FROM datacache.gn180dc"
" ORDER BY prox ASC, expiration_time ASC LIMIT 1"),
GNUNET_PQ_make_prepare ("get_closest",
- "(SELECT
expiration_time,type,ro,value,trunc,path,key FROM gn180dc"
+ "(SELECT
expiration_time,type,ro,value,trunc,path,key"
+ " FROM datacache.gn180dc"
" WHERE key >= $1"
" AND expiration_time >= $2"
" AND ( (type = $3) OR ( 0 = $3) )"
" ORDER BY key ASC"
" LIMIT $4)"
" UNION "
- "(SELECT
expiration_time,type,ro,value,trunc,path,key FROM gn180dc"
+ "(SELECT
expiration_time,type,ro,value,trunc,path,key"
+ " FROM datacache.gn180dc"
" WHERE key <= $1"
" AND expiration_time >= $2"
" AND ( (type = $3) OR ( 0 = $3) )"
" ORDER BY key DESC"
" LIMIT $4)"),
GNUNET_PQ_make_prepare ("delrow",
- "DELETE FROM gn180dc WHERE oid=$1"),
+ "DELETE FROM datacache.gn180dc"
+ " WHERE oid=$1"),
GNUNET_PQ_make_prepare ("put",
- "INSERT INTO gn180dc"
+ "INSERT INTO datacache.gn180dc"
" (type, ro, prox, expiration_time, key, value,
trunc, path) "
"VALUES ($1, $2, $3, $4, $5, $6, $7, $8)"),
GNUNET_PQ_PREPARED_STATEMENT_END
@@ -131,8 +112,8 @@ init_connection (struct Plugin *plugin)
plugin->dbh = GNUNET_PQ_connect_with_cfg (plugin->env->cfg,
"datacache-postgres",
+ "datacache-",
NULL,
- es,
ps);
if (NULL == plugin->dbh)
return GNUNET_SYSERR;
@@ -165,9 +146,12 @@ postgres_plugin_put (void *cls,
GNUNET_PQ_query_param_fixed_size (block->data,
block->data_size),
GNUNET_PQ_query_param_auto_from_type (&block->trunc_peer),
- GNUNET_PQ_query_param_fixed_size (block->put_path,
- block->put_path_length
- * sizeof(struct GNUNET_DHT_PathElement)),
+ (0 == block->put_path_length)
+ ? GNUNET_PQ_query_param_null ()
+ : GNUNET_PQ_query_param_fixed_size (
+ block->put_path,
+ block->put_path_length
+ * sizeof(struct GNUNET_DHT_PathElement)),
GNUNET_PQ_query_param_end
};
enum GNUNET_DB_QueryStatus ret;
@@ -226,8 +210,8 @@ handle_results (void *cls,
uint32_t bro32;
void *data;
struct GNUNET_DATACACHE_Block block;
- void *path;
- size_t path_size;
+ void *path = NULL;
+ size_t path_size = 0;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_absolute_time ("expiration_time",
&block.expiration_time),
@@ -240,9 +224,11 @@ handle_results (void *cls,
&block.data_size),
GNUNET_PQ_result_spec_auto_from_type ("trunc",
&block.trunc_peer),
- GNUNET_PQ_result_spec_variable_size ("path",
- &path,
- &path_size),
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_variable_size ("path",
+ &path,
+ &path_size),
+ NULL),
GNUNET_PQ_result_spec_end
};
@@ -351,12 +337,12 @@ postgres_plugin_del (void *cls)
GNUNET_PQ_query_param_end
};
uint32_t size;
- uint32_t oid;
+ uint64_t oid;
struct GNUNET_HashCode key;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint32 ("len",
&size),
- GNUNET_PQ_result_spec_uint32 ("oid",
+ GNUNET_PQ_result_spec_uint64 ("oid",
&oid),
GNUNET_PQ_result_spec_auto_from_type ("key",
&key),
@@ -364,7 +350,7 @@ postgres_plugin_del (void *cls)
};
enum GNUNET_DB_QueryStatus res;
struct GNUNET_PQ_QueryParam dparam[] = {
- GNUNET_PQ_query_param_uint32 (&oid),
+ GNUNET_PQ_query_param_uint64 (&oid),
GNUNET_PQ_query_param_end
};
struct GNUNET_TIME_Absolute now;
@@ -617,6 +603,9 @@ libgnunet_plugin_datacache_postgres_done (void *cls)
struct GNUNET_DATACACHE_PluginFunctions *api = cls;
struct Plugin *plugin = api->cls;
+ GNUNET_break (GNUNET_OK ==
+ GNUNET_PQ_exec_sql (plugin->dbh,
+ "datacache-drop"));
GNUNET_PQ_disconnect (plugin->dbh);
GNUNET_free (plugin);
GNUNET_free (api);
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: modernize datacache postgres implementation,
gnunet <=