summaryrefslogtreecommitdiffstats
path: root/xlators
Commit message (Collapse)AuthorAgeFilesLines
* check the op_ret for less than zero in sp_create_cbk since posix can send ↵Raghavendra Bhat2011-02-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | negative values other than -1 posix can send -ve values other than -1 in create: op_ret = setgid_override (this, real_path, &gid); if (op_ret < 0) { goto out; } In stat-prefetch we check op_ret only for -1 which results in function proceeding and op_ret may become 0 due to other function calls in sp_create_cbk, hence crashes in fuse. Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2409 (crash in stat prefetch) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2409
* storage/posix: set op_ret to -1 when setgid_override fails.Raghavendra G2011-02-221-5/+18
| | | | | | | | Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2409 (crash in stat prefetch) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2409
* send the CHILD_DOWN event also to fuseAmar Tumballi2011-02-221-31/+11
| | | | | | | | | | and start the fuse thread in CHILD_DOWN event too. Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2005 (Mounting Gluster volume with RO bricks hangs) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2005
* log the total replace brick command receivedRaghavendra Bhat2011-02-221-2/+1
| | | | | | | | | | | Log the full replace brick command which says whether the command is start/pause/status/abort/commit. Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1404 (need a dump of all the op/mgmt commands) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1404
* glusterd/cli: option added to create volume with both transportsAmar Tumballi2011-02-224-6/+80
| | | | | | | | | | | | | | | to avail the option, enter the volume create command with arguments 'transport tcp,rdma' and while mounting, on the mountpoints which works on rdma, do, mount -t glusterfs <IP>:/<VOLNAME>-rdma <MOUNT-POINT> Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2294 (Currently there is no way through cli to make a volume listen on both the transports (socket/rdma)) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2294
* debug/trace: updated the logs to print gfid instead of 'ino' valuesAmar Tumballi2011-02-221-413/+562
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2332 (update 'debug/trace' to log gfid instead of 'ia_ino') URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2332
* glusterd: make it more RPC friendlyAmar Tumballi2011-02-222-196/+282
| | | | | | | | | | | make sure each procedure has a actor associated with it. that way proper versioning can be implemented in modules Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2333 (make glusterd more rpc friendly) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2333
* fuse-resolve: correction in resolve logicAmar Tumballi2011-02-224-91/+286
| | | | | | | | | | | | * bring in soft (gfid based) and hard (path based) resolving * 'fd' resolving to new graph is not yet done. * fuse-resolve works similar to server-resolve Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2281 (I/O operations exit when add-brick is done) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2281
* dht: do not send revalidates to all subvolsAnand Avati2011-02-221-10/+6
| | | | | | | | Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2450 (scalability enhancements) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2450
* core: have framework for GF_EVENT_CHILD_MODIFIED notifcation eventAnand Avati2011-02-222-1/+12
| | | | | | | | | | | | | If anything changes anywhere in the graph, all xlators know that something has changed. Previously dht and afr would mask certain events from propagating up. Now they forward GF_EVENT_CHILD_MODIFIED event in those situations Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2450 (scalability enhancements) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2450
* mgmt/glusterd: In store-retrieve exit with error message instead of crashing.Pranith K2011-02-224-29/+159
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2066 (glusterd crashed while trying to restore volumes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2066
* rpc/rpc-clnt: don't use iobref passed from caller to hold iobufs required ↵Raghavendra G2011-02-222-32/+55
| | | | | | | | | | | | | | | | for building program and rpc headers. - clustering translators like replicate assume iobrefs will be used as read-only by lower layers and there by use the same iobref while winding calls to multiple children. Since iobrefs can hold only limited number of iobufs, this limits the number of children these translators can have without overflowing iobrefs. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2157 (glusterfsd crash) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2157
* Solaris build fixesshishir gowda2011-02-225-7/+6
| | | | | | | | | | | | | | Disable geosync build for non-linux platforms. And fix solaris related build failures.The symbol getxattr was not available on solaris. The build on linux passed as getxattr symbol was available in the library. The argument was not being used, hence removed it. Make 64 bit build default in CFLAGS option by passing -m64 option Signed-off-by: Shishir Gowda <shishirng@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2440 (Fix solaris build issues seen on latest git) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2440
* replicate: set read-child to the subvolume which replied first (fastest)Anand Avati2011-02-221-20/+0
| | | | | | | | | | | | In the old logic read-child was set to the last subvolume which replied. Now it is updated to the first subvolume. This way we can ensure that local servers are preferred for reads _most_ of the times. Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1172 (ls -lh on NFS mount of 2-mirror replicate gives incorrect file size) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1172
* io-threads: use slow/normal/fast classification of fopsAnand Avati2011-02-221-168/+75
| | | | | | | | Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2241 (GlusterFs Stat Actions Degrade During I/O) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2241
* io-threads: implement bulk and priority queuesAnand Avati2011-02-222-12/+55
| | | | | | | | Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2241 (GlusterFs Stat Actions Degrade During I/O) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2241
* io-threads: whitespace cleanupAnand Avati2011-02-221-12/+9
| | | | | | | | Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2241 (GlusterFs Stat Actions Degrade During I/O) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2241
* performance/quick-read: disable caching for fds opened with GF_OPEN_NOWB flags.Raghavendra G2011-02-181-2/+4
| | | | | | | | Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2240 (Solaris client hangs on file read operations) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2240
* cluster/dht : implement a fsetxattr() commandAmar Tumballi2011-02-182-0/+45
| | | | | | | | | | Thanks to Jeff Darcy <jdarcy(at)redhat.com> for the patch Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2319 (DHT uses wrong subvolume for fsetxattr) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2319
* rpc/xdr: update .x filesAmar Tumballi2011-02-182-2/+2
| | | | | | | | | | * now, 'rpcgen $filename-xdr.x' file will result in $filename-xdr.h Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2153 (glusterfs3.x does not match "generated" source) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2153
* cluster/afr: stop spawning self-heal loops when the self-heal failsPranith K2011-02-171-12/+24
| | | | | | | | | | | | | With the current model of self-heal, any loop wont resume if a self-heal failure happens. I have added the fix to stop spawning the initial loops on self-heal failure. Fixed the invalid read shown in valgrind in diff-self-heal. Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1174 (Replicate spawns read loops even after destination fails) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1174
* Typo fixes in log and cli messages.Sachidananda2011-02-171-1/+1
| | | | | | | | Signed-off-by: Sachidananda Urs <sac@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2321 (Typo in logs and cli messages) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2321
* glusterd-volgen: fix a issue of wrongly closing '0' fd.Amar Tumballi2011-02-151-3/+6
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2421 ([glusterfs-3.1.2gsync10]: epoll_create returning 0) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2421
* volgen: avoid fclose() on cosed FILE *Anand Avati2011-02-151-0/+1
| | | | | | | | | | | | It can so happen that a previously freed up FILE * structure has 0'ed out memory and a second fclose() on it can result in close(0). This results in bad bad things happening. Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2421 ([glusterfs-3.1.2gsync10]: epoll_create returning 0) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2421
* syncdaemon: fix RePCe version queryCsaba Henk2011-02-152-8/+11
| | | | | | | | | | | RepceClient.repce_version fetched its own RePCe version, instead of querying peer, so lame. Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2381 (RePCe versioning) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2381
* syncdaemon: Checking for the existence of gsyncd by trying to aquire a lock ↵Mohammed Junaid Ahmed2011-02-151-5/+6
| | | | | | | | | | | | | on the pidfile. If the locking succeeds then gsyncd is not running and if it fails then it means that gsyncd is running. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: change pidfile handling approachCsaba Henk2011-02-153-28/+48
| | | | | | | | | | | | | | Signal handling of the python interpreter is a bit messy, so we cannot rely on executing a final clause upon termination. Switch over fcntl lock based pidfile handling which can provide reliable info about status of the process. (Due to aforementioned reason, pidfile as such is not guaranteed to be cleaned up, but lock acquisition is a reliable measure.) Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Check for ctx context in the glusterd_op_stage_gsyc_set().Mohammed Junaid Ahmed2011-02-151-0/+8
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: set the default value of timeout to 120secKaushik BV2011-02-151-1/+1
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Moved the gsync start code to cli.Mohammed Junaid Ahmed2011-02-152-141/+93
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: fix some pidfile issuesCsaba Henk2011-02-141-17/+18
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: make /usr/libexec/gsyncd the default remote gsyncd (incomplete ↵Csaba Henk2011-02-141-1/+1
| | | | | | | | | | hacky quickfix) Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2427 (set a proper default for remote syncdaemon) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2427
* syncdaemon: use "ping" message instead of "__version__" to wait for remote ↵Csaba Henk2011-02-141-1/+1
| | | | | | | | | | to come up Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2424 (Starting gsyncd with --debug : AttributeError: type object 'FILEServer' has no attribute '__version__') URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2424
* cluster/dht: Send removexattr() to all subvolumes.Vikas Gorur2011-02-141-4/+52
| | | | | | | | Signed-off-by: Vikas Gorur <vikas@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2426 (removexattr is not sent to all subvolumes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2426
* syncdaemon: config-get-all option add to gsync cli.Mohammed Junaid Ahmed2011-02-141-1/+31
| | | | | | | | Signed-off-by: Mohammed Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: fix KeyErrorCsaba Henk2011-02-141-1/+1
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: make configparser code work with all supported python versionsCsaba Henk2011-02-141-3/+9
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Using /usr/local/libexec/python/syncdaemon as the default ↵Mohammed Junaid Ahmed2011-02-132-32/+157
| | | | | | | | | | directory where the python scripts are installed. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: conf file to be read properlyKaushik BV2011-02-131-2/+5
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Create conf directory if not presetKaushik BV2011-02-131-0/+9
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* initialize the cli_req structure before sending it to xdrRaghavendra Bhat2011-02-131-1/+1
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2418 ([glusterfs-3.1.2qa7]: crash in glusterd) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2418
* syncdaemon: Handling of deleted symlinks (of directories). When a symlink of ↵Kaushik BV2011-02-131-1/+16
| | | | | | | | | | a directory of master is deleted. The corresponding delete in slave is handled as rmdir() of the symlink assuming the file to be directory Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2377 (gsyncd.py RepceClient: call (symlink) failed on peer with instance) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2377
* syncdaemon: configinterface.py file moved under ↵Mohammed Junaid Ahmed2011-02-112-1/+51
| | | | | | | | | | xlators/features/marker/utils/syncdaemon/ directory. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Syncdaemon should not crash on ENOENT while performing setxattr()Kaushik BV2011-02-101-1/+6
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2342 ([glusterfs-3.1.2geosyncqa4]: crash in gsyncd script) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2342
* NFS : Fail Nfs init if volume-id not found.Gaurav2011-02-101-3/+2
| | | | | | | | Signed-off-by: Gaurav <gaurav@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2124 (NFS crashes when volume-id option is not given with dynamic-volume option) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2124
* gsync: cli support for gsyncd.Mohammed Junaid Ahmed2011-02-104-1/+786
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: config revamp #3: implement command line get/set/del interface ↵Csaba Henk2011-02-101-15/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to configuration The INI style config file has following type of sections: - [global] - [peers <local>] - [peers <local> <remote>] Option dispatch to sections is derived from command line (ie., [global] if no arg given, [peers <local>] with <local> being the only arg, [peers <local> <remote>] if <local> and <remote> args are provided). So this all happens under the hood, gsyncd users need not to specify sections. New command line options: - query options: --config-get-all --config-get OPT - modify options: --config-set OPT VAL --config-del OPT Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: config revamp #2: implement canonicalized urls, use them in ↵Csaba Henk2011-02-102-3/+32
| | | | | | | | | | config file sections Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: config revamp #1: drop simplecfg, switch to stdlib's ConfigParserCsaba Henk2011-02-102-94/+13
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* syncdaemon: Removing the simplecfg.py entry from the Makefile.am, since it ↵Mohammed Junaid Ahmed2011-02-101-1/+1
| | | | | | | | | | is removed. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570