---
layout: post
title: 一个有趣的 "BUG"
categories: ["技术", "随笔"]
comments: true
---

昨天，我在测试数据导入，从 Oracle 数据库中将符合条件的数据导入到 PostgreSQL 数据库。

具体流程是这样的：在 Oracle 中插入数据，点击管理页面上的一个按钮，将新插入的数据导入到 PostgreSQL 数据库中。

但是，在测试的过程中发现了一个很奇怪的问题：`有时候，同一条数据会被插入 2 次。注意是“有时候”`。

我不知道什么情况下会出现这个问题，我做了很多次尝试，都没有发现这个 BUG 出现的规律，它就是偶然出现的，没有任何征兆，我无法复现这个 BUG。

这个问题出现的频率并不低，让我无法忽视这个问题，生怕是个什么严重的 BUG。

我决定在今天尝试找到稳定复现的方法。

<!--more-->

{% include split_lines.html %}

我告诉了研发，他们没找到原因，在商量着如何处理这个问题，防止问题发生，讨论研究了半天。

后来，研发稍微做了一些改动，不允许插入重复数据，数据重复时会报错（但这并没有从本质上找到为什么会插入 2 条重复数据的问题）。

过了一会儿，研发让我再测一测。刚执行了几条数据，这个问题又出现了。

这时，在界面上弹出了报错窗口。研发也恰好在看日志，询问我是不是刚刚在导入数据。

```
研发 A：那段代码被调用了两次，SQL 语句被执行了两次。

研发 B：但如果双击了按钮的话，第二次应该是导入不成功的吧？因为第二次点击的时候，这条数据的时间已经不比第一次插入的时间新了，不会被导入的（这是导入数据的判断条件）。
```

啊，听到这里，我突然想到了什么！！

```
我：那是不是说，如果双击了两次，而且这两次时间间隔非常短，第一次请求还没完成或者还没有返回，就已经发起第二次请求了，就有可能会出现执行两次的情况？

研发 B：对。

我：那我知道了，可能是我鼠标的原因，我鼠标有问题，它有时候会自动双击。。。

研发 A：（晕倒 ing）...
```

为了验证我的说法，我们换了不同的鼠标和我的鼠标做对比，研发查看日志，我查看页面按钮的请求情况，反复验证。

最后，发现真的是我鼠标的自动双击导致的，而且它自动双击的速度实在太快了！！

其实，在我尝试寻找原因的时候双击过鼠标，但我手动双击的速度远远比不上它。。。

行吧。。。

{% include ending.html %}

Add new post: a funny bug.
Add new post: a funny bug.

Signed-off-by: CoffeeChou <27af2d31cca7aebdd43134087c21fbcbed32b54c@gmail.com>
