Hyperledger Fabric v0.6.1-preview で200件以上のトランザクションが捌けなかった話

# 事象

Fabricのサンプルとして配られている送金処理(exsample02)を繰りまわしたところ、
200をトリガーに処理が止まってしまった。v1.0に期待

ソース修正点

```js:app.js
//省略(l.140くらい)
       var step;
       for (step = 0; step < 1000; step++) 
       {
           invoke(user);
       }
//省略(l.150くらい)
```

エラーメッセージ

```bash:error.log
Error: started twice without stopping
    at Error (native)
    at ResponseTime.start (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/stats.js:77:19)
    at TCertGetter.getTCerts (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:1705:35)
    at TCertGetter.getNextTCert (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:1659:18)
    at Member.getNextTCert (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:862:28)
    at TransactionContext.getMyTCert (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:1175:21)
    at TransactionContext.invoke (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:1012:14)
    at Member.invoke (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/node_modules/hfc/lib/hfc.js:814:12)
    at executeTest (/home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/childProcess.js:58:27)
    at /home/ratnakar/go/src/github.com/hyperledger/fabric/event-perf/childProcess.js:76:13
```

# 原因(推測)

トランザクション発行時、はじめにHFCがmembersrvcからTCert Batch Size(def200)の数だけ
TCertを発行するがそれを使い切った後のプロセスに問題がある？

# 解決方法

暫定ですが・・・
## 1. HFCのバグを取り除く

/opt/gopath/src/github.com/hyperledger/fabric/examples/sdk/node/node_modules/hfc/lib/hfc.jsの中身をいじって、getTCertResponseTimeを使っているところを除く(3箇所)とうごいた。

```js:hfc.js
// 省略(l.1700くらい)
   TCertGetter.prototype.getTCerts = function () {
        var self = this;
        var req = {
            name: self.member.getName(),
            enrollment: self.member.getEnrollment(),
            num: self.member.getTCertBatchSize(),
            attrs: self.attrs
        };
       // self.getTCertResponseTime.start();  ←getTCertResponseTimeがだめみたい・・・
        self.memberServices.getTCertBatch(req, function (err, tcerts) {
            if (err) {
       //         self.getTCertResponseTime.cancel();　　←getTCertResponseTimeがだめみたい・・・
                // Error all waiters
                while (self.getTCertWaiters.length > 0) {
                    self.getTCertWaiters.shift()(err);
                }
                return;
            }
       //     self.getTCertResponseTime.stop();　　←getTCertResponseTimeがだめみたい・・・
            // Add to member's tcert list
            while (tcerts.length > 0) {
                self.tcerts.push(tcerts.shift());
            }
            // Allow waiters to proceed
            while (self.getTCertWaiters.length > 0 && self.tcerts.length > 0) {
                var waiter = self.getTCertWaiters.shift();
                waiter(null, self.tcerts.shift());
            }
        });
    };
//　省略(l1720くらい)
```


## 2. Tcert Batch Sizeを大きくする(根本解決じゃない)
ファイルをベタ書きで書き換える、メソッドを呼び出す両方ありますが後者を記載。

```JS:app.js
chain.setTCertBatchSize(1000);
```
↑を最初のほうのどこか(chainを宣言するよりはあと)に追加する。



# 参考リンク

https://jira.hyperledger.org/browse/FAB-620

https://github.com/IBM-Blockchain/cp-web/issues/55