Заметки консультанта

Шамрай Александр Владимирович

Archive for Апрель 2009

Когда может понадобиться TFS Proxy?

Posted by Шамрай Александр на Апрель 26, 2009

<< Перейти в раздел «Team Foundation Proxy Server FAQ»

Кеширующий прокси полезен в следующих случаях:

  1. Когда TFS используется в конфигурации с географически разделенными командами и между этими командами каналы связи имеют низкую пропускную способность.
  2. Когда в организации большое количество рабочих мест и сервер приложений перегружен большим количеством запросов. В этом случае можно использовать несколько кеширующих прокси внутри организации и тем самым балансировать и снижать нагрузку на сервер приложений.

Posted in Microsoft, Proxy FAQ, Team Foundation Server FAQ, Visual Studio | Отмечено: , , , , , | Leave a Comment »

Как узнать сколько пользователей не используют TFS Proxy?

Posted by Шамрай Александр на Апрель 26, 2009

<< Перейти в раздел «Team Foundation Proxy Server FAQ»

Когда клиент TFS выполняет операцию «Get Latest», на сервере выполняется три операции:

  1. Инициирующий Get() — сервер определяет, какие файлы необходимо обновить в рабочем пространстве.
  2. Download() — загрузка всех необходимых файлов.
  3. В конце UpdateLocalVersions() — клиент информирует сервер, какие версии и каких файлов находятся в его рабочем пространстве.

 Если проходит много запросов на обновление, то сервер приложений TFS будет сильно загружен. Снять нагрузку с сервера приложений позволяет кеширующий прокси, который хранит у себя все запрашиваемые файлы и при повторном запросе файла отдает его уже из собственного кеша, а не пытается загрузить его с сервера. Если в организации большое количество пользователей и сборочных машин, то можно разместить несколько кеширующих прокси и с помощью них выполнять балансировку загрузки.

После того как вы установили кеширущий прокси, возможно вам будет интересно кто его не использует. Вся необходимая информация содержится в базе данных TfsActivityLogging. Т.к. кеширующий прокси работает как сервис NETWORK SERVICE, то для запроса можно  использовать фильтр, в котором необходимо исключить учетную запись компьютера кеширующего прокси (DOMAIN\COMPUTERNAME$):

SELECT
SUM([ExecutionCount]) as DownloadCount, [IdentityName], [IPAddress]
FROM [TfsActivityLogging].[dbo].[tbl_Command]
WITH (NOLOCK)
WHERE Command = ‘Download’
AND IdentityName NOT LIKE ‘%$’
GROUP BY IPAddress, IdentityName
ORDER BY SUM([ExecutionCount]) DESC

Если все используют кеширующий прокси, то все запросы на загрузку должны происходить от имени проки-сервера. Загрузка от другого имени может происходить в случаях:

  1. Пользователь не использует кеширующий прокси.
  2. Пользователь использует кеширующий прокси, но прокси-сервер был недоступен и клиент загрузил файлы напрямую с сервера приложений.

Источник: How many users are not using a TFS Proxy server?

Posted in Microsoft, Proxy FAQ, Team Foundation Server FAQ, Visual Studio | Отмечено: , , , , , | Leave a Comment »

Порядок взаимодействия клиента с TFS Proxy

Posted by Шамрай Александр на Апрель 25, 2009

Перевёл небольшую статейку How Team Foundation Server Proxy 2008 works, которая описывает последовательность действий при взаимодействии клиентского рабочего места TFS Proxy.

Взаимодействие

Ниже описан порядок взаимодействия клиента, сервера и кеширующего прокси, когда пользователь пытается получить файл из версионного контроля:

  1. Клиент проходит аутентификацию на сервере.
    1. Сервер обрывает подключение, если аутентификация не прошла. Выход.
  2. Клиент посылает запрос на получение файла на сервер.
  3. Сервер проверяет права на чтение клиента к файлу.
    1. Сервер отвечает «file does not exist», если клиент не имеет прав на чтение к файлу. Выход.
  4. Сервер посылает ответ на загрузку файла клиенту.
  5. Клиент передает полученный ответ кеширующему прокси и ожидает файл.
    1. Если кеширующий прокси не возвращает файл через определенный промежуток времени, клиент использует полученный ответ, чтоб получить файл напрямую с сервера. Выход.
  6. Кешируюший прокси проверяет наличие файла в кеше.
    1. Если файл уже существует в кеше, то кеширующий прокси возвращает его клиенту.
  7. Кеширующий прокси с помощью сервисной учетной записи проходит аутентификацию на сервере.
    1. Сервер обрывает соединение, если аутентификация не проходит. Кеширующий прокси сообщает клиенту об ошибке, и клиент пытается получить файл напрямую с сервера. Выход.
  8. Кешируюший прокси запрашивает размещение сервисов версионного контроля.
  9. Сервер проверяет наличие прав на чтение серверной информации учетной записи кеширующего прокси.
    1. Сервер обрывает соединение, если таковые права отмутствуют. Кеширующий прокси сообщает клиенту об ошибке, и клиент пытается получить файл напрямую с сервера. Выход.
  10. Сервер передает ответ кеширующему прокси о размещении сервисов версионного контроля.
  11. Кеширующий прокси скачивает файл, используя информацию клиента полученную на шаге 5.
  12. Кеширующий прокси сохраняет файл в локальном кеше.
  13. Кеширующий прокси возвращает файл клиенту. Выход.

Примечания

  1. Сервер всегда проверяет права на чтение для клиента, а не для учетной записи кеширующего прокси.
  2. Сервер всегда проверяет права на чтение серверной информации для учетной записи кеширующего прокси и это единственные разрешения, который должны быть у этой учетной записи.

Другими словами

  1. Кеширующий прокси и сервер связаны на серверном уровне, а не на уровне проектов.
  2. Кеширующий прокси действует не вместо сервера, а  используется только для кеширования файлов.
  3. Учетную запись для кеширующего прокси можно просто добавить в группу доступа серверного уровня, например «[Server]\Proxy Service Accounts», без всяких дополнительных конфигураций безопасности. Это фактически обеспечивает доступ на чтение учетной записи к серверной информации.
    1. Можно добавить учетную запись в группу администраторов, в группу сервисов сервера или проектную группу, что тоже обеспечит доступ у серверной информации. Но этот метод не рекомендуется, т.к. обеспечивает учетной записи больше прав, чем необходимо.

Posted in Microsoft, Proxy, Team Foundation Server, Visual Studio | Отмечено: , , , | Leave a Comment »

Статья: Практика применения автоматического функционального тестирования в Microsoft Visual Studio с использованием средств IBM Rational

Posted by Шамрай Александр на Апрель 20, 2009

Опубликована новая статья:

Практика применения автоматического функционального тестирования в Microsoft Visual Studio с использованием средств IBM Rational: Не секрет, что инструментов автоматизированного функционального тестирования приложений в продуктах семейства Microsoft Visual Studio 2005/2008 не поставляется. Все функциональное тестирование, которое можно выполнять с использованием этих продуктов, это только ручное тестирование. В данной статье рассматриваются возможности автоматизации функционального тестирования для Microsoft Visual Studio с использованием инструментов IBM Rational.

Читать далее >>

Posted in Functional Tester, IBM Rational, Microsoft, Robot, Team Foundation Server, TestManager, Visual Studio | Отмечено: , , , , , , , , , , , | Leave a Comment »

Как получить выбранный элемент в списке Reference List?

Posted by Шамрай Александр на Апрель 20, 2009

<< Перейти в раздел “ClearQuest FAQ”

Для того чтобы получить выбранный элемент из списка на форме запроса на изменение, нужно использовать функцию ListSelection, которая возвращает идентификатор выбранной записи. Эта функция доступна только при использовании Visual Basic, для Perl эта функция не реализована. Ниже показано использование этой функции для кнопки.

Пример:

Function SelectedRequest(param)

‘ param As Variant

Dim SelectedIds, SelectedId

SelectedId = param.ListSelection

SelectedId = SelectedIds(0)

msgbox «select id: «& SelectedId

End Function

Posted in ClearQuest FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

Как вывести сообщение при выполнении хука?

Posted by Шамрай Александр на Апрель 20, 2009

<< Перейти в раздел “ClearQuest FAQ”

Для вывода диалогового окна с сообщением для Perl необходимо использовать функцию MsgBox, а для VBmsgbox. Однако необходимо осторожно использовать эти функции, если предполагается использование сервера ClearQuest Web, т.к. все сообщения будут появляться на стороне сервера и ожидать своего закрытия, что скажется на производительности сервера. Поэтому перед выводом сообщения необходимо проверять тип текущей сессии.

Пример Perl:

if ( !$session->HasValue ( «_CQ_WEB_SESSION» );
{
Win32::MsgBox( «Message» );
}

Пример VB:

Dim CurSession
Dim ISWeb

Set CurSession = GetSession
ISWeb = CurSession.NameValue(«_CQ_WEB_SESSION»)

if ISWeb = FALSE then
msgbox «Messge »
end if

Posted in ClearQuest FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

Как ограничить доступ к закладке формы запроса на изменение?

Posted by Шамрай Александр на Апрель 20, 2009

<< Перейти в раздел “ClearQuest FAQ”

Для этого необходимо в ClearQuest Designer открыть форму, щелкнуть правой кнопкой мыши на необходимой закладке и выбрать «Tab Properties«. В появившемся окне можно установить список групп, которым будет доступна эта закладка.

tab_access

Posted in ClearQuest FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

Как создать запрос внутри хука?

Posted by Шамрай Александр на Апрель 20, 2009

<< Перейти в раздел “ClearQuest FAQ”

Ниже показан пример выбора всех запросов типа «Defect«, которые не находятся в состоянии «Closed»

sub GetListFromQuery
{
my $name_entity = «Defect»;
my $operator;

my $session = $entity->GetSession();
my $queryDef = $session->BuildQuery( $name_entity );

# выбираем поля
$queryDef->BuildField( $name_field );
# устанавливаем фильтр
$operator = $queryDef->BuildFilterOperator( $CQPerlExt::CQ_BOOL_OP_AND );
$operator->BuildFilter( «State», $CQPerlExt::CQ_COMP_OP_NOT_IN, [ «Closed» ] );

# выполняем
my $resultSet = $session->BuildResultSet( $queryDef );
$resultSet->Execute();

# Добавляем выбранные значения в список
while ( $resultSet->MoveNext() == $CQPerlExt::CQ_SUCCESS )
{
push( @$choices, $resultSet->GetColumnValue( 1 ) );
}

$choices = sort( @choices );
return $choices;
}

Posted in ClearQuest FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

Ошибка на VOB-сервере: db_VISTA error 10048 from connect()

Posted by Шамрай Александр на Апрель 18, 2009

<< Перейти в раздел “ClearCase FAQ”

Симптомы:

На VOB-сервере под управлением Windows, при попытке db_server подключится к albd_server, возникает ошибка:

db_VISTA error 10048 from connect()

Причина:

Это WINSOCK ошибка, которая возникает, когда процесс пытается использовать порт, который уже занят другим процессом. Такая ошибка может проявляться на перегруженных подключениями серверах.

Решение:

Разрешить процессам использовать дополнительные порты.

Для этого необходимо перейти в реестр в ветку HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, создать ключ MaxUserPort с типом DWORD и значением 65534. После добавления ключа сервер необходимо перезагрузить.

Posted in ClearCase FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

Ошибка при создании представления: View Storage is not found

Posted by Шамрай Александр на Апрель 18, 2009

<< Перейти в раздел “ClearCase FAQ”

Симптомы:

При создании представления появляется ошибка: View Storage is not found. При этом хранилище представлений доступно по сетевому пути и все разрешения к нему установлены верно.

Причина:

Создающий представление пользователь не имеет права на модификацию ветки реестра:

HKLM\System\CurrentControlSet\Services\LanmanServer\Shares

Решение:

Обеспечить доступ на изменение для ветки:

HKLM\System\CurrentControlSet\Services\LanmanServer\Shares

  1. Открыть редактор реестра (regedit).
  2. Перейти к ветке: HKLM\System\CurrentControlSet\Services\LanmanServer
  3. Правой кнопкой нажать на папке Shares, выбрать разрешения и добавить необходимого пользователя в список разрешенных.

Posted in ClearCase FAQ, IBM Rational | Отмечено: , , , | Leave a Comment »

 
%d такие блоггеры, как: