ここでは、以下のソフトウェアを用いた環境を使用しています。
製品名 |
ソフトウェアバージョン |
Jabber for Windows |
12.0(0) |
Unified CM |
11.5(1)SU3 |
IM and Presence |
11.5(1)SU3 |
コンタクトリストのキャッシュタイマーとは
Jabber では、Active Directory (AD) や Cisco Unified Communications Manager User Data Service (UDS) などのコンタクトソースから取得したコンタクトの情報を一定期間、キャッシュとして保持し、この期間が過ぎるとコンタクトソースから情報を取得して更新します。
この一定期間のことをキャッシュタイマーと呼びます。各 Jabber 内で、1 つのコンタクトに 1 つのキャッシュタイマーを持ち、それぞれが 24 時間プラス 0〜6 時間(ミリ秒単位) のランダム値のタイマーが設定されます。
問題レポート (Jabber for Windows のログ取得方法) に含まれる Contacts\jabberAllContacts.xml で各コンタクトのキャッシュタイマーの満了時刻を確認することが可能です。
以下は、ある Jabber ユーザの jabberAllContacts.xml の抜粋ですが、user2 というコンタクトのキャッシュタイマー満了時刻が Unix Time で 1524214259705279 と設定されていることが確認できます。
これは、2018/04/20(金) 17:50:59.705279 を表しており、この時刻になるとキャッシュタイマーが満了することを意味します。
user2@ucapp.cisco.com,1524214259705279,1
Full Name,,test user2
First Name,,user2
Last Name,,test
Nickname,,test user2
Phone,work,**01
Username,,user2
キャッシュタイマーが満了した際の動作
キャッシュタイマーが満了すると、次回 Jabber へサインインしたタイミングで、コンタクトソースから情報を取得して更新します。その際に、新たなタイマーを設定します。
例えば、退職者を AD から削除した際や、社員の異動などで AD 上の電話番号などの情報が変更された場合には、最大で 30 時間以上経過した後に Jabber にサインインし直したタイミングで、コンタクトリストに変更が自動で反映されることになります。
なお、コンタクトを右クリックして、プロフィールの表示を行った場合には、AD への問合せが行われ、キャッシュタイマーは新たに設定されます。
AD へ問合せ時のログ
Jabber にコンタクトを追加した際、及び、キャッシュタイマーが満了した後に、Jabber にサインインした際の動作について、Jabber の問題レポートと Wireshark のログを用いて説明します。
1. 4/13 16:56:07 user6 を検索し、AD へ問合せ実施
2018-04-13 16:56:07,250 DEBUG [0x0000053c] [rc\main\person-ldap\LdapSearcher.cpp(59)] [csf.person.ldap] [csf::person::ldap::LdapSearcher::search] - searchScope = 2, filter = (&(objectCategory=person)(objectClass=user)(|(sAMAccountName=user6))), baseDN=OU=tac,DC=ucapp,DC=cisco,DC=com
2. AD から検索結果を取得し、コンタクトリストに追加
2018-04-13 16:56:07,266 DEBUG [0x0000053c] [\main\person\PersonManagerImpl.cpp(1701)] [csf.person] [csf::person::PersonManagerImpl::PersonResolutionHandler::onSearchComplete] - (00706AE8) Query 2618BBC8 for record 167816A0 (XMPP:user6@ucapp.cisco.com) on source Ldap-192.168.98.1. # of all found records: 1
3. キャッシュタイマーが開始していることを確認
user6@ucapp.cisco.com,1523712932266513,1 <<< 2018/4/14 22:35:32.266513
Full Name,,test user6
First Name,,user6
Last Name,,test
Nickname,,test user6
Phone,work,**01
Username,,user6
4. 2018/4/13 17:00 Jabber からサインアウト
5. 2018/4/14 22:35 user6 のキャッシュタイマー満了
6. 2018/4/17 11:15 Jabber にサインイン後、user6 のタイマー満了を検知し、AD へ問合せ実施
2018-04-17 11:17:43,726 DEBUG [0x0000207c] [\include\csf\person\ExpireCache.hpp(584)] [csf.person] [csf::ExpireCache<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::vector<class std::shared_ptr<class csf::person::PersonRecord>,class std::allocator<class std::shared_ptr<class csf::person::PersonRecord> > > >::notifyBulkCacheItemExpired] - Triggering onCacheItemExpired on user6@ucapp.cisco.com, refreshed = 1
2018-04-17 11:17:43,726 DEBUG [0x000014a0] [c\main\person\CachedPersonRecord.cpp(37)] [csf.person] [csf::person::CachedPersonRecord::refreshCache] - Refreshing record LDAP:user6@ucapp.cisco.com
6. AD から検索結果を取得し、コンタクトを更新
2018-04-17 11:17:43,741 DEBUG [0x00001904] [rc\main\person-ldap\LdapSearcher.cpp(59)] [csf.person.ldap] [csf::person::ldap::LdapSearcher::search] - searchScope = 0, filter = (&(objectCategory=person)(objectClass=user)(|(sAMAccountName=user6))), baseDN=CN=test user6,OU=tac,DC=ucapp,DC=cisco,DC=com
7. キャッシュタイマーが開始していることを確認
user6@ucapp.cisco.com,1523709381256003,1 <<< 2018/4/14 21:36:21.256003
Full Name,,test user6
First Name,,user6
Last Name,,test
Nickname,,test user6
Phone,work,**01
Username,,user6
その他
キャッシュタイマーに関連した以下不具合の報告がありますので、ご注意下さい。