summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* glusterd: remove rpc code from internals of glusterdAmar Tumballi2011-03-014-1003/+664
| | | | | | | | 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
* glusterd: separate out cli specific programs and mgmt specific programsAmar Tumballi2011-03-0112-120/+237
| | | | | | | | 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
* glusterd: dependency on 'priv->mgmt' completely removedAmar Tumballi2011-03-015-396/+392
| | | | | | | | | | using 'peerinfo->mgmt' instead. 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
* glusterd: keep mgmt program peerinfo specificAmar Tumballi2011-03-015-70/+208
| | | | | | | | | | | | | With different version of glusterd in different machines, its not possible to support using just one mgmt program. Instead each peerinfo structure should have its own mgmt programs, so one glusterd can support multiple versions 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
* v2 Prevent removal of trusted.gfid xattrshishir gowda2011-03-011-0/+6
| | | | | | | | Signed-off-by: shishir gowda <shishirng@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2461 (remove xattr of trusted.gfid succeeds) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2461
* mgmt/Glusterd: while resetting the volume options, the previous data ↵v3.1.3qa1Kaushik BV2011-03-012-7/+29
| | | | | | | | | | structures w.r.t auth. must be deleted Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2374 ([glusterfs 3.1.2] gluster volume set auth.reject command failure on nfs) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2374
* check for inode and path being NULL before copying themRaghavendra Bhat2011-02-281-24/+28
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2463 ([7b07d444a77526f27f860210930bf1d4c7fbea9b]: ./autogen.sh crashes glusterfs in fuse_getattr or fuse_setattr) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2463
* Stop building uuid test programVijay Bellur2011-02-281-1/+1
| | | | | | | | | | Building tst_uuid.c results in a compilation error with -DDEBUG Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2447 (Enable assert () and memory accounting with DEBUG) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2447
* rpcsvc: Handle more than one payload vectors.Raghavendra G2011-02-283-3/+11
| | | | | | | | | | | - fops like write can recieve payload data in more than one vector. This can happen with write-behind being loaded on client side. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2454 (rdma data corruption) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2454
* if volume created is both of tcp and rdma type show it in volume infoRaghavendra Bhat2011-02-281-2/+4
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@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
* mgmt/glusterd: prevent spurious cmd unlocksPranith K2011-02-285-627/+318
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2460 ([glusterfs-3.2.0-gsync1]: gluserd crashed trying to access freed request) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2460
* performance/io-cache: Whitespace cleanupVijay Bellur2011-02-281-205/+201
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* libglusterfs/dict.c: Whitespace cleanupVijay Bellur2011-02-281-217/+219
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* cluster/afr: Re-factoring code for alignmentVijay Bellur2011-02-281-62/+62
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* cluster/afr: Whitespace cleanupVijay Bellur2011-02-282-124/+126
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* libglusterfs/xlator.c: whitespace cleanupVijay Bellur2011-02-281-55/+51
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* dht: log filename on failed reavalidateAnand Avati2011-02-251-2/+3
| | | | | | | | | | The previous log message is pretty much useless without the path Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* install gluster binaries under /opt/glusterfs/version with sym.link at /usr/binLakshmipathi G2011-02-222-11/+30
| | | | | | | | Signed-off-by: Lakshmipathi G <lakshmipathi@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2279 (rpm spec file changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2279
* Solaris build fixes.shishir gowda2011-02-221-0/+1
| | | | | | | | | | Including compat.h for definitions of IXDR_PUT_U_../IXDR_GET_U.. 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
* man pages updatedAmar Tumballi2011-02-227-35/+155
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2444 (keep man pages upto date with new codebase.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2444
* 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
* Solaris: disable cli support rebalance and replace brickshishir gowda2011-02-221-0/+8
| | | | | | | | 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
* send the CHILD_DOWN event also to fuseAmar Tumballi2011-02-222-33/+13
| | | | | | | | | | 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-225-6/+83
| | | | | | | | | | | | | | | 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-224-1/+14
| | | | | | | | | | | | | 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
* free the tokens obtained from the cliRaghavendra Bhat2011-02-221-0/+3
| | | | | | | | | | | The cli command which is tokenized is not freed leading to a memory leak. Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2113 (cli: memory corruption in add-brick and create volume parsing functions) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2113
* Fix getcwd size arg to make it work in solaris.shishir gowda2011-02-221-1/+7
| | | | | | | | | | | | | glusterfs/d -f path failed if the path was not absolute. If the BUF argument is NULL, then on solaris the size argument has to be passed. On linux, if the size argument passed is 0, then it dynmically allocates a buffer of the required size. The fix is to pass PATH_MAX as the size for consistency. Signed-off-by: Shishir Gowda <shishirng@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2443 (starting glusterfs/d -f with relative path crashes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2443
* Solaris build fixesshishir gowda2011-02-226-8/+17
| | | | | | | | | | | | | | 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
* Validate peer probe command's hostname/ip address.shishir gowda2011-02-221-0/+8
| | | | | | | | | | | | Note, if an ip octet range exceeds 255, though this fails as a valid ipv4 address, it is still a valid hostname. valid chars are: 'a'-'z', '0' - '9', '-', '.' with a max of 255 chars. Signed-off-by: shishir gowda <shishirng@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2194 (gluster peer probe on a ip octet value bigger than 255 has no validation) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2194
* libglusterfs: Enable assert() and memory accounting with DEBUGVijay Bellur2011-02-212-3/+12
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2447 (Enable assert () and memory accounting with DEBUG) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2447
* 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-188-276/+254
| | | | | | | | | | * 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
* libglusterfs/dict: memcpy() data_t in unserialize.Vikas Gorur2011-02-171-2/+2
| | | | | | | | | | | | This fixes a race in dht_getxattr() where the xattr dictionary returned by one of the subvolumes can get free'd before STACK_UNWIND, leading to applications seeing junk values. Signed-off-by: Vikas Gorur <vikas@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2442 (getxattr() on a directory sometimes returns junk) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2442
* Check correct variable after function call.Sachidananda2011-02-171-9/+8
| | | | | | | | | | And some white space cleanups. Signed-off-by: Sachidananda Urs <sac@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2410 (Wrong variable checked after a function call) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2410
* Typo fixes in log and cli messages.Sachidananda2011-02-172-3/+3
| | | | | | | | 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