|
|
@ -468,39 +468,44 @@ retry: |
|
|
|
bgw.bgw_start_time = BgWorkerStart_RecoveryFinished; |
|
|
|
bgw.bgw_start_time = BgWorkerStart_RecoveryFinished; |
|
|
|
snprintf(bgw.bgw_library_name, MAXPGPATH, "postgres"); |
|
|
|
snprintf(bgw.bgw_library_name, MAXPGPATH, "postgres"); |
|
|
|
|
|
|
|
|
|
|
|
if (is_parallel_apply_worker) |
|
|
|
switch (worker->type) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
case WORKERTYPE_APPLY: |
|
|
|
|
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "ApplyWorkerMain"); |
|
|
|
|
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
|
|
|
|
"logical replication apply worker for subscription %u", |
|
|
|
|
|
|
|
subid); |
|
|
|
|
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication apply worker"); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case WORKERTYPE_PARALLEL_APPLY: |
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "ParallelApplyWorkerMain"); |
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "ParallelApplyWorkerMain"); |
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
"logical replication parallel apply worker for subscription %u", |
|
|
|
"logical replication parallel apply worker for subscription %u", |
|
|
|
subid); |
|
|
|
subid); |
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication parallel worker"); |
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication parallel worker"); |
|
|
|
} |
|
|
|
|
|
|
|
else if (is_tablesync_worker) |
|
|
|
memcpy(bgw.bgw_extra, &subworker_dsm, sizeof(dsm_handle)); |
|
|
|
{ |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case WORKERTYPE_TABLESYNC: |
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "TablesyncWorkerMain"); |
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "TablesyncWorkerMain"); |
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
"logical replication tablesync worker for subscription %u sync %u", |
|
|
|
"logical replication tablesync worker for subscription %u sync %u", |
|
|
|
subid, |
|
|
|
subid, |
|
|
|
relid); |
|
|
|
relid); |
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication tablesync worker"); |
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication tablesync worker"); |
|
|
|
} |
|
|
|
break; |
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
case WORKERTYPE_UNKNOWN: |
|
|
|
snprintf(bgw.bgw_function_name, BGW_MAXLEN, "ApplyWorkerMain"); |
|
|
|
/* Should never happen. */ |
|
|
|
snprintf(bgw.bgw_name, BGW_MAXLEN, |
|
|
|
elog(ERROR, "unknown worker type"); |
|
|
|
"logical replication apply worker for subscription %u", |
|
|
|
|
|
|
|
subid); |
|
|
|
|
|
|
|
snprintf(bgw.bgw_type, BGW_MAXLEN, "logical replication apply worker"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bgw.bgw_restart_time = BGW_NEVER_RESTART; |
|
|
|
bgw.bgw_restart_time = BGW_NEVER_RESTART; |
|
|
|
bgw.bgw_notify_pid = MyProcPid; |
|
|
|
bgw.bgw_notify_pid = MyProcPid; |
|
|
|
bgw.bgw_main_arg = Int32GetDatum(slot); |
|
|
|
bgw.bgw_main_arg = Int32GetDatum(slot); |
|
|
|
|
|
|
|
|
|
|
|
if (is_parallel_apply_worker) |
|
|
|
|
|
|
|
memcpy(bgw.bgw_extra, &subworker_dsm, sizeof(dsm_handle)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!RegisterDynamicBackgroundWorker(&bgw, &bgw_handle)) |
|
|
|
if (!RegisterDynamicBackgroundWorker(&bgw, &bgw_handle)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* Failed to start worker, so clean up the worker slot. */ |
|
|
|
/* Failed to start worker, so clean up the worker slot. */ |
|
|
|