1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-12 21:30:39 +00:00

Add --decrypt option for migrate.sh (#5146)

* Add --decrypt option for migrate.sh

* Use read_obj to get data of decrypted

* Use read_decrypted to get decrypted data

* Modify help info
This commit is contained in:
feiniks
2022-03-22 15:15:08 +08:00
committed by GitHub
parent ace219fbf7
commit a80aa00e46
2 changed files with 20 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ import sys
import logging import logging
import queue import queue
import threading import threading
import argparse
from threading import Thread from threading import Thread
from uuid import UUID from uuid import UUID
from seafobj.objstore_factory import SeafObjStoreFactory from seafobj.objstore_factory import SeafObjStoreFactory
@@ -57,7 +58,7 @@ class Task(object):
self.obj_id = obj_id self.obj_id = obj_id
class ObjMigrateWorker(Thread): class ObjMigrateWorker(Thread):
def __init__(self, orig_store, dest_store, dtype, repo_id = None): def __init__(self, orig_store, dest_store, dtype, repo_id = None, decrypt = False):
Thread.__init__(self) Thread.__init__(self)
self.lock = threading.Lock() self.lock = threading.Lock()
self.dtype = dtype self.dtype = dtype
@@ -72,6 +73,7 @@ class ObjMigrateWorker(Thread):
self.fd = None self.fd = None
self.exit_code = 0 self.exit_code = 0
self.exception = None self.exception = None
self.decrypt = decrypt
def run(self): def run(self):
try: try:
@@ -147,6 +149,9 @@ class ObjMigrateWorker(Thread):
if not exists: if not exists:
try: try:
if self.decrypt:
data = self.orig_store.read_decrypted(task.repo_id, task.repo_version, task.obj_id)
else:
data = self.orig_store.read_obj_raw(task.repo_id, task.repo_version, task.obj_id) data = self.orig_store.read_obj_raw(task.repo_id, task.repo_version, task.obj_id)
except Exception as e: except Exception as e:
logging.warning('[%s] Failed to read object %s from repo %s: %s' % (self.dtype, task.obj_id, task.repo_id, e)) logging.warning('[%s] Failed to read object %s from repo %s: %s' % (self.dtype, task.obj_id, task.repo_id, e))
@@ -193,7 +198,13 @@ class ObjMigrateWorker(Thread):
return True return True
return False return False
def main(): def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument('--decrypt', action='store_true', help='decrypt data from source storage and write to destination in plain text')
args = parser.parse_args()
decrypt = args.decrypt
try: try:
orig_obj_factory = SeafObjStoreFactory() orig_obj_factory = SeafObjStoreFactory()
os.environ['SEAFILE_CENTRAL_CONF_DIR'] = os.environ['DEST_SEAFILE_CENTRAL_CONF_DIR'] os.environ['SEAFILE_CENTRAL_CONF_DIR'] = os.environ['DEST_SEAFILE_CENTRAL_CONF_DIR']
@@ -207,7 +218,7 @@ def main():
for dtype in dtypes: for dtype in dtypes:
orig_store = orig_obj_factory.get_obj_store(dtype) orig_store = orig_obj_factory.get_obj_store(dtype)
dest_store = dest_obj_factory.get_obj_store(dtype) dest_store = dest_obj_factory.get_obj_store(dtype)
ObjMigrateWorker(orig_store, dest_store, dtype).start() ObjMigrateWorker(orig_store, dest_store, dtype, decrypt=decrypt).start()
if __name__ == '__main__': if __name__ == '__main__':
main() main(sys.argv)

View File

@@ -14,7 +14,7 @@ migrate=${INSTALLPATH}/migrate.py
script_name=$0 script_name=$0
function usage () { function usage () {
echo "usage : " echo "usage : "
echo " ./$(basename ${script_name}) destination_config_file_path" echo " ./$(basename ${script_name}) destination_config_file_path [--decrypt]"
echo "" echo ""
} }
@@ -51,7 +51,7 @@ function do_migrate () {
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python3/site-packages:${INSTALLPATH}/seafile/lib64/python3/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH export PYTHONPATH=${INSTALLPATH}/seafile/lib/python3/site-packages:${INSTALLPATH}/seafile/lib64/python3/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH
$PYTHON ${migrate} $PYTHON ${migrate} $@
} }
check_python_executable; check_python_executable;
@@ -68,13 +68,13 @@ then
done done
fi fi
if [ $# -ne 1 ]; if [ $# -ne 1 ] && [ $# -ne 2 ];
then then
usage; usage;
exit 1; exit 1;
fi fi
dest_seafile_central_conf_dir="$1" dest_seafile_central_conf_dir="$1"
do_migrate; do_migrate $@;
echo "Done." echo "Done."