こちらのページは旧SkyWayの情報です。新しいSkyWayに関する情報はこちら

UNAVAILABLE_ID

Comments

9 comments

  • Avatar
    Takashi Watanabe

    お返事をいただけないようですが、まだ同じ問題で困っています。

    少なくとも上記質問1についてははっきりしたSDKのバグですのでご対処いただけないでしょうか。

    また2について、

    2つのクライアントがPEERを開き、片方の接続を切ったとき、切断したほうのPEERにはサーバー側で90秒のタイムアウトが起こります。この90秒間に、まだつながっているほうのもう一方から、切断したほうへ向けてdataConnectionを開くと、開きっぱなしのままなにもコールバックが返ってこなくなります。タイムアウト後にdataConnectionを開けるとPEERにエラーが返るのですが、タイムアウト中はなにも返ってこないようなので、接続先のPEERがタイムアウト中の場合、タイムアウト後にエラーを返していただけないでしょうか。切断していないほうからみると、突然dataConnectionのコールバックが働かなくなったようにしか見えません。接続先は移動かなにかでネットワークから切れている状態が想定されるので、そちらから他のサーバー等を使って働きかけることも不可能です。なので、サーバー側からなにかアクションが起こらないととても対処がしずらいのですが。難しいのであればそう言っていただければ助かります、ほかに聞ける場所もありませんから、無視されると困ってしまいます。

    よろしくお願いします。

     

    渡部

    渡部

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka

    渡部様

    SkyWay開発チームの仲と申します。

    返信が遅くなり申し訳ありません。

    こちらのコミュニティについては、開発者の皆様同士で情報を共有し合うというのがコンセプトとなっております。

    もちろん我々SkyWay開発チームも内容を確認し返信するようにしておりますが、全ての投稿にタイムリーに対応はできません。その点は何卒、ご容赦ください。

    技術問い合わせに関して確実な返信ご希望であれば、Enterprise Editionに付帯するチケットサポートのご利用をおすすめいたします。

     

    > 質問1)

    ご報告有難うございます。

    こちらはおっしゃる通りSDKの不具合でした。

    ご不便をおかけして申し訳ありません。

    現在改修作業を進めておりますので、修正版がリリースされましたら、改めてお知らせいたします。

     

    > 質問2)

    改善点のご報告有難うございます。

    とても助かります。

    ご報告いただいた手順を我々の方で再現し、ご期待に添えるようにSDKやサーバ側の改修を前向にき検討させていただきます。

     

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka

    > PEER.OPTIONのデバッグオプションが無視されます

    こちらの件ですが、本日修正版をリリースしました。

    https://github.com/skyway/skyway-android-sdk/releases/tag/v1.0.2

    ご確認いただければと思います。

    0
    Comment actions Permalink
  • Avatar
    Takashi Watanabe (Edited )

    仲様

    ご対応ありがとうございます。ただ、以前のSDKではALL_LOGSの場合、PING->PONGをはじめひっきりなしにメッセージが出ていたのですが、v1.0.2ではほとんどでなくなりました。エラーもあまり出ているように見えません、やはりあまり設定が反映されていないようですのでご確認ください。

     

    また、上記の問題をずっと調べていますが、v1.0.2のログで確認ができたことがあります。

    まれに、

    DataConnection d = thePeer.connect(toPeer, option);

    のように開こうとした場合、dataconnectionはnullが返され、

    他のpeerには問題なく接続できているのにも関わらず、突然、

    11-05 06:05:51.677 8209-8209 W/SkyWay++:: You cannot connect to a new Peer because you are not connecting to SkyWay server now.You can create a new Peer to reconnect, or call reconnect() on this peer if you believe its ID to still be available.

    こういうログが吐き出される場合があります。

    この前後にエラーのコールバックがあればいいのですが、このメッセージが出る場合にはなにも起きません。

    dataconnectionにnullが返るのがまずおかしいので、sdkのバグであることは明らかだと思うのですが。

    さらに、ここで返されたdataconnectionがnullであった場合を検出して、peer.disconnect(); peer.destroy(); そして、peerをnullにしても、次に新しくpeerをopenしようとすると、

    11-05 07:24:21.333 8209-8209 D/onPeerError(KuroServicejava:386): onPeerError - UNKNOWN : UNKNOWN : Host not found (authoritative)

    こんなメッセージが返ります。この状態になると、何度peerを捨てても、同じメッセ―じが繰り返すだけでプロセスを終了するまではまったくつながらない状態になります。peerはそのたびにnullにしていますので、新しいプロセスになってからつながる理由が全く分かりません。

    v1.0.2の浅いログでも、このパターンでおかしくなることがわかりましたので、これにさらに対処するために全てのlogがどうしても見たいので、よろしくお願いします。

    また、"W/SkyWay++:: You cannot connect to a new Peer because you are not connecting to ..."と、"UNKNOWN : Host not found (authoritative)"がどんな場合に返されるものなのか、教えてください。お願いします。

     

    渡部

     

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka

    ご報告有難うございます。

    ご報告頂いた件について、SDKの不具合の可能性があるため、調査いたします。

    ご不便をおかけして申し訳ありません。

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka

    > この前後にエラーのコールバックがあればいいのですが、

     

    追加で確認させてください。

    dataconnectionでNullが返却された際、`PeerError.PeerErrorEnum.DISCONNECTED`(シグナリングサーバとの接続が切れた)は発火していませんか?

    0
    Comment actions Permalink
  • Avatar
    Takashi Watanabe

    仲様

    ご対応ありがとうございます。

    発火しておりません。`PeerError.PeerErrorEnum.DISCONNECTED`が切れた場合にはPeerをリセットしてnullにするようになっています。

     

    質問ばかりで申し訳ありませんが、もう一つ仕様について伺います。

     

    DataConnection d = thePeer.connect(toPeer, option);

    で開こうとして、相手が見つからなかった場合、

    peer.on(Peer.PeerEventEnum.ERROR, new OnCallback() {.....

    にコールバックが返ります。これはもちろんよくご存じだと思うのですが、この時に戻ったobject oに対し、

    PeerError p = (PeerError)o;

    で、p.typeとp.messageを拾うと、

    p.typeは、`PeerError.PeerErrorEnum.PEER_UNAVAILABLE`

    p.messageには、

    "Failed to send to "<相手ピアID>". Please make sure the peerId is correct."

    という文字列がついてきます。

    しかしそもそもこのエラーを出す原因となったときに取得したdataConnectionのほうには一切何もcallbackがなく、dataConnectionは開こうとしたままずっとそのままになります。このdataConnectionは、つながらないのですから破棄したいのですが、複数のdataConnectionを保持している場合、上記のようにエラーがpeerのcallbackのほうに戻るので、取得したdataConnectionを特定することが不可能になります。

    とはいえ特定しなければ困るので、この文字列からpeerIDを抜き出し、そのpeerに対して開こうとしているdataConnectionを全部探して消す、という無駄な処理をやっているのですが、この文字列は以前のSDKと変わっていますしただのエラーメッセージですから今後も変わる可能性があるわけで、そこに依存しなければ成り立たないのはおっかないです。

     

    PeerErrorに、dataConnectionIDを追加していただき、peerエラーコールバックからでもエラーの原因を特定できるようにしていただけないでしょうか。また、このエラーの際にはdataConnectionのほうにも(というかむしろdataConnectionのほうだけでいいような気がするのですが)callbackを返す仕様にならないでしょうか。しかし、そもそも、

    dataConnection.on(DataConnection.DataEventEnum.ERROR, new OnCallback().....

    が発火したところを見たことがないのですが、どんな時にこちらが呼ばれるのでしょうか。

     

    よろしくです。

     

     

     

     

     

    0
    Comment actions Permalink
  • Avatar
    Yusuke Naka

    > 発火しておりません。
    情報有難うございます。
    引き続き調査いたします。

    追加質問のDataConnection.DataEventEnum.ERROR の発生契機ですが、
    例えば、 send() 実行時にDataConnectionが確立されていない場合等に発火します。

    その他、これまでに本スレッドでいただいた不具合報告については引き続き解析検討を続けます。
    また、いただいたご要望については、SDKの開発に活かしていきます。

    0
    Comment actions Permalink
  • Avatar
    Takashi Watanabe

    仲様

    ありがとうございます。

     

    SDKがおかしくなる時の挙動がわかってきたので、だいぶ回避できるようになってきたのですが、dataConnectionを開いたり、繋がらない場合破棄したりを繰り返し行っていると(特定のpeerにつながるかどうかを30秒に一回ほど確認しています)、数十分~数時間でアプリケーションが落ちてしまいます。ログにスタックトレースがあまり出ないのですが、アプリケーションだけでなく全てのプロセスを表示したところ、アプリケーションのフリーズ直前にこんなログが出ていました。

    これを見ると、libskyway.soが止まっているように見えます、dataConnectionをnullにしても、なにかが残っているようですが、ご確認ください。よろしくお願いします。

    渡部


    11-09 02:05:10.791 26888-26888 D/dumpDataConnections(DataConnectionPooljava:437): 0 : .isOpen = true : STATE = OPEN : from = kit9tn81nkrj : to = d790nlrqmgu5 : CREATOR = INCOMING : ID = c_oimogvzg7qrccg1npzaor
    11-09 02:05:10.793 26888-26888 D/dumpDataConnections(DataConnectionPooljava:437): 1 : .isOpen = false : STATE = CLOSING : from = d790nlrqmgu5 : to = l8tnj481n5aq : CREATOR = OnlineCheck : TIME = 22 : ID = c_hxdwxdysj4a701z60iywj0pb9
    11-09 02:05:10.795 26888-26888 D/dumpDataConnections(DataConnectionPooljava:437): 2 : .isOpen = false : STATE = CLOSING : from = d790nlrqmgu5 : to = t29c4iu8mvnm : CREATOR = OnlineCheck : TIME = 15 : ID = c_sgsu1cl1e1ccfmjug3izwu3di
    11-09 02:05:10.798 26888-26888 D/dumpDataConnections(DataConnectionPooljava:437): 3 : .isOpen = false : STATE = OPENING : from = d790nlrqmgu5 : to = 3ctsvmgee6hn : CREATOR = OnlineCheck : TIME = 0 : ID = c_buj3aqg9ltda3r38d4hrggb9
    11-09 02:05:10.799 26888-26888 D/sendPingMessage(KuroServicejava:1674): ping message send to peerID 3ctsvmgee6hn : status CONNECTING pingType PING
    11-09 02:05:10.800 26888-26888 D/onPersonIconUpdateEvent(PeopleFragmentjava:144): user ppp OFFLINE
    11-09 02:05:10.800 26888-26888 D/updateIconStateOfUserAccountListItem(PeopleFragmentjava:201): zzz ping / updateIconStateOfUserAccountListItem - OFFLINE r = true : 1
    11-09 02:05:11.022 26888-26961 D/HelpersAndroid: Attaching thread to JVM@[tid=26961]
    11-09 02:05:11.024 26888-26961 E/art: ashmem_create_region failed for 'indirect ref table': Too many open files
    11-09 02:05:11.024 26888-26961 E/rtc: #
    # Fatal error in ../../webrtc/modules/utility/source/helpers_android.cc, line 108
    # last system error: 24
    # Check failed: attached_
    # AttachCurrentThread failed: -1
    #
    11-09 02:05:11.028 26888-26961 A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 26961 (Thread-372)

    [ 11-09 02:05:11.028 6801: 6801 W/ ]
    debuggerd: handling request: pid=26888 uid=10236 gid=10236 tid=26961
    11-09 02:05:11.123 26743-26743 A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    11-09 02:05:11.124 26743-26743 A/DEBUG: Build fingerprint: 'KDDI/SHV35_jp_kdi/SHV35:7.0/S4041/02.01.00:user/release-keys'
    11-09 02:05:11.124 26743-26743 A/DEBUG: Revision: '0'
    11-09 02:05:11.124 26743-26743 A/DEBUG: ABI: 'arm'
    11-09 02:05:11.124 26743-26743 A/DEBUG: pid: 26888, tid: 26961, name: Thread-372 >>> takashi.kurodenwa <<<
    11-09 02:05:11.124 26743-26743 A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
    11-09 02:05:11.124 26743-26743 A/DEBUG: r0 00000000 r1 00006951 r2 00000006 r3 00000008
    11-09 02:05:11.124 26743-26743 A/DEBUG: r4 9087f978 r5 00000006 r6 9087f920 r7 0000010c
    11-09 02:05:11.124 26743-26743 A/DEBUG: r8 0000000a r9 9087ede0 sl 9285c0e4 fp aa32b008
    11-09 02:05:11.124 26743-26743 A/DEBUG: ip 00000018 sp 9087ec48 lr aa2e6597 pc aa2e8e18 cpsr 200f0010
    11-09 02:05:11.148 26743-26743 A/DEBUG: backtrace:
    11-09 02:05:11.149 26743-26743 A/DEBUG: #00 pc 00049e18 /system/lib/libc.so (tgkill+12)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #01 pc 00047593 /system/lib/libc.so (pthread_kill+34)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #02 pc 0001d7e9 /system/lib/libc.so (raise+10)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #03 pc 000192e1 /system/lib/libc.so (__libc_android_abort+34)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #04 pc 00017348 /system/lib/libc.so (abort+4)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #05 pc 002097e3 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #06 pc 0021dc2f /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #07 pc 0014f089 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #08 pc 00128be5 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #09 pc 00148813 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #10 pc 001488c5 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.149 26743-26743 A/DEBUG: #11 pc 0016ffe3 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio6socket4impl17on_socketio_eventERKNSt6__ndk112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiSA_ONS_7message4listE+114)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #12 pc 00170189 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio6socket4impl17on_message_packetERKNS_6packetE+308)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #13 pc 0018c7bb /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio11client_impl9on_decodeERKNS_6packetE+70)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #14 pc 00196519 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio14packet_manager11put_payloadERKNSt6__ndk112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE+108)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #15 pc 0017adfb /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio11client_impl10on_messageENSt6__ndk18weak_ptrIvEENS1_10shared_ptrIN11websocketpp14message_buffer7messageINS6_5alloc15con_msg_managerEEEEE+98)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #16 pc 00177119 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZNSt6__ndk110__function6__funcINS_6__bindIMN3sio11client_implEFvNS_8weak_ptrIvEENS_10shared_ptrIN11websocketpp14message_buffer7messageINS9_5alloc15con_msg_managerEEEEEEJPS4_RNS_12placeholders4__phILi1EEERNSJ_ILi2EEEEEENS_9allocatorISO_EEFvS6_SE_EEclEOS6_OSE_+72)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #17 pc 0018dea1 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN11websocketpp10connectionINS_6config15asio_tls_clientEE17handle_read_frameERKNSt6__ndk110error_codeEj+1944)
    11-09 02:05:11.149 26743-26743 A/DEBUG: #18 pc 0018a45d /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN11websocketpp9transport4asio10connectionINS_6config15asio_tls_client16transport_configEE17handle_async_readENSt6__ndk18functionIFvRKNS7_10error_codeEjEEERKN5boost6system10error_codeEj+200)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #19 pc 0017e76b /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNS1_10connectionINS_6config15asio_tls_client16transport_configEEEFvNS3_8functionIFvRKNS3_10error_codeEjEEERKN5boost6system10error_codeEjEJNS3_10shared_ptrIS9_EERSF_RNS3_12placeholders4__phILi1EEERNSR_ILi2EEEEEEEclISI_jEEvT_T0_+66)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #20 pc 0018288d /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail14strand_service8dispatchINS1_7binder2IN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNS7_10connectionINS5_6config15asio_tls_client16transport_configEEEFvNS9_8functionIFvRKNS9_10error_codeEjEEERKNS_6system10error_codeEjEJNS9_10shared_ptrISF_EERSL_RNS9_12placeholders4__phILi1EEERNSW_ILi2EEEEEEEESN_jEEEEvRPNS2_11strand_implERT_+48)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #21 pc 0018588d /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail7read_opINS0_3ssl6streamINS0_19basic_stream_socketINS0_2ip3tcpENS0_21stream_socket_serviceIS7_EEEEEENS0_17mutable_buffers_1ENS1_19transfer_at_least_tENS1_15wrapped_handlerINS0_10io_service6strandEN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNSJ_10connectionINSH_6config15asio_tls_client16transport_configEEEFvNSL_8functionIFvRKNSL_10error_codeEjEEERKNS_6system10error_codeEjEJNSL_10shared_pt
    11-09 02:05:11.150 26743-26743 A/DEBUG: #22 pc 0018570b /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio3ssl6detail5io_opINS0_19basic_stream_socketINS0_2ip3tcpENS0_21stream_socket_serviceIS6_EEEENS2_7read_opINS0_17mutable_buffers_1EEENS0_6detail7read_opINS1_6streamIS9_EESB_NSD_19transfer_at_least_tENSD_15wrapped_handlerINS0_10io_service6strandEN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNSN_10connectionINSL_6config15asio_tls_client16transport_configEEEFvNSP_8functionIFvRKNSP_10error_codeEjEEERKNS
    11-09 02:05:11.150 26743-26743 A/DEBUG: #23 pc 00187e1d /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail18completion_handlerINS1_17rewrapped_handlerINS1_7binder2INS0_3ssl6detail5io_opINS0_19basic_stream_socketINS0_2ip3tcpENS0_21stream_socket_serviceISA_EEEENS6_7read_opINS0_17mutable_buffers_1EEENS1_7read_opINS5_6streamISD_EESF_NS1_19transfer_at_least_tENS1_15wrapped_handlerINS0_10io_service6strandEN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNSQ_10connectionINSO_6config15asio_tls_client16tr
    11-09 02:05:11.150 26743-26743 A/DEBUG: #24 pc 00187f3b /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail14strand_service8dispatchINS1_17rewrapped_handlerINS1_7binder2INS0_3ssl6detail5io_opINS0_19basic_stream_socketINS0_2ip3tcpENS0_21stream_socket_serviceISB_EEEENS7_7read_opINS0_17mutable_buffers_1EEENS1_7read_opINS6_6streamISE_EESG_NS1_19transfer_at_least_tENS1_15wrapped_handlerINS0_10io_service6strandEN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNSR_10connectionINSP_6config15asio_tls_clien
    11-09 02:05:11.150 26743-26743 A/DEBUG: #25 pc 00188035 /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail23reactive_socket_recv_opINS0_17mutable_buffers_1ENS0_3ssl6detail5io_opINS0_19basic_stream_socketINS0_2ip3tcpENS0_21stream_socket_serviceIS9_EEEENS5_7read_opIS3_EENS1_7read_opINS4_6streamISC_EES3_NS1_19transfer_at_least_tENS1_15wrapped_handlerINS0_10io_service6strandEN11websocketpp9transport4asio20custom_alloc_handlerINSt6__ndk16__bindIMNSO_10connectionINSM_6config15asio_tls_client16transport_configEEEFvNSQ_8funct
    11-09 02:05:11.150 26743-26743 A/DEBUG: #26 pc 00106dff /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so
    11-09 02:05:11.150 26743-26743 A/DEBUG: #27 pc 00106bdd /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN5boost4asio6detail15task_io_service3runERNS_6system10error_codeE+304)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #28 pc 001763af /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZN3sio11client_impl8run_loopEv+30)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #29 pc 0017200b /data/app/takashi.kurodenwa-2/lib/arm/libskyway.so (_ZNSt6__ndk114__thread_proxyINS_5tupleIJNS_6__bindIMN3sio11client_implEFvvEJPS4_EEEEEEEEPvSA_+76)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #30 pc 00047063 /system/lib/libc.so (_ZL15__pthread_startPv+22)
    11-09 02:05:11.150 26743-26743 A/DEBUG: #31 pc 00019d59 /system/lib/libc.so (__start_thread+6)
    11-09 02:05:12.623 7085-26790 W/ActivityManager: Force finishing activity takashi.kurodenwa/.TabbedMainActivity

    [ 11-09 02:05:12.627 6801: 6801 W/ ]
    debuggerd: resuming target 26888
    11-09 02:05:12.629 7085-7119 I/BootReceiver: Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)
    11-09 02:05:12.630 7085-26790 D/ActivityTrigger: ActivityTrigger activityPauseTrigger

     

     

     

    0
    Comment actions Permalink

Please sign in to leave a comment.