MongoDB の Java Connection driver のこのコミットで次のコードを見ましたが、最初はある種の冗談のように見えます。次のコードは何をしますか?
if (!((_ok) ? true : (Math.random() > 0.1))) {
return res;
}
(編集:この質問を投稿してからコードが更新されました)
MongoDB の Java Connection driver のこのコミットで次のコードを見ましたが、最初はある種の冗談のように見えます。次のコードは何をしますか?
if (!((_ok) ? true : (Math.random() > 0.1))) {
return res;
}
(編集:この質問を投稿してからコードが更新されました)
11 時間前 gareth-rees:
おそらく、カウンターやタイマーを維持するコストを負担することなく、サーバー障害の約 1/10 のみをログに記録する (したがって、ログに大量のスパムを送信しないようにする) という考えです。(しかし、確かにタイマーを維持することは手頃な価格でしょうか?)
負の 1 に初期化されたクラス メンバーを追加します。
private int logit = -1;
try ブロックで、テストを行います。
if( !ok && (logit = (logit + 1 ) % 10) == 0 ) { //log error
これは常に最初のエラーをログに記録し、その後は 10 番目のエラーごとにログに記録します。論理演算子は「短絡」するため、logit は実際のエラーでのみインクリメントされます。
接続に関係なく、すべてのエラーの 1 番目と 10 番目が必要な場合は、aa メンバーではなく logit クラスを static にします。
指摘されていたように、これはスレッドセーフである必要があります。
private synchronized int getLogit() {
return (logit = (logit + 1 ) % 10);
}
try ブロックで、テストを行います。
if( !ok && getLogit() == 0 ) { //log error
注: エラーの 90% を捨てるのは良い考えではないと思います。