Куча репозиториев, проектов и более 100 местных девелоперов. Регулярные релизы и т.п. Короче, все довольны, все работает. Контора моя - Verizon
![Smile :)](./images/smilies/icon_smile.gif)
Методики, о которых Вы говорите, предназначены как правило для sales & marketing peopleccase wrote:Big Cheese wrote:Да, архитектура ClearCase весьма мощная и сложная - я согласен. Я имел в виду, что отдельно взятый ClearCase server box проигрывает по производительности тому же Perfore или StarTeam (хотите - верьте, хотите - нет),
Для ClearCase есть одно золотое правило - как только позволяют средства, etc - ставить отдельный VOB server(s) (на котором нет view, нет других процессов)
Как, к стати, Вы сравниваете производительность?
Build в MVFS vs билд на локальной системе? время update не забываете добавить? Build c clearmake vs make?
постановка лейблов или выборка элементов по label? первое достаточно редкая операция по сравнению со второй.
Беда в том, что методики оценки производительности, как правило, заточены на подчеркивание достоинств определенной системы и потому предвзяты изначально.
На момент покупки Rational'а IBM'ом. Сколько девелоперов работает над ClearCase я, понятно, не знаю. Думаю, что в целом в компании около 15-20 процентов от общего числа сотрудников - программисты, т.е. примерно 500-700 человек, что немало, даже учитывая количество продуктов Rational'а .ccase wrote:Big Cheese wrote:насколько мне помнится, на момент покупки в Rational работало около 3600 человек (да, я в курсе, что они не только CC выпускают - тем не менее, в Perforce работают около 60 человек, в StarBase в лучшие годы было ~400, над всей линейкой StarTeam и сопутствующих проектов работает десятка два инженеров)
Можно уточнить, на момент какой из покупок?
И сколько из этих работников было на самом деле field consultants, а сколько работало в девелопменте? И сколько из последних в Lexington?
Насколько я знаю, там и до сих пор достаточно небольшая группа, кормящая Буча со товарищи.
Big Cheese wrote:(*неуверенно*)uncle_Pasha?ccase wrote:Удачи!
ccase wrote:Alf wrote:Нет необходимости в выделенном build manager
А как это связано с Вашим решением?
ccase wrote:Alf wrote:и толпы администраторов.
Что, даже UNIX/Network и DB никто не администрит?
Alf wrote:ccase wrote:Alf wrote:Нет необходимости в выделенном build manager
А как это связано с Вашим решением?
Отсутствие соответствующего ресурса.
ccase wrote:Наличие или отсутствие "отдельно стоящего" build manager более зависит от процесса и нагрузки, чем от используемых средств. Я видел как выделенных build managers в случае CVS/VSS/etc, так и ClearCase, без таковых, как и последний, администрируемый одним-двумя девелоперами "по совместительству.
Так что к выбору средств это имеет весьма опосредованное отношение.
ccase wrote:Вот отдельный от всего build environment - это обязательно. Вне зависимости от используемого репозитория. C ClearCase это организовать несколько легче - запихал все, что надо (библиотеки, компиляторы и т.п.) в репозиторий, и на любом боксе билдь что угодно - никаких тебе муторных апдейтов, проблем (а с каким JDK надо билдить релих XXX? да с тем что залейблен этим релизом!)
MVFS - рулез форева.
Alf wrote:ccase wrote:Наличие или отсутствие "отдельно стоящего" build manager более зависит от процесса и нагрузки, чем от используемых средств. Я видел как выделенных build managers в случае CVS/VSS/etc, так и ClearCase, без таковых, как и последний, администрируемый одним-двумя девелоперами "по совместительству.
Так что к выбору средств это имеет весьма опосредованное отношение.
Для ClearCase нужно администрирование иначе никак. Это как бы могут делать девелоперы, но все равно оно нужно.
Alf wrote:При размере команды в 10 человек, ведущих активную разработку, уже навряд ли удастся обойтись без выделенного build manager.
Alf wrote:В StarTeam мы прекрасно обходимся без этого.ccase wrote:MVFS - рулез форева.
StarTeam позволяет делать все тоже самое.
Давайте определимся - вам шашечки или ехать?) (с)ccase wrote:Что именно? Labels ставить? не сомневаюсь. Речь шла о другом.
Если у меня есть совершенно "голый" UNIX host - не установленно ни компиляторов, ни библиотек - только ClearCase, установка которого занимает 5-15 минут и не требует рестарта на большинстве UNIX (HP-UX - исключение),
то чтобы сделать из него билд хост и запустить совершенно "чистый" билд (все библиотеки и компиляторы /это не всегда осуществимо, но с java, например пройдет/ из репозитория и правильной версии - той, которой надо для этого билда) мне надо секунд 5 и несколько команд:
1. ct mkview -tag my_build_view -stgloc -auto #создать "чистое" view
2. ct setcs -tag my_build_view my_build_configuration # установить конфигурацию - и я уже вижу все, что надо.
3. cd куда_надо ;
4. make/clearmake/ant/etc
и меня не волнует, что там есть какие-то библиотеки, каких-то версий, огромных размеров и т.п.
Запустить предыдущий билд, с другим JDK, например, на том же хосте - тоже 5 секунд.
То, что и имел ввиду - никаких муторных апдейтов и т.п. Полезно и безопасно.
Можно это реализовать другим способом? Несомненно. Но это будет не то.
ccase wrote:Вот отдельный от всего build environment - это обязательно. Вне зависимости от используемого репозитория. C ClearCase это организовать несколько легче - запихал все, что надо (библиотеки, компиляторы и т.п.) в репозиторий, и на любом боксе билдь что угодно - никаких тебе муторных апдейтов, проблем (а с каким JDK надо билдить релих XXX? да с тем что залейблен этим релизом!)
MVFS - рулез форева.
zor0n wrote:1. Насколько популярна практика засовывания всего, кроме base system, в ClearCase, описанная выше?
2. Слышал какие-то неясные угрозы по поводу того, что в ClearCase, как и везде, метку ставить - очень дорого. Кто-то может прокоментировать, особенно в применении к большим (>10M LOC) системам? Какова практика: ставить метку, растить ветвь, или запоминать время и далее брать снапшот по времени?
Big Cheese wrote:Давайте определимся - вам шашечки или ехать?) (с)Если "ехать", то почему, собственно, "не то"?
По-моему то, что Вы описали, ничем функционально не отличается от - грубо говоря - checkout *.* by label - только отсутствием clean / checkout commands в build script.
Big Cheese wrote:Концепция MVFS выглядит интересно, но вызывает некоторые вопросы:
- если мы говорим о full-functional file system, то под это надо выделять отдельный partition, правильно?
Big Cheese wrote:- как насчет скорости работы? Ситуации, когда нужна _постоянная_ синхронизация файлов с репозиторием, которая в общем случае снижает производительность не так уж и распространены - есть возможность ее отключить?
Big Cheese wrote:В любом случае, чтобы сделать полноценную FS под Windows, например, надо нехилое здоровье, время и деньги. Причем не факт, что получится лучше, чем "родная" NTFS - быстрее, надежнее.
Big Cheese wrote:Про другие платформы - не знаю, думаю, что тоже не сильно просто. Вобщем - стоит ли овчинка выделки? (вопрос не риторический, мне правда интересна аргументация за/против такого решения)
А лазание на сервер (или еще куда по сети) за содержимым открываемых файлов / структурой каталогов - времени вроде как и не занимает?ccase wrote:Big Cheese wrote:Давайте определимся - вам шашечки или ехать?) (с)Если "ехать", то почему, собственно, "не то"?
По-моему то, что Вы описали, ничем функционально не отличается от - грубо говоря - checkout *.* by label - только отсутствием clean / checkout commands в build script.
Это просто была иллюстрация, возможно не самая удачная, отсутствия update.
В случае с - checkout *.* by label – update займет заметное время, если в репозитории лежит что-то большое – огромные библиотеки, и т.п.
Т.е. MVFS не держит никакого кэша (в RAM) и каждый раз при открытии файла тянет его с VOB storage / view-storage?ccase wrote:Big Cheese wrote:Концепция MVFS выглядит интересно, но вызывает некоторые вопросы:
- если мы говорим о full-functional file system, то под это надо выделять отдельный partition, правильно?
Нет. Можно расматривать MVFS как сетевую файловую систему.Big Cheese wrote:- как насчет скорости работы? Ситуации, когда нужна _постоянная_ синхронизация файлов с репозиторием, которая в общем случае снижает производительность не так уж и распространены - есть возможность ее отключить?
Синхронизации, как таковой, нет. Ресурс всегда один. По результатам анализа набора правил запрос к элементу (файл, директория) переадресуется по месту нахождения ресурса.
Даже если storage расположен локально, все равно такая модель вносит overhead на дополнительный data transferccase wrote:Т.е. если конфигурация определяет версию элемента в репозитории, то запрос переадресуется к VOB storage через сетевой протокол NFS/SMB или локально (если репозиторий расположен на том же хосте)
Т.е. производительность сравнима с доступом к NAS. Есть небольшой overhead вызванный оценкой правил выбора, но для работы с текстовым редактором этого более, чем достаточно. Вопрос может быть с build performance, но в этом случае можно оптимизировать нахождение storage area – прежде всего, view storage.
Спасибо, звучит интересно. А как быть с shared checkout? или CC это не поддерживает? "переход с следующей BASELINE" - имеется в виду переключение конфигурации на другую метку (label) / timestamp/ branch и т.п.? Если да - я бы сказал что необходимость для этого править конфиги - это явный перебор, если речь не идет о build machine. (я например часто переключаюсь между braches/labels - что теперь - постоянно править что-то?)ccase wrote:Если забыть про существование snapshot view, то отключить «синхронизацию» нельзя. Но можно сделать конфигурацию, которая «замораживает» набор выбираемых элементов. Вот, к примеру, распространенный набор правил (view config_spec), который стандартно используется в UCM и не только:
(1) element * CHECKEDOUT
(2) element * …/my_private_branch/LATEST
(3) element * STABLE_BASELINE –mkbranch my_private_branch
Строки пронумерованы по мере убывания приоритетеов. Строка 1 говорит, что прежде всего, я хочу видеть мои checked-out элементы.
Строка 2 – то, что в моем приватном бранче.
Строка 3 – если что-либо не найдено как checkout и не модифицированно мной, то дай мне этот элемент по метке STABLE_BASELINE, а если я захочу сделать check-out, то создай checked-out версию элемента в my_private_branch. В этом случае, пока элемент checked-out, он выбирается по правилу (1), после check-in – по правилу (2).
С одной стороны все стабильно, с другой – переход с следующей BASELINE – это всего изменение строки (3) в config_spec.
Погодите, а если, например stdio.h находится на локальном диске? или это невозможно и надо ВСЕ засовывать под MVFS? Кстати, MSVC, например, при билде открывает один и тот же файл довольно много раз - видимо для проверки outdated dependencies. Могу сказать (из опыта участия в проекте, based on custom file system driverccase wrote:Big Cheese wrote:В любом случае, чтобы сделать полноценную FS под Windows, например, надо нехилое здоровье, время и деньги. Причем не факт, что получится лучше, чем "родная" NTFS - быстрее, надежнее.
Тем не менне, файловая система, реализующая контроль доступа в стиле UNIX и такие приятные вещи, как soft-links имплементирована под Windows.Big Cheese wrote:Про другие платформы - не знаю, думаю, что тоже не сильно просто. Вобщем - стоит ли овчинка выделки? (вопрос не риторический, мне правда интересна аргументация за/против такого решения)
Но как только это реализовано – достоинств проявляется много. В том числе и не столь очевидных.
Например, во время build, Вы знаете, к каким элементам обращался компилятор для сборки, к примеру, f.o (если все запросы все-равно перехватываются MVFS, почему бы эту информацию не записать куда-либо) – в нашем случае, это были:
f.c, f.h, stdio.h, etc – таким образом у нас работает неявный анализ зависимостей.
Вообще IMHO понятие "безопасного" билда - надуманое. Т.е. проблема кривизны cumulative builds из-за криво прописаного makefile (в случае cleanup / full rebuild такой проблемы нет вообще) по-моему, не стоит сколь-нибудь остро. Идея реюзать объектные файлы тоже выглядит интересно, но по значимости стоит где-то рядом с семантиковскими фичами типа distributed compilation of C++ projects 5-7летней давности (сугубое IMHO)ccase wrote: Если выбиралась версия из репозитория – то мы знаем, какая именно, если нет – знаем timestamp. Если к этой информации добавить ключи компиляции и т.п., то мы получим полную конфигурационную спецификацию элемента f.o (именно так работает clearmake, omake, clearaudit).
Теперь, если кто-то поменяет f.h, к примеру, мы знаем, что f.o надо пересобрать, даже если эта зависимость не описана в makefile. Мы имеем безопасный билд (в особенности, если все элементы в репозитории и мы можем оперировать версиями, а не timestamp)
С другой стороны, если кто-то будет собирать f.o с той же конфигурацией – почему бы ему не предоставить уже собранный, готовый f.o, чтобы сохранить время? (концепция derived objects, DO в ClearCase).
Big Cheese wrote:Если да - я бы сказал что необходимость для этого править конфиги - это явный перебор, если речь не идет о build machine. (я например часто переключаюсь между braches/labels - что теперь - постоянно править что-то?)
Вобщем, мне кажется, что MVFS штука с технической точки зрения очень интересная, но для работы, например в Visual Studio я бы ее не выбрал - для меня скорость файловой системы важнее.
Views - это объекты на сервере, я правильно понимаю? Насколько сложно между ними переключаться?Gennadiy wrote:Big Cheese wrote:Если да - я бы сказал что необходимость для этого править конфиги - это явный перебор, если речь не идет о build machine. (я например часто переключаюсь между braches/labels - что теперь - постоянно править что-то?)
Можно создать несколько views с разными конфигами и переключатся между ними по мере необходимости.
Вобщем, мне кажется, что MVFS штука с технической точки зрения очень интересная, но для работы, например в Visual Studio я бы ее не выбрал - для меня скорость файловой системы важнее.
Это в корне меняет дело! А какие еще ограничения накладывает snapshot? Как я понял (может, ошибаюсь), народ в основном snapshots не использует - хотя этот режим вроде как имеет очевидное преимущество в скорости доступа к данным, при одном недостатке - отсутствии real-time синхронизации с репозиторием - что на мой взгляд вполне терпимо. So where is the catch?Gennadiy wrote:Если скорость настолько существенна, то существуют snapshots. В этом случае вы работаете только с локальным диском. Синхронизация происходит в момент check-in/check-out.
Big Cheese wrote:Views - это объекты на сервере, я правильно понимаю? Насколько сложно между ними переключаться?
Это в корне меняет дело! А какие еще ограничения накладывает snapshot? Как я понял (может, ошибаюсь), народ в основном snapshots не использует - хотя этот режим вроде как имеет очевидное преимущество в скорости доступа к данным, при одном недостатке - отсутствии real-time синхронизации с репозиторием - что на мой взгляд вполне терпимо. So where is the catch?
Насчет существенности скорости - я бы, например, не смог работать с теми проектами, с которыми сейчас имею дело, если бы они были развернутыми на медленном storage media (типа network drive) - все-таки приходится пару раз в день строить, плюс отладка, а таскать все исходники-объектники-бинарники по сетке (~5-6 тысяч source files, total build output где-то в районе 1.5 GB - вобщем, немало на мой взгляд) - удовольствие явно ниже среднегоЯ как-то раз попробовал построить build на сетевом диске - больше не хочется. Мне удобнее 2 раза в день потратить 10 минут на checkout/update "вручную", чем постоянно ждать, пока Visual Studio updating dependencies.....