61 |
|
|
62 |
$_->($WIKI) for our @Config; |
$_->($WIKI) for our @Config; |
63 |
|
|
64 |
|
## -- Setting Upper Bound for Too Many Accesses at the Same Time -- |
65 |
|
|
66 |
|
{ |
67 |
|
require SuikaWiki::DB::Util::Lock; |
68 |
|
my $lock = SuikaWiki::DB::Util::Lock |
69 |
|
->new (-directory => $WIKI->{config}->{path_to}->{db__lock__dir}, |
70 |
|
-name => 'main', |
71 |
|
-share => 1, |
72 |
|
-limit => 15); |
73 |
|
$lock->lock or do { |
74 |
|
require SuikaWiki::Output::HTTP; |
75 |
|
my $out = SuikaWiki::Output::HTTP->new; |
76 |
|
$out->{status_code} = 503; |
77 |
|
$out->{status_phrase} = q<WikiEngine Busy>; |
78 |
|
$out->add_header_field ('Retry-After' => 120); |
79 |
|
$out->{entity}->{media_type} = q<text/html>; |
80 |
|
$out->{entity}->{charset} = q<iso-8859-1>; |
81 |
|
$out->{entity}->{language} = [q<en>]; |
82 |
|
$out->{entity}->{body_is_octet_stream} = 1; |
83 |
|
my $wiki_name_version = sprintf '%s/%s %s/%s', |
84 |
|
$WIKI->{driver_name}, $WIKI->{driver_version}, |
85 |
|
$WIKI->{engine_name}, $WIKI->{engine_version}; |
86 |
|
for ($wiki_name_version) { |
87 |
|
s/&/&/g; s/</</g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge; |
88 |
|
}; |
89 |
|
$out->{entity}->{body} = qq< |
90 |
|
<!DOCTYPE html SYSTEM> |
91 |
|
<title>503 WikiEngine Busy</title> |
92 |
|
<h1>WikiEngine Busy</h1> |
93 |
|
<p>WikiEngine is now busy and is unable to complete your request. |
94 |
|
Please retry again after a moment.</p> |
95 |
|
<address>$wiki_name_version</address> |
96 |
|
>; |
97 |
|
$out->output (output => 'http-cgi'); |
98 |
|
exit; |
99 |
|
}; |
100 |
|
END { $lock->unlock } |
101 |
|
} |
102 |
|
|
103 |
## -- Loading Modules -- |
## -- Loading Modules -- |
104 |
|
|
105 |
use SuikaWiki::DB::Util::Error; |
use SuikaWiki::DB::Util::Error; |
268 |
my $wiki = shift; |
my $wiki = shift; |
269 |
## Database access mode |
## Database access mode |
270 |
$wiki->{var}->{db}->{read_only}->{'#default'} = 1; |
$wiki->{var}->{db}->{read_only}->{'#default'} = 1; |
271 |
|
$wiki->{var}->{db}->{lock_module}->{'#default'} |
272 |
|
= q<SuikaWiki::DB::Util::Lock>; |
273 |
|
$wiki->{var}->{db}->{read_lock_module}->{'#default'} |
274 |
|
= q<SuikaWiki::DB::Lock::NoLock>; |
275 |
|
|
276 |
## Input parameter |
## Input parameter |
277 |
require SuikaWiki::Input::HTTP; |
require SuikaWiki::Input::HTTP; |