summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/db_op.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/server/db_op.py b/src/server/db_op.py
index aa0046a0..4634fbbd 100644
--- a/src/server/db_op.py
+++ b/src/server/db_op.py
@@ -739,6 +739,42 @@ class DBO_rzdb__fetch_DB_metablock(DB_op):
return None
return ret.pop()
+class DBO_rzdb__init_DB(DB_composed_op):
+
+ class _init_DB_subop(DB_op):
+
+ def __init__(self, length_lim=None):
+ super(DBO_rzdb__init_DB. _init_DB_subop, self).__init__()
+
+ # init DB metadata node
+ q_arr = ['create (n:%s {db_attr})' % (neo4j_schema.META_LABEL__RZDB_META)]
+ q_params = {'db_attr': {'schema_version': '0.1'}}
+ self.add_statement(q_arr, q_params)
+
+ def __init__(self, rz_config):
+ """
+ Fetch DB metadata
+ """
+ super(DBO_rzdb__init_DB, self).__init__()
+
+ # probe for an existing metablock, fail if found via post_sub_op_exec_hook()
+ self.add_sub_op(DBO_rzdb__fetch_DB_metablock())
+
+ # init DB metadata node
+ self.add_sub_op(DBO_rzdb__init_DB._init_DB_subop())
+
+ # create mainpage
+ mainpage_rzdoc = RZDoc(rz_config.rzdoc__mainpage_name)
+ mainpage_rzdoc.id = 'a000a000'
+ self.add_sub_op(DBO_rzdoc__create(mainpage_rzdoc))
+ self.add_sub_op(DBO_block_chain__init(mainpage_rzdoc))
+
+ def post_sub_op_exec_hook(self, prv_sub_op, prv_sub_op_ret):
+
+ if isinstance(prv_sub_op, DBO_rzdb__fetch_DB_metablock) and prv_sub_op_ret is not None:
+ raise Exception('DB contains metadata, aborting initialization of pre-initialized DB')
+
+
class DBO_rzdoc__clone(DB_op):
def __init__(self, limit=16384):