summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr
Commit message (Collapse)AuthorAgeFilesLines
* LICENSE: s/GNU Affero General Public/GNU General Public/v3.1.6qa6Pranith Kumar K2011-08-0626-78/+78
| | | | | | | | Change-Id: I30b1807f4493a9b4ffa9899548daf7d29a0a6364 BUG: 3348 Reviewed-on: http://review.gluster.com/184 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@gluster.com>
* cluster/afr: previous read_child should take precedence over priv->read_childPranith K2011-07-172-2/+10
| | | | | | | | | | | | Lookup uses the sources array to decide if a child is read_child or not. So if afr_mark_sources returns 0 i.e. all children are sources, explicitly mark them as sources. Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3138 ([release-3.2]: ls shows 2 entries) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3138
* cluster/afr: save xattr of all the children in lookup_cbkPranith K2011-07-171-2/+2
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3138 ([release-3.2]: ls shows 2 entries) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3138
* afr: changes in volume_options to assist volume setKaushik BV2011-07-171-4/+40
| | | | | | | | 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
* cluster/afr: set frame local before access windPranith K2011-07-011-0/+2
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3072 (Crash in afr_access_cbk) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3072
* cluster/afr: fix the range of the lock taken in [f]truncatePranith K2011-07-011-4/+4
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3077 (afr [f]truncate locks wrong region in transaction) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3077
* pump: mark pending before notify to children to avoid race in single CPU.Krishnan P2011-06-221-2/+2
| | | | | | | | Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3050 ('replace-brick' hangs on vm's) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3050
* afr: bg self-heal must be off if self-heal-count=0.Krishnan P2011-06-221-3/+3
| | | | | | | | Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 3036 (self-heal problem in replace-brick) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3036
* loc_t: add 'gfid' and 'pargfid' fieldsAmar Tumballi2011-06-144-0/+26
| | | | | | | | | | | | | | these fields are used mainly in case of selfheal path, where 'inode->gfid'||'parent->gfid' is not yet set. These fields in 'loc' will have lower precedence than 'inode->gfid' in client protocol. Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2346 (Log message enhancements in GlusterFS - phase 1) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2346
* pump: cleanup potential dict related memory corruption.v3.1.5qa2Krishnan Parthasarathi2011-06-104-39/+101
| | | | | | | | 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
* cluster/afr: propagate proper errno returned by lock fopsAnand Avati2011-06-101-4/+0
| | | | | | | | | | If locks could not be held on any of the servers, then propagate the errno returned by the lock FOPs instead of hardcoding EAGAIN/EINVAL. Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2993 ([glusterfs-3.2.0qa2]: hang while doing the selfheal) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2993
* cluster/afr: Give proper device id for mknodPranith Kumar K2011-06-091-1/+2
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2840 (files not getting self-healed when the first child goes down) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2840
* cluster/afr: lookup should set the read-child based on pending xattrsPranith Kumar K2011-06-093-34/+100
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2840 (files not getting self-healed when the first child goes down) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2840
* cluster/afr: Read-dir should wind to the read-child firstPranith Kumar K2011-06-091-44/+53
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2840 (files not getting self-healed when the first child goes down) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2840
* cluster/afr: Log errors in afr self-heal with GF_LOG_ERRORPranith Kumar K2011-06-096-43/+57
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2986 (Failed operations should should be logged `E' or `W') URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2986
* cluster/afr: declare favorite_child as int instead of unsigned intRaghavendra Bhat2011-05-312-2/+2
| | | | | | | | | | | | | | In afr_private_t structure favorite child is declared as unsigned int. In init function of afr we set favorite child to -1, if that option is not found in volfile. But favorite child value will be set to a huge value instead of -1 since it is an unsigned int and in statedump file favorite child value is displayed as a huge value instead of -1. Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2668 ([glusterfs-3.2.9qa7]: createbench error) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2668
* send the proper device id to posix while self healing device special file entryRaghavendra Bhat2011-05-311-9/+14
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2567 (self heal on device files changes the major and minor number) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2567
* pump: init last_event array to be used in afr_notifyPranith Kumar K2011-05-311-0/+7
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2870 (Inconsistent xattr values when creating bricks) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2870
* cluster/afr: Send Non-blocking lock in non-blocking entrylkPranith Kumar K2011-05-311-1/+1
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2949 (self-heal hangs) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2949
* pump: Detect 'empty' brick and finish migration.Krishnan Parthasarathi2011-05-311-0/+8
| | | | | | | | | | | Signed-off-by: Krishnan Parthasarathi <kp@gluster.com> BUG: 2909 (replace brick of empty brick never says migration completed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2909 Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2909 (replace brick of empty brick never says migration completed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2909
* cluster/afr: Send the first child up/down after all its children notifyPranith Kumar K2011-05-313-55/+113
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2870 (Inconsistent xattr values when creating bricks) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2870
* cluster/afr: Avoid null dereferencePranith Kumar K2011-04-141-0/+3
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2750 ([glusterfs-3.2.0qa11]: nfs server crashed in afr_sh_entry_expunge_cbk) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2750
* cluster/afr: skip openfd flush when the file is already deletedPranith K2011-04-112-6/+19
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2497 (client crashes) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2497
* afr-entry-self-heal: fixes to detected renames (gfid based)Anand Avati2011-04-112-15/+39
| | | | | | | | | | | | | - perform expunge first (before impunge) to be able to delete renamed away files - perform readdirp instead of readdir to get gfid along with entry names - if gfid mismatch is found, expunge the entry Signed-off-by: Anand Avati <avati@gluster.com> Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2500 (Self Healing not working) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2500
* 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
* core: have framework for GF_EVENT_CHILD_MODIFIED notifcation eventAnand Avati2011-02-221-0/+4
| | | | | | | | | | | | | 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
* Solaris build fixesshishir gowda2011-02-221-1/+1
| | | | | | | | | | | | | | 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
* 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
* cluster/afr: Perform self-heal as rootPranith K2011-02-082-1/+4
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2370 (cluster/afr: Perform self-heal as root) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2370
* cluster/afr: fix races in self-healPranith K2011-02-041-119/+125
| | | | | | | | Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1188 (3.0.5 client crash - afr_set_split_brain) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1188
* adding libxlator, to ensure proper client side aggregation of marks by ↵Kaushik BV2011-01-273-6/+85
| | | | | | | | | | | clustering translators Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2310 (georeplication) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2310
* cluster/replicate: update st_nlink count of stat sent to application after ↵Raghavendra G2011-01-071-3/+18
| | | | | | | | | | | | | | completion of entry-self-heal. - certain applications like 'find' use st_nlink count to optimize searches. Hence an incorrect hard link count can result in non-healing of some of the newly created subdirectories. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2187 (Self heal errors) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2187
* afr_lookup_done: Propogate the same inode number as sent in first lookupshishir gowda2010-12-291-7/+7
| | | | | | | | | If only one subvolume was up, we used to unwind, without updating the ino Signed-off-by: shishir gowda <shishirng@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2144 (errors removing directories when one subvolume is down) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2144
* change the log level from warning to debug while getting pending matrixRaghavendra Bhat2010-12-271-1/+1
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1080 (clang errors in the file afr-self-heal-common.c) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1080
* Add volume key to select data-self-heal-algorithmHarshavardhana2010-12-271-11/+55
| | | | | | | | Signed-off-by: Harshavardhana <harsha@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2218 (Replicate self-heal causes servers to go 100% cpu and unresponsive.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2218
* cluster/replicate: fix warnings due to format string mismatches during ↵Raghavendra G2010-12-143-21/+30
| | | | | | | | | | invocation of gf_log. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2211 ((re)introduce warnings for format string/parameter mismatch) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2211
* set the return value to -1 intitially which may be returned as success in ↵Raghavendra Bhat2010-12-121-1/+1
| | | | | | | | | | validate_or_goto Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1235 (Bug for all pump/migrate commits) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1235
* check the return value after setting the fd context in afrRaghavendra Bhat2010-12-121-2/+2
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 865 (Add locks recovery support in GlusterFS) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=865
* check the return value properly after calling inode_pathRaghavendra Bhat2010-12-121-1/+1
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2203 ([glusterfs 3.1.1]: Core generated with Segmentation fault in afr-open.c) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2203
* replicate: propagate CHILD_DOWN upwards properlyAnand Avati2010-12-082-4/+12
| | | | | | | | | | | | | | | During initialization if one subvolume returns CHILD_DOWN, then do not consider the other subvolume as down if we still haven't heard from it yet This causes DHT (on top) to prematurely (and wrongly) send CHILD_UP/DOWN upwards Signed-off-by: Anand V. Avati <avati@amp.gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2200 (cp dies with "Invalid argument" after failover) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2200
* error out if the data-self-heal-window-size is less than 1Raghavendra Bhat2010-11-181-2/+2
| | | | | | | | Signed-off-by: Raghavendra Bhat <raghavendrabhat@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2120 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2120
* cluster/pump: send PARENT_UP to dst_child after init is successfulAmar Tumballi2010-11-181-0/+6
| | | | | | | | Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2122 () URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2122
* cluster/replicate: Fix memory leak in afr_fd_ctx_cleanup.Raghavendra G2010-11-151-0/+3
| | | | | | | | Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1438 (memory leaks) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1438
* cluster/pump: Reset saved path upon pump completionVijay Bellur2010-11-141-0/+2
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2084 ([3.1.1qa5] : replace-brick fails to migrate data when migration from same hostname) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2084
* replicate: optimistic changelogAnand Avati2010-11-093-13/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The standard way of maintaining changelog in replicate has been to write out pending flags and to unset the pending flag post the actual operation. This new optimization kicks in only when all subvolumes are up. The optimization is that, during pre-op, no changelog is written for METADATA and ENTRY/RENAME operations. If during the operation nothing failed, no changelog is updated in post-op either. If however, something does fail during an operation, then, pending flags get written during post op pointing only towards the failed nodes. DATA transactions continue to work the way they are. If one subvolume is down, pending flags are written in pre-op changelog itself as before. The impact of this optimization is only in the case when both servers die or the client dies while the 'FOP' stage of the transaction is in progress. By nature of METADATA and ENTRY operations, detecting a mismatch later is not dependent on the presence of changelog. Changelog only determines the direction in which self-heal happens for these types of transactions. For the direction too this optimization does not have a major impact because in the cases of failure (both servers dieing or client dieing) the final state (direction of self-heal) would be arbitrary anyways as the syscall wouldn't have completed. Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2068 (performance enhancements) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2068
* replicate: attempt re-open of files before performing openfd selfhealAnand Avati2010-10-271-7/+176
| | | | | | | | | | | | in cases where subvolume state gets swapped between open and write opening file on the remaining subvolumes is necessary before attempting a self-heal. previously files were opened after self heal. Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 918 (AFR write fails when subvolumes' state is swapped) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=918
* replicate: fix hang/missing frame during lockingAnand Avati2010-10-271-1/+15
| | | | | | | | | | | | nonblocking style locking would result in a missing frame when all subvolumes are down or when no subvolume on which fd was opened is up. Check for this condition and unlock gracefully Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 918 (AFR write fails when subvolumes' state is swapped) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=918
* Change assert to GF_ASSERTVijay Bellur2010-10-123-8/+8
| | | | | | | | Signed-off-by: Vijay Bellur <vijay@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 971 (dynamic volume management) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971