Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite69b99d

Browse files
author
Vladimir Ershov
committed
more accurate with namespace
1 parent54b4b68 commite69b99d

File tree

3 files changed

+37
-53
lines changed

3 files changed

+37
-53
lines changed

‎src/pgpro_scheduler.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,23 @@ char *get_scheduler_schema_name(void)
178178
{
179179
Oidns_oid;
180180
Oidext_oid;
181+
char*name=NULL;
181182

182183
Relationrel;
183184
SysScanDescscandesc;
184185
HeapTupletuple;
185186
ScanKeyDataentry[1];
186187
LOCKMODEheap_lock=AccessShareLock;
188+
booluse_transaction= false;
187189

190+
if (!IsTransactionState())
191+
{
192+
StartTransactionCommand();
193+
use_transaction= true;
194+
}
188195

189196
if(scheduler_schema_oid==InvalidOid)
190197
{
191-
if (!IsTransactionState())
192-
elog(ERROR,"pgpro_scheduler: cannot get extension scheme (1)");
193198
ext_oid=get_extension_oid("pgpro_scheduler", true);
194199
if(ext_oid==InvalidOid)
195200
elog(ERROR,"pgpro_scheduler: cannot get extension id");
@@ -210,6 +215,7 @@ char *get_scheduler_schema_name(void)
210215
systable_endscan(scandesc);
211216
heap_close(rel,heap_lock);
212217

218+
213219
if(ns_oid==InvalidOid)
214220
elog(ERROR,"pgpro_scheduler: cannot get extension schema oid");
215221

@@ -220,7 +226,10 @@ char *get_scheduler_schema_name(void)
220226
ns_oid=scheduler_schema_oid;
221227
}
222228

223-
returnget_namespace_name(ns_oid);
229+
name=get_namespace_name(ns_oid);
230+
if(use_transaction)CommitTransactionCommand();
231+
232+
returnname;
224233
}
225234

226235
char*set_schema(constchar*name,boolget_old)

‎src/scheduler_manager.c

Lines changed: 24 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include"storage/procarray.h"
1212
#include"storage/shm_toc.h"
1313
#include"catalog/pg_type.h"
14+
#include"commands/extension.h"
15+
#include"nodes/makefuncs.h"
1416

1517
#include"pg_config.h"
1618
#include"fmgr.h"
@@ -50,54 +52,22 @@
5052
externvolatilesig_atomic_tgot_sighup;
5153
externvolatilesig_atomic_tgot_sigterm;
5254
externOidscheduler_atjob_id_OID;
55+
externOidscheduler_schema_oid;
5356

54-
intcheckSchedulerNamespace(void)
57+
boolcheckSchedulerExtension(void)
5558
{
56-
constchar*sql="select count(*) from pg_catalog.pg_namespace where nspname = $1";
57-
intcount=0;
58-
constchar*schema;
59-
Oidargtypes[1]= {TEXTOID };
60-
Datumvalues[1];
61-
62-
SetCurrentStatementStartTimestamp();
63-
pgstat_report_activity(STATE_RUNNING,"initialize: check namespace");
64-
65-
schema=GetConfigOption("schedule.schema", false, true);
66-
67-
START_SPI_SNAP();
68-
69-
values[0]=CStringGetTextDatum(schema);
70-
count=select_count_with_args(sql,1,argtypes,values,NULL);
71-
72-
if(count==-1)
73-
{
74-
STOP_SPI_SNAP();
75-
elog(ERROR,"Scheduler manager: %s: cannot check namespace: sql error",
76-
MyBgworkerEntry->bgw_name);
77-
}
78-
elseif(count>1||count==0 )
59+
Oidextoid;
60+
booluse_transaction= false;
61+
if (!IsTransactionState())
7962
{
80-
elog(LOG,"Scheduler manager: %s: cannot check namespace: "
81-
"found %d namespaces",MyBgworkerEntry->bgw_name,count);
82-
}
83-
elseif(count==-2)
84-
{
85-
elog(LOG,"Scheduler manager: %s: cannot check namespace: "
86-
"count return null",MyBgworkerEntry->bgw_name);
87-
}
88-
elseif(count!=1)
89-
{
90-
STOP_SPI_SNAP();
91-
elog(ERROR,"Scheduler manager: %s: cannot check namespace: "
92-
"unknown error %d",MyBgworkerEntry->bgw_name,count);
93-
}
94-
STOP_SPI_SNAP();
95-
96-
if(count) {
97-
SetConfigOption("search_path",schema,PGC_USERSET,PGC_S_SESSION);
63+
StartTransactionCommand();
64+
use_transaction= true;
9865
}
66+
67+
extoid=get_extension_oid("pgpro_scheduler", true);
68+
if(use_transaction)CommitTransactionCommand();
9969

100-
returncount;
70+
returnextoid!=InvalidOid ? true: false;
10171
}
10272

10373
intget_scheduler_maxworkers(void)
@@ -1822,14 +1792,15 @@ void manager_worker_main(Datum arg)
18221792
elog(LOG,"Started scheduler manager for '%s'",database);
18231793
SetConfigOption("application_name",buffer,PGC_USERSET,PGC_S_SESSION);
18241794

1825-
if(!checkSchedulerNamespace())
1795+
if(!checkSchedulerExtension())
18261796
{
1827-
elog(LOG,"cannot start scheduler for %s - there is nonamespace",database);
1797+
elog(LOG,"cannot start scheduler for %s - there is noextention",database);
18281798
changeChildBgwState(shared,SchdManagerQuit);
18291799
dsm_detach(seg);
18301800
delete_worker_mem_ctx(NULL);
18311801
proc_exit(0);
18321802
}
1803+
set_schema(NULL, false);
18331804
SetCurrentStatementStartTimestamp();
18341805
pgstat_report_activity(STATE_RUNNING,"initialize.");
18351806

@@ -1841,8 +1812,9 @@ void manager_worker_main(Datum arg)
18411812
ctx=initialize_scheduler_manager_context(longTerm,database,seg);
18421813

18431814
START_SPI_SNAP();
1844-
reloid=RangeVarGetRelid(makeRangeVarFromNameList(
1845-
stringToQualifiedNameList("schedule.at_jobs_submitted")),NoLock, true);
1815+
reloid=RangeVarGetRelid(
1816+
makeRangeVar(get_scheduler_schema_name(),"at_jobs_submitted",-1)
1817+
,NoLock, true);
18461818
STOP_SPI_SNAP();
18471819
if(reloid==InvalidOid)
18481820
{
@@ -1854,7 +1826,6 @@ void manager_worker_main(Datum arg)
18541826
start_at_workers(ctx,shared);
18551827
clean_at_table(ctx);
18561828
set_slots_stat_report(ctx);
1857-
/* SetConfigOption("enable_seqscan", "off", PGC_USERSET, PGC_S_SESSION); */
18581829

18591830
while(!got_sigterm)
18601831
{
@@ -1867,9 +1838,13 @@ void manager_worker_main(Datum arg)
18671838
if(got_sighup)
18681839
{
18691840
got_sighup= false;
1841+
/* make read extension schema again */
1842+
scheduler_schema_oid=InvalidOid;
1843+
set_schema(NULL, false);
1844+
18701845
ProcessConfigFile(PGC_SIGHUP);
18711846
reload_db_role_config(database);
1872-
refresh_scheduler_manager_context(ctx);/* TODO */
1847+
refresh_scheduler_manager_context(ctx);
18731848
set_slots_stat_report(ctx);
18741849
}
18751850
if(!got_sigterm)

‎src/scheduler_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ typedef struct {
8484
dsm_segment*seg;
8585
}scheduler_manager_ctx_t;
8686

87-
intcheckSchedulerNamespace(void);
87+
boolcheckSchedulerExtension(void);
8888
externPGDLLEXPORTvoidmanager_worker_main(Datumarg);
8989
intget_scheduler_maxworkers(void);
9090
intget_scheduler_at_max_workers(void);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp