Commit 09d214a4 authored by Rajesh Rajendran's avatar Rajesh Rajendran
Browse files

feat(cassandra): update backup script to take system_schema keyspace


system_schema contains
- trigger
- types
- ...

information which necessary for new installation.
We're keeping the complete schema file as complete_db_schema.sql

Signed-off-by: default avatarRajesh Rajendran <rjshrjndrn@gmail.com>
parent d090351a
master login-changes loginRegisterBtn prasath-release-5.1.0 release-5.1.0 release-5.1.0-api release-5.1.0-apiuat release-5.1.0-bulk-enrol-unenrol release-5.1.0-uat release-5.1.0-uatLatest release-5.1.0-uatapi release-5.1.0-upsmf-prod release-uat-nginx revert-5-login-changes upstream/release-5.1.0-vdn release-5.2.0-inquiry_RC1 release-5.1.0_RC3 release-5.1.0_RC2 release-5.1.0_RC1 release-5.0.2 release-5.0.2_RC1 release-5.0.1 release-5.0.1_RC1 release-5.0.0 release-5.0.0_RC5 release-5.0.0_RC4 release-5.0.0_RC3 release-5.0.0_RC2 release-5.0.0_RC1 release-4.10.2_RC1 release-4.10.1 release-4.10.1_RC2 release-4.10.1_RC1 release-4.10.0 release-4.10.0_RC1 release-4.9.0 release-4.9.0_RC4 release-4.9.0_RC3 release-4.9.0_RC2 release-4.9.0_RC1 release-4.8.0 release-4.8.0_RC8 release-4.8.0_RC7 release-4.8.0_RC6 release-4.8.0_RC5 release-4.8.0_RC4 release-4.8.0_RC3 release-4.8.0_RC2 release-4.8.0_RC1 release-4.7.0 release-4.7.0_RC3 release-4.7.0_RC2 release-4.7.0_RC1 release-4.6.0 release-4.6.0_RC4 release-4.6.0_RC3 release-4.6.0_RC2 release-4.6.0_RC1 release-4.5.0 release-4.5.0_RC6 release-4.5.0_RC5 release-4.5.0_RC4 release-4.5.0_RC3 release-4.5.0_RC2 release-4.5.0_RC1 release-4.4.1_RC2 release-4.4.1_RC1 release-4.4.0 release-4.4.0_RC10 release-4.4.0_RC9 release-4.4.0_RC8 release-4.4.0_RC7 release-4.4.0_RC6 release-4.4.0_RC5 release-4.4.0_RC4 release-4.4.0_RC3 release-4.4.0_RC2 release-4.4.0_RC1 release-4.3.0 release-4.3.0_RC7 release-4.3.0_RC6 release-4.3.0_RC5 release-4.3.0_RC4 release-4.3.0_RC3 release-4.3.0_RC2 release-4.3.0_RC1 release-4.2.0 release-4.2.0_RC6 release-4.2.0_RC5 release-4.2.0_RC4 release-4.2.0_RC3 release-4.2.0_RC2 release-4.2.0_RC1 release-4.1.0 release-4.1.0_RC20 release-4.1.0_RC19 release-4.1.0_RC18 release-4.1.0_RC17 release-4.1.0_RC16 release-4.1.0_RC15 release-4.1.0_RC14 release-4.1.0_RC13 release-4.1.0_RC12 release-4.1.0_RC11 release-4.1.0_RC10 release-4.1.0_RC9 release-4.1.0_RC8 release-4.1.0_RC7 release-4.1.0_RC6 release-4.1.0_RC5 release-4.1.0_RC4 release-4.1.0_RC3 release-4.1.0_RC2 release-4.1.0_RC1 release-4.0.0 release-4.0.0_RC6 release-4.0.0_RC5 release-4.0.0_RC4 release-4.0.0_RC3
No related merge requests found
Showing with 21 additions and 5 deletions
+21 -5
......@@ -87,17 +87,22 @@ def copy():
Copying the data sanpshots to the target directory
'''
root_levels = args.datadirectory.rstrip('/').count(sep)
ignore_list = compile(tmpdir+sep+"cassandra_backup"+sep+'(system|system|systemtauth|system_traces|system_distributed|lock_db)')
# List of system keyspaces, which we don't need.
# We need system_schema keyspace, as it has all the keyspace,trigger,types information.
ignore_keyspaces = ["system", "system_auth", "system_traces", "system_distributed", "lock_db"]
# ignore_list = compile('^'+tmpdir+sep+"cassandra_backup"+sep+'(system|system_auth|system_traces|system_distributed|lock_db)/.*$')
ignore_list = compile('^'+tmpdir+sep+"cassandra_backup"+sep+"("+"|".join(ignore_keyspaces)+')/.*$')
# List of the threds running in background
futures = []
try:
with concurrent.futures.ThreadPoolExecutor(max_workers=args.workers) as executor:
for root, _, _ in walk(args.datadirectory):
keyspace = sep+sep.join(root.split(sep)[root_levels+1:-2])
# We don't need tables and other inner directories for keyspace.
if len(keyspace.split('/')) != 3:
continue
root_target_dir = tmpdir+sep+"cassandra_backup"+keyspace
if match(ignore_list, root_target_dir):
if len(keyspace.split('/')) == 2:
ignore_keyspace_names.append(keyspace.strip('/'))
continue
if root.split(sep)[-1] == args.snapshotname:
# Keeping copy operation in background with threads
......@@ -125,10 +130,21 @@ def create_schema(schema_file):
for file in files:
if file.endswith(".cql"):
with open(path.join(root, file),'r') as f:
with open("{}/cassandra_backup/db_schema.cql".format(tmpdir),'a') as w:
with open(schema_file,'a') as w:
w.write(f.read())
w.write('\n')
# Creating complete schema
# For `ALTER DROP COLUMN`,
# This schema will have issues.
# So you'll have to create and drop the column.
# For details about that table/column, look at snapshot_table_schema.sql
command = "cqlsh -e 'DESC SCHEMA' > {}/cassandra_backup/complete_db_schema.cql".format(tmpdir)
rc = system(command)
if rc != 0:
print("Couldn't backup schema, exiting...")
exit(1)
print("Schema backup completed. saved in {}/cassandra_backup/complete_db_schema.sql".format(tmpdir))
# Backing up tokenring
command = """ nodetool ring | grep """ + get_ip() + """ | awk '{print $NF ","}' | xargs | tee -a """ + tmpdir + """/cassandra_backup/tokenring.txt """ #.format(args.host, tmpdir)
......@@ -160,7 +176,7 @@ copy()
## deduplicating Ignore Keyspace list
ignore_keyspace_names = list(dict.fromkeys(ignore_keyspace_names))
# Creating schema for keyspaces.
create_schema("{}/cassandra_backup/db_schema.cql".format(tmpdir))
create_schema("{}/cassandra_backup/snapshot_table_schema.cql".format(tmpdir))
# Clearing the snapshot.
# We've the data now available in the copied directory.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment