summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-op-sm.c
Commit message (Collapse)AuthorAgeFilesLines
...
* glusterd: handle replace-brick in paused state.Krishnan Parthasarathi2011-07-271-7/+15
| | | | | | | | | | | This change ensures that glusterd retains 'state' information of an ongoing replace brick operation even if it went down midway. Change-Id: I697c2f27a96b3200c7865bd1d3a1de9692ce0da1 BUG: 3252 Reviewed-on: http://review.gluster.com/6 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
* glusterd - Removed hardcoding of transport type in replace-brick.Vishwanath S Bhat2011-07-241-24/+9
| | | | | | | | | | | Replace-brick didn't support transport types other than tcp. Test case: replace-brick should work with tcp and rdma. Change-Id: If33f108b70247d81791d25a1a05247f49847b4d7 BUG: 3092 Reviewed-on: http://review.gluster.com/72 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Krishnan Parthasarathi <kp@gluster.com>
* Top/Profile: Report error when all bricks are down on volumeshishir gowda2011-07-201-0/+16
| | | | | | | | | | | Profile - If all bricks are down, report errror. Top - If all bricks or the specified brick is down, report error. Change-Id: I39d4acd631b481233ab2e9f66c8f4160caef5762 BUG: 2600 Reviewed-on: http://review.gluster.com/63 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@gluster.com>
* mgmt/Glusterd: Implementation volume set help/help-xmlKaushik BV2011-07-121-29/+69
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2041 (volume set help option) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2041
* remove hardcoding of transport type to "tcp" while generating vol files in ↵Vishwanath2011-07-111-11/+45
| | | | | | | | | replace-brick Please ingore previous patch for this. Please consider this one. Signed-off-by: Vishwanath S Bhat <vishwanath@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com>
* mgmt/glusterd: return 0 when glusterd_op_get_ctx fails on other glusterd's.Junaid2011-06-301-1/+1
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3078 (Quota: list comamnd fails) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3078
* mgmt/glusterd: 'Quota' use quota-crawl.log to store logs of maintainence mount.Junaid2011-06-301-8/+4
| | | | | | | | | | Allow to set limits even when quota is disabled. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2620 (CLI improvements in quota) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2620
* spelling corrections in glusterfs codeVishwanath2011-06-231-1/+1
| | | | | | | | Signed-off-by: Vishwanath S Bhat <vishwanath@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2903 (Last spelling errors in source code) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2903
* bring in strict check on export directory being re-used for different volumeAmar Tumballi2011-06-231-2/+20
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3065 (make sure the export directories are not re-used as part of another volume) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3065
* gluster volume create: option for stripe + replicate volumeAmar Tumballi2011-06-231-0/+11
| | | | | | | | | | So RAID01 like option is a possibility Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3040 (need a way to create volumes with 'stripe+replicate' setup..) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3040
* mgmt/glusterd: Enable quota only when volume is started.Junaid2011-06-221-0/+6
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2620 (CLI improvements in quota) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2620
* mgmt/glusterd: chdir into mount in second child process while crawling the ↵Junaid2011-06-161-9/+7
| | | | | | | | | | | | | | fs in quota enable. Because the management mount is waiting for glusterd's response and glusterd is doing waitpid on the child which is trying to do chdir into mount, thus causing a deadlock situation. Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2560 (Lazy umount should be done for the maintainance mode mountpoint) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2560
* fixing some build issues in Mac OS XAmar Tumballi2011-06-161-3/+1
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2966 (MacOSX compile failure: duplicate symbol _k) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2966
* pump: cleanup xattrs on both commit and abort path.Krishnan P2011-06-161-0/+57
| | | | | | | | | | | | | | | This change makes glusterd to send a setxattr command for replace-brick commit operation similar to abort. Earlier we could commit even before the 'migration' of data was complete, with this change we fail that operation. Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3033 (Changes to replace-brick and syntask interface.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3033
* glusterd: do_operation_abort and then kill dst_brick.Krishnan P2011-06-161-12/+13
| | | | | | | | Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3033 (Changes to replace-brick and syntask interface.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3033
* nfs:command to change the transport type of nfs server for volumes of ↵Raghavendra Bhat2011-06-081-0/+3
| | | | | | | | | | | transport tcp, rdma Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@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
* glusterd: replace brick status grows with dir tree.Krishnan Parthasarathi2011-06-081-1/+1
| | | | | | | | | | | replace-brick status message's size can grow long with deep directory trees. Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2489 (GlusterFS crashing with replace-brick) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2489
* mgmt/glusterd: Updated the error messages sent on cli quota command failure.Junaid2011-06-081-15/+39
| | | | | | | | Signed-off-by: Junaid <junaid@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2856 ([glusterfs-3.2]: Misleading 'quota remove' output.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2856
* mgmt/glusterd: Display a warning message to CLI in case of a corrupt geo-rep ↵Kaushik BV2011-05-301-40/+39
| | | | | | | | | | session Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2828 (gluster geo-rep stop should not show unsuccessful when the status is corrupt) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2828
* reimplement invocation of external programs with run APICsaba Henk2011-05-261-142/+93
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2562 (invoke external commands precisely with fork + exec) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2562
* Revert "temporary workaround for mtab update race thingy"Csaba Henk2011-05-261-1/+0
| | | | | | | | | | | | | | | | This reverts commit 59b9ab45a01d52e197ab6f76fd71e64910396d57. [c5d781e0 made this temporary workaround unnecessary] Conflicts: xlators/features/marker/utils/syncdaemon/resource.py Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2690 (race between mtab updates of mount and umount) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2690
* cli log level command and per translator log levelVenky Shankar2011-05-201-0/+156
| | | | | | | | Signed-off-by: Venky Shankar <venky@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2714 (implement cli log level command) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2714
* glusterd / geo-rep: set session owner to the uuid of the master vol instead ↵Csaba Henk2011-05-091-2/+2
| | | | | | | | | | of that of glusterd Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785
* glusterd: Checked brick path length in 'staging'.Krishnan Parthasarathi2011-05-041-0/+35
| | | | | | | | | | | Added checks for brick path length in 'staging' of add/replace brick and create_volume subcommands. Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2847 (volume creation fails if brick path is long) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2847
* glusterd: Cleaned up 'store' if vol create fails.Krishnan Parthasarathi2011-05-041-1/+5
| | | | | | | | | | | glusterd's internal 'store' needs to be cleaned up if volume creation operation fails. Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2847 (volume creation fails if brick path is long) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2847
* glusterd / cli: make the needed changes to let a masterless geo-rep config ↵Csaba Henk2011-04-211-30/+45
| | | | | | | | | | request get thru Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785
* geo-replication: revamp CONFIG commandCsaba Henk2011-04-211-238/+100
| | | | | | | | | | Drop the config_type RPC req field, use just a "subop" key in the param dict. Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785
* glusterd / geo-rep: harvesting further benefits of static gsyncd pre-configCsaba Henk2011-04-191-48/+34
| | | | | | | | | | | | | | | | - log-file does not need to be a reserved option anymore as we wouldn't overwrite the user setting - reimplement glusterd_gsync_get_param_file(): all use cases have now pre-configured values, so instead of putting together the needed pathname by ourselves, we can just get it from gsyncd config - refactor it to a common backend with glusterd_get_canon_url() Signed-off-by: Csaba Henk <csaba@lowlife.hu> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785
* glusterd / geo-rep: do all gsyncd pre-configuration in glusterd initCsaba Henk2011-04-191-0/+1
| | | | | | | | | | | | | | | | | | | This is made possible by gsyncd config templating, by which session specific settings can be expressed in a generic form. Benefits: - in glusterd we use only generic (rx pattern based) config settings so we don't violate users' freedom to make settigs for their sessions - don't have to invoke gsyncd in excess to prepare a session - we can pre-configure slave side too (relying on the templates and gsyncd service auto-discovery) - much leaner, much more expressive code Signed-off-by: Csaba Henk <csaba@lowlife.hu> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2785 (gsyncd logs on slave side go to /dev/null) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2785
* mgmt/glusterd: geo-rep: restart-upon-reconfig: don't bail out if the gsync ↵Csaba Henk2011-04-191-2/+4
| | | | | | | | | | session we adjust does not exist Signed-off-by: Csaba Henk <csaba@lowlife.hu> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2777 (geo-replication config setting should have effect on already running sessions) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2777
* mgmt/glusterd: do not allow replace-brick operations when geo-rep sessions ↵Kaushik BV2011-04-191-0/+18
| | | | | | | | | | are active on this volume. Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2765 (geo-replication should have mercy on brick failure) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2765
* mgmt/glusterd: geo-rep config set/del restarts the geo-rep process so that ↵Kaushik BV2011-04-181-13/+69
| | | | | | | | | | it takes up the new configuration values Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2777 (geo-replication config setting should have effect on already running sessions) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2777
* mgmt/glusterd: change the cli output of geo-rep start/stop to resemble the ↵Kaushik BV2011-04-181-3/+5
| | | | | | | | | | output of volume start/stop Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 1570 (geosync related changes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1570
* cli: UI cleanup for geo-replication commandv3.2.0qa14Kaushik BV2011-04-171-1/+3
| | | | | | | | | | | | | * provide a unified output in case of failure of geo-replication session * provide a better formatting of the output geo-replication status command * update the help option of geo-replication command * fix few typos Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2536 (gsync service introspection) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2536
* mgmt/glusterd : change of syntax of geo-replication commandKaushik BV2011-04-171-210/+67
| | | | | | | | | | | | | | | | | | master is referred as a volume name rather than a URL scheme. old syntax: > volume geo-replication start :vol-foo /bar/boo new syntax: > volume geo-replication start vol-foo /bar/boo Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2786 (Having to prepend geo-replication master vol with colon spoils the UI) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2786
* mgmt/glusterd: unify the geo-replication status rpc messages.Kaushik BV2011-04-171-39/+10
| | | | | | | | | | | the intelligence of determining the type of status command is now at glusterd, rather then explicitly setting it while parsing at cli. Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2536 (gsync service introspection) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2536
* glusterd: some cleanups needed for 70adbe7b [refactor gsync_status() ...]Csaba Henk2011-04-171-14/+16
| | | | | | | | Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2780 (geo-replication operations take too much time to complete) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2780
* glusterd: refactor gsync_status() so that we can get at the pidfileCsaba Henk2011-04-161-46/+47
| | | | | | | | | | | This is useful for iterated polling of gsyncd's status, without having to incoke gsyncd to find out about the pidfile. Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2780 (geo-replication operations take too much time to complete) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2780
* mgmt/glusterd: Send the error msg to user if gsync start failsPranith Kumar K2011-04-161-1/+1
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2781 (geo-replication start error message) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2781
* mgmt/glusterd: does not allow disabling of indexing (xtime marking), if a ↵Kaushik BV2011-04-151-3/+1
| | | | | | | | | | gsync session is active. Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2559 (provide two options in CLI for gluster volume gsync indexing <volname> <enable|disable>) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2559
* mgmt/glusterd: handle error condition in quota fs crawlPranith Kumar K2011-04-151-1/+7
| | | | | | | | | | | | Quota enable starts a crawl on the maintenance mount point, but if the chdir to the mount point fails it will start the crawl on '/'. So the child should exit with EXIT_FAILURE when the chdir fails. Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2770 (Handle error cases in quota fs crawl) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2770
* mgmt/glusterd: fix double free.v3.2.0qa13Raghavendra G2011-04-151-3/+11
| | | | | | | | | | | | | - the limit-usage string should be stored as static, since remove-limits will be modifying it and probably freeing it. - this static string should also be explicitly freed in glusterd_quota_disable since dict_del won't free it. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Vijay Bellur <vijay@gluster.com> BUG: 2776 (gluster quota remove crashed glusterd) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2776
* mgmt/glusterd: Memory leak and message cleanupPranith Kumar K2011-04-151-19/+15
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2764 (Cleanup memory leaks seen in quota and gsync code paths) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2764
* use "geo-replication" all over as the official name of this featureCsaba Henk2011-04-151-33/+31
| | | | | | | | | | Use GEOREP macro if you want to refer to the feature in code. Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2757 (refactory gsync/gsyncd/syncdaemon/whatever to geo-replication) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2757
* glusterd/volgen: refactor some thingsCsaba Henk2011-04-151-38/+22
| | | | | | | | | | | | | | | | - use macros for exported volume tunables - introduce glusterd_volinfo_get_boolean as retrieval of boolean optuions was a recurring pattern and became somewhat cumbersome Also fixed illegal access to volinfo dict. @pranith: use always the glusterd_volinfo_get* API for that purpose so that defaults are taken to consideration. Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2757 (refactory gsync/gsyncd/syncdaemon/whatever to geo-replication) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2757
* mgmt/glusterd: restart gsyncd on glusterd restartPranith Kumar K2011-04-141-2/+5
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2761 (Restart gsyncd processes on glusterd restart) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2761
* mgmt/glusterd: fail the volume stop opeeration if Gsync sessions are active.Kaushik BV2011-04-141-0/+36
| | | | | | | | Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2751 (Volme stop must not be proceeded if gsync sessions are active for the volume) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2751
* mgmt/glusterd: Implementation of volume gsync status [master [slave]]Kaushik BV2011-04-141-156/+918
| | | | | | | | | | | | | | Changes made in the path of gsync start/stop as well, where we maintain a list of active gsync sessions, hence gsync stop could be executed at all nodes. A new dict in glusterd_volinfo_t added to maintain an active list of gsync slaves running on each master. Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2536 (gsync service introspection) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2536
* mgmt/glusterd: check for 'peerinfo->mgmt' before accessing itAmar Tumballi2011-04-141-4/+4
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2728 ([glusterfs-3.2.0qa11]: glusterd crashed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2728
* glusterd: report the user if disable quota is given on already disabled quotaRaghavendra Bhat2011-04-131-0/+6
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2620 (CLI improvements in quota) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2620