Skip to content

Commit 493de28

Browse files
committed
Add new thread model to restore.
1 parent 3491b43 commit 493de28

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

restore.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ typedef struct
2121
{
2222
parray *files;
2323
pgBackup *backup;
24-
unsigned int start_file_idx;
25-
unsigned int end_file_idx;
2624
} restore_files_args;
2725

2826
static void backup_online_files(bool re_recovery);
@@ -317,23 +315,22 @@ restore_database(pgBackup *backup)
317315
if (num_threads < 1)
318316
num_threads = 1;
319317

318+
for (i = 0; i < parray_num(files); i++)
319+
{
320+
pgFile *file = (pgFile *) parray_get(files, i);
321+
322+
__sync_lock_release(&file->lock);
323+
}
324+
320325
/* restore files into $PGDATA */
321326
for (i = 0; i < num_threads; i++)
322327
{
323328
restore_files_args *arg = pg_malloc(sizeof(restore_files_args));
324329
arg->files = files;
325330
arg->backup = backup;
326-
arg->start_file_idx = i * (parray_num(files)/num_threads);
327-
if (i == num_threads - 1)
328-
arg->end_file_idx = parray_num(files);
329-
else
330-
arg->end_file_idx = (i + 1) * (parray_num(files)/num_threads);
331331

332332
if (verbose)
333-
elog(WARNING, "Start thread for start_file_idx:%i end_file_idx:%i num:%li",
334-
arg->start_file_idx,
335-
arg->end_file_idx,
336-
parray_num(files));
333+
elog(WARNING, "Start thread for num:%li", parray_num(files));
337334

338335
restore_threads_args[i] = arg;
339336
pthread_create(&restore_threads[i], NULL, (void *(*)(void *)) restore_files, arg);
@@ -403,10 +400,12 @@ restore_files(void *arg)
403400
restore_files_args *arguments = (restore_files_args *)arg;
404401

405402
/* restore files into $PGDATA */
406-
for (i = arguments->start_file_idx; i < arguments->end_file_idx; i++)
403+
for (i = 0; i < parray_num(arguments->files); i++)
407404
{
408405
char from_root[MAXPGPATH];
409406
pgFile *file = (pgFile *) parray_get(arguments->files, i);
407+
if (__sync_lock_test_and_set(&file->lock, 1) != 0)
408+
continue;
410409

411410
pgBackupGetPath(arguments->backup, from_root, lengthof(from_root), DATABASE_DIR);
412411

0 commit comments

Comments
 (0)