SlideShare a Scribd company logo
1 of 21
# 
Erik van Nooijen 
Technical Lead at TomTom
# 
10 years as contractor 
• (senior) developer 
5 years in TomTom - Netherlands 
• 3 years senior developer 
• 2 years technical lead
#
# 
TomTom total Perforce installation 
size 780 Gb database 
3.2 TB versioned files 
#proxies 10 
#replicas 4 
#users ~700 
#workspaces ~19000 
#changes ~1.000.000 
Main server 32 core 
284 Gb ram 
4* Fusion IO (ssd) 
8.6 Tb 
Streamed depot 
size 52 Gb 
#streams 360 
#mainlines 1 
#release streams 20 
#users ~150 
#changes ~80000
#
# 
• Parent / child stream relationship 
– predefined integration flows 
• Merge-down / copy-up 
– resolve-on-child paradigm 
• Stream specification vs branch mapping 
• Moving workspace 
• Naming conventions 
– Renaming a stream does not rename the underlying branch 
• Deleting streams
#
# 
• Integrate 1 (or few) specific changelists 
up, without doing a full copy-up 
• Examples: 
– Quick propagation of a bug fix 
– Selective moving finished work to prep stream
#
# 
• Integrations that are not following pre-defined flow 
• Using ‘p4 integrate //source/…@11,11 //dest/…’ 
• Example: integrate specific changelist into existing 
release. Most often happens for bug fixes.
# 
• Integrations that are not following pre-defined flow 
• Using ‘p4 integrate //source/…@11,11 //dest/…’ 
• Example: integrate specific changelist across 
development streams, without going via main. 
Usually for inter-dependencies between 
developments. 
• Alternative; use stream specification with ‘import’ 
– Defined imports with ‘import @’ available with p4d 
2014.1 
– Writable imports become available with p4d 2014.2
#
# 
Stream: //depot/main 
Type: mainline 
Paths: share //… 
Stream: //depot/dev-X 
Type: development 
Parent: //depot/main 
Paths: share //… 
import versions.txt //depot/main/versions.txt 
Client: depot_dev_ws 
View: //depot/dev-X/… // depot_dev_ws/… 
!! No ‘Stream:’ but using branch mappings 
$ p4 edit versions.txt 
$ p4 submit –d “my own development identifiers in versions.txt” 
$ p4 copy //depot/dev-X/… //depot/main/… 
$ p4 submit -d “copy up from dev stream” 
!! No –S <stream> for copy argument, but branch mappings 
Result: versions.txt changed on main! 
Final solution: 
1. RW permission group on main for this file 
2. educating users on p4 copy
#
# 
• Most benefit on server side, less so for end-users 
• Can be confusing when used with branch mapping 
• When to use regular development stream vs task stream ? 
– Task streams can be converted to type development, but conversion back is not possible 
• We decided not to use them, instead we use development streams only
# 
• Reduce the amount of data that gets pulled into a workspace 
• Compose product combinations with only imports 
– One mainline with all imports for ‘mainlines’ 
– Many virtual streams based on the mainline that overrule the imports with various ‘release’ 
imports 
– Easy and cheap to make many combinations
# 
canary-main (type: mainline) 
import os/… //depot-os/main/… 
import engine/… //depot-engine/main/… 
import ui/… //depot-ui/main/… 
import engine/ui-tweaks/… //depot-ui/main/tweaks/… 
canary-ui-rel1 (type: virtual) 
share … 
import ui/… //depot-ui/rel-1/… 
import engine/ui-tweaks/… //depot-ui/rel-1/tweaks/… 
canary-ui-rel2 (type: virtual) 
share … 
import ui/… //depot-engine/rel-2/… 
import engine/ui-tweaks/… //depot-ui/rel-2/tweaks/…
#
# 
• ‘p4 integrate –f’ is evil ! 
– alternative is ‘p4 copy’ 
• Use ‘integ.engine = 3’ 
– engine 3 is default, but maybe you have engine 2 specifically configured 
• Import with stream specification not (yet) supported 
– ‘import //… -S //depot/stream’
# 
• Educate your user base 
• Cherry picking integrations 
• Cross integrations 
• Stream specification versus branch mapping 
• Task and virtual streams
# 
Erik van Nooijen 
eric.vannooijen@tomtom.com 
#idonttweet

More Related Content

What's hot

IT Infrastructure Automation with Ansible
IT Infrastructure Automation with AnsibleIT Infrastructure Automation with Ansible
IT Infrastructure Automation with AnsibleDio Pratama
 
Agile IT Service Management
Agile IT Service ManagementAgile IT Service Management
Agile IT Service ManagementIan Jones
 
Backlog Grooming - The Importance of Good Grooming Habits
Backlog Grooming - The Importance of Good Grooming HabitsBacklog Grooming - The Importance of Good Grooming Habits
Backlog Grooming - The Importance of Good Grooming HabitsIan Garrison
 
How Ignition Eases SCADA Pain Points
How Ignition Eases SCADA Pain PointsHow Ignition Eases SCADA Pain Points
How Ignition Eases SCADA Pain PointsInductive Automation
 
What the Heck Is a Product Owner?
What the Heck Is a Product Owner?What the Heck Is a Product Owner?
What the Heck Is a Product Owner?Ron Lichty
 
The Lego Kanban Game
The Lego Kanban GameThe Lego Kanban Game
The Lego Kanban GameLiz Keogh
 
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...Matthew Skelton
 
Scrum Meetings Infographic v12
Scrum Meetings Infographic v12Scrum Meetings Infographic v12
Scrum Meetings Infographic v12Nigel Thurlow
 
Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesNicola Ferraro
 
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...SlideTeam
 
Ceph and Openstack in a Nutshell
Ceph and Openstack in a NutshellCeph and Openstack in a Nutshell
Ceph and Openstack in a NutshellKaran Singh
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureKasun Kodagoda
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesAjeet Singh Raina
 
Monitoring Apache Kafka with Confluent Control Center
Monitoring Apache Kafka with Confluent Control Center   Monitoring Apache Kafka with Confluent Control Center
Monitoring Apache Kafka with Confluent Control Center confluent
 
Velocity NYC 2016 - Containers @ Netflix
Velocity NYC 2016 - Containers @ NetflixVelocity NYC 2016 - Containers @ Netflix
Velocity NYC 2016 - Containers @ Netflixaspyker
 
Kubernetes와 OpenShift의 차이점
Kubernetes와 OpenShift의 차이점Kubernetes와 OpenShift의 차이점
Kubernetes와 OpenShift의 차이점Opennaru, inc.
 
Slicing user stories
Slicing user storiesSlicing user stories
Slicing user storiesDavid Michel
 

What's hot (20)

Abb sfc
Abb sfcAbb sfc
Abb sfc
 
IT Infrastructure Automation with Ansible
IT Infrastructure Automation with AnsibleIT Infrastructure Automation with Ansible
IT Infrastructure Automation with Ansible
 
Agile IT Service Management
Agile IT Service ManagementAgile IT Service Management
Agile IT Service Management
 
Backlog Grooming - The Importance of Good Grooming Habits
Backlog Grooming - The Importance of Good Grooming HabitsBacklog Grooming - The Importance of Good Grooming Habits
Backlog Grooming - The Importance of Good Grooming Habits
 
How Ignition Eases SCADA Pain Points
How Ignition Eases SCADA Pain PointsHow Ignition Eases SCADA Pain Points
How Ignition Eases SCADA Pain Points
 
What the Heck Is a Product Owner?
What the Heck Is a Product Owner?What the Heck Is a Product Owner?
What the Heck Is a Product Owner?
 
The Lego Kanban Game
The Lego Kanban GameThe Lego Kanban Game
The Lego Kanban Game
 
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...
Monoliths, microservices, and team cognitive load - Team Topologies - DOES EU...
 
Scrum Meetings Infographic v12
Scrum Meetings Infographic v12Scrum Meetings Infographic v12
Scrum Meetings Infographic v12
 
Extending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with KubernetesExtending DevOps to Big Data Applications with Kubernetes
Extending DevOps to Big Data Applications with Kubernetes
 
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...Hands On Introduction To Ansible Configuration Management With Ansible Comple...
Hands On Introduction To Ansible Configuration Management With Ansible Comple...
 
Ceph and Openstack in a Nutshell
Ceph and Openstack in a NutshellCeph and Openstack in a Nutshell
Ceph and Openstack in a Nutshell
 
Using GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to AzureUsing GitHub Actions to Deploy your Workloads to Azure
Using GitHub Actions to Deploy your Workloads to Azure
 
Ansible Tower
Ansible TowerAnsible Tower
Ansible Tower
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devices
 
Monitoring Apache Kafka with Confluent Control Center
Monitoring Apache Kafka with Confluent Control Center   Monitoring Apache Kafka with Confluent Control Center
Monitoring Apache Kafka with Confluent Control Center
 
Velocity NYC 2016 - Containers @ Netflix
Velocity NYC 2016 - Containers @ NetflixVelocity NYC 2016 - Containers @ Netflix
Velocity NYC 2016 - Containers @ Netflix
 
Kubernetes와 OpenShift의 차이점
Kubernetes와 OpenShift의 차이점Kubernetes와 OpenShift의 차이점
Kubernetes와 OpenShift의 차이점
 
Slicing user stories
Slicing user storiesSlicing user stories
Slicing user stories
 
GitLabで始めるDevOps入門
GitLabで始めるDevOps入門GitLabで始めるDevOps入門
GitLabで始めるDevOps入門
 

Similar to Five Real-World Strategies for Perforce Streams

Transferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersTransferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersPerforce
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureAdrian Otto
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...OpenShift Origin
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
Lightning branches at RedMart (Js conf Asia 2014 Talk)
Lightning branches at RedMart (Js conf Asia 2014  Talk)Lightning branches at RedMart (Js conf Asia 2014  Talk)
Lightning branches at RedMart (Js conf Asia 2014 Talk)Ritesh Angural
 
LAB - Perforce Large Scale & Multi-Site Implementations
LAB - Perforce Large Scale & Multi-Site ImplementationsLAB - Perforce Large Scale & Multi-Site Implementations
LAB - Perforce Large Scale & Multi-Site ImplementationsPerforce
 
Build and deployment
Build and deploymentBuild and deployment
Build and deploymentWO Community
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Mandi Walls
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
Documentation Insight技术架构与开发历程
Documentation Insight技术架构与开发历程Documentation Insight技术架构与开发历程
Documentation Insight技术架构与开发历程jeffz
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development PipelineGlobalLogic Ukraine
 
How to Reduce Database Load with Sparse Branches
How to Reduce Database Load with Sparse BranchesHow to Reduce Database Load with Sparse Branches
How to Reduce Database Load with Sparse BranchesPerforce
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios
 
Docker for Development
Docker for DevelopmentDocker for Development
Docker for Developmentallingeek
 
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructureFrom Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructurePerforce
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for DevelopmentChris Tankersley
 

Similar to Five Real-World Strategies for Perforce Streams (20)

Transferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersTransferring Changes Between Perforce Servers
Transferring Changes Between Perforce Servers
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011
 
Lightning branches at RedMart (Js conf Asia 2014 Talk)
Lightning branches at RedMart (Js conf Asia 2014  Talk)Lightning branches at RedMart (Js conf Asia 2014  Talk)
Lightning branches at RedMart (Js conf Asia 2014 Talk)
 
LAB - Perforce Large Scale & Multi-Site Implementations
LAB - Perforce Large Scale & Multi-Site ImplementationsLAB - Perforce Large Scale & Multi-Site Implementations
LAB - Perforce Large Scale & Multi-Site Implementations
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Documentation Insight技术架构与开发历程
Documentation Insight技术架构与开发历程Documentation Insight技术架构与开发历程
Documentation Insight技术架构与开发历程
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
 
Python on exadata
Python on exadataPython on exadata
Python on exadata
 
How to Reduce Database Load with Sparse Branches
How to Reduce Database Load with Sparse BranchesHow to Reduce Database Load with Sparse Branches
How to Reduce Database Load with Sparse Branches
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
 
Docker for Development
Docker for DevelopmentDocker for Development
Docker for Development
 
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix InfrastructureFrom Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
From Windows to Linux: Converting a Distributed Perforce Helix Infrastructure
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for Development
 

More from Perforce

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsPerforce
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...Perforce
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Perforce
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsPerforce
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessPerforce
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsPerforce
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog Perforce
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Perforce
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowPerforce
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldPerforce
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterprisePerforce
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMPerforce
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog Perforce
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Perforce
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure Perforce
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Perforce
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Perforce
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Perforce
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4Perforce
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Perforce
 

More from Perforce (20)

How to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning NeedsHow to Organize Game Developers With Different Planning Needs
How to Organize Game Developers With Different Planning Needs
 
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...Regulatory Traceability:  How to Maintain Compliance, Quality, and Cost Effic...
Regulatory Traceability: How to Maintain Compliance, Quality, and Cost Effic...
 
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...Efficient Security Development and Testing Using Dynamic and Static Code Anal...
Efficient Security Development and Testing Using Dynamic and Static Code Anal...
 
Understanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPsUnderstanding Compliant Workflow Enforcement SOPs
Understanding Compliant Workflow Enforcement SOPs
 
Branching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development ProcessBranching Out: How To Automate Your Development Process
Branching Out: How To Automate Your Development Process
 
How to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOpsHow to Do Code Reviews at Massive Scale For DevOps
How to Do Code Reviews at Massive Scale For DevOps
 
How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog How to Spark Joy In Your Product Backlog
How to Spark Joy In Your Product Backlog
 
Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team Going Remote: Build Up Your Game Dev Team
Going Remote: Build Up Your Game Dev Team
 
Shift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New WorkflowShift to Remote: How to Manage Your New Workflow
Shift to Remote: How to Manage Your New Workflow
 
Hybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated WorldHybrid Development Methodology in a Regulated World
Hybrid Development Methodology in a Regulated World
 
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the EnterpriseBetter, Faster, Easier: How to Make Git Really Work in the Enterprise
Better, Faster, Easier: How to Make Git Really Work in the Enterprise
 
Easier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALMEasier Requirements Management Using Diagrams In Helix ALM
Easier Requirements Management Using Diagrams In Helix ALM
 
How To Master Your Mega Backlog
How To Master Your Mega Backlog How To Master Your Mega Backlog
How To Master Your Mega Backlog
 
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
Achieving Software Safety, Security, and Reliability Part 3: What Does the Fu...
 
How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure How to Scale With Helix Core and Microsoft Azure
How to Scale With Helix Core and Microsoft Azure
 
Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2Achieving Software Safety, Security, and Reliability Part 2
Achieving Software Safety, Security, and Reliability Part 2
 
Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?Should You Break Up With Your Monolith?
Should You Break Up With Your Monolith?
 
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
Achieving Software Safety, Security, and Reliability Part 1: Common Industry ...
 
What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4What's New in Helix ALM 2019.4
What's New in Helix ALM 2019.4
 
Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison Free Yourself From the MS Office Prison
Free Yourself From the MS Office Prison
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Five Real-World Strategies for Perforce Streams

  • 1. # Erik van Nooijen Technical Lead at TomTom
  • 2. # 10 years as contractor • (senior) developer 5 years in TomTom - Netherlands • 3 years senior developer • 2 years technical lead
  • 3. #
  • 4. # TomTom total Perforce installation size 780 Gb database 3.2 TB versioned files #proxies 10 #replicas 4 #users ~700 #workspaces ~19000 #changes ~1.000.000 Main server 32 core 284 Gb ram 4* Fusion IO (ssd) 8.6 Tb Streamed depot size 52 Gb #streams 360 #mainlines 1 #release streams 20 #users ~150 #changes ~80000
  • 5. #
  • 6. # • Parent / child stream relationship – predefined integration flows • Merge-down / copy-up – resolve-on-child paradigm • Stream specification vs branch mapping • Moving workspace • Naming conventions – Renaming a stream does not rename the underlying branch • Deleting streams
  • 7. #
  • 8. # • Integrate 1 (or few) specific changelists up, without doing a full copy-up • Examples: – Quick propagation of a bug fix – Selective moving finished work to prep stream
  • 9. #
  • 10. # • Integrations that are not following pre-defined flow • Using ‘p4 integrate //source/…@11,11 //dest/…’ • Example: integrate specific changelist into existing release. Most often happens for bug fixes.
  • 11. # • Integrations that are not following pre-defined flow • Using ‘p4 integrate //source/…@11,11 //dest/…’ • Example: integrate specific changelist across development streams, without going via main. Usually for inter-dependencies between developments. • Alternative; use stream specification with ‘import’ – Defined imports with ‘import @’ available with p4d 2014.1 – Writable imports become available with p4d 2014.2
  • 12. #
  • 13. # Stream: //depot/main Type: mainline Paths: share //… Stream: //depot/dev-X Type: development Parent: //depot/main Paths: share //… import versions.txt //depot/main/versions.txt Client: depot_dev_ws View: //depot/dev-X/… // depot_dev_ws/… !! No ‘Stream:’ but using branch mappings $ p4 edit versions.txt $ p4 submit –d “my own development identifiers in versions.txt” $ p4 copy //depot/dev-X/… //depot/main/… $ p4 submit -d “copy up from dev stream” !! No –S <stream> for copy argument, but branch mappings Result: versions.txt changed on main! Final solution: 1. RW permission group on main for this file 2. educating users on p4 copy
  • 14. #
  • 15. # • Most benefit on server side, less so for end-users • Can be confusing when used with branch mapping • When to use regular development stream vs task stream ? – Task streams can be converted to type development, but conversion back is not possible • We decided not to use them, instead we use development streams only
  • 16. # • Reduce the amount of data that gets pulled into a workspace • Compose product combinations with only imports – One mainline with all imports for ‘mainlines’ – Many virtual streams based on the mainline that overrule the imports with various ‘release’ imports – Easy and cheap to make many combinations
  • 17. # canary-main (type: mainline) import os/… //depot-os/main/… import engine/… //depot-engine/main/… import ui/… //depot-ui/main/… import engine/ui-tweaks/… //depot-ui/main/tweaks/… canary-ui-rel1 (type: virtual) share … import ui/… //depot-ui/rel-1/… import engine/ui-tweaks/… //depot-ui/rel-1/tweaks/… canary-ui-rel2 (type: virtual) share … import ui/… //depot-engine/rel-2/… import engine/ui-tweaks/… //depot-ui/rel-2/tweaks/…
  • 18. #
  • 19. # • ‘p4 integrate –f’ is evil ! – alternative is ‘p4 copy’ • Use ‘integ.engine = 3’ – engine 3 is default, but maybe you have engine 2 specifically configured • Import with stream specification not (yet) supported – ‘import //… -S //depot/stream’
  • 20. # • Educate your user base • Cherry picking integrations • Cross integrations • Stream specification versus branch mapping • Task and virtual streams
  • 21. # Erik van Nooijen eric.vannooijen@tomtom.com #idonttweet

Editor's Notes

  1. 10 years contractor on and off for TomTom, some other jobs in between
  2. To give some indication of the size of Perforce in TomTom Streamed depot ~2.5 years in existence (since May 2012)
  3. Parent/child stream relationship: explain the ‘levels of stability: from dev -> dev -> main -> release’ “resolve on child paradigm”: or “Copy-up is trivial” This is the true power of perforce streams! Put focus here. Stream specification vs branch mapping: p4 commands support the “–S <stream>” option, which maps the stream view, while the same commands also allow for direct branch mapping /… notation (p4 integrate, copy, merge, …) Moving workspace: Very useful, but not all users like it. We have seen on numerous occasions submits in the wrong stream because the user forget the workspace was moved before. Use or don’t use per user-preference. Naming convention: we have: One mainline only, called ‘main’ All release stream names start with ‘rel-’ All development stream names start with ‘dev-’ All streams are named ‘<parentname>-<extension>’ to show clearly the parent/child structure, which is very convenient most of the time. It gives issues when reparenting (and would call for renaming, but that confuses again because of the streamname/branchname differences) Exception is of course all dev streams below main (they don’t start with ‘main-’) Exception is development stream below release stream (starts with ‘dev-’ and not ‘rel-’) Renaming a stream will be confusing for users and is not advised, based on experience. Deleting streams as to keep the streams overview clean. Note that it does not remove them from the left-hand side of p4v (@perforce; can this become a nested list?) TODO: add “use p4 <command> –S <stream>” option for all p4 commands that support it (see also later ‘streams vs branch mapping’)
  4. Cherry-picking concept is following the parent/child relationship, but does not do the full sets of changelists. Instead it does one or selected few sets of changelists.
  5. Cherrypicking happens, for example, when a specific change (say bugfix) needs to be propagated, but a full copy-up (or merge-down) is not wishful yet (because the full work on some task has not been completed). As we have streams for each stream below the mainline we have this behavior often. We have such setup because the teams like ‘working in their own area and setup’. Therefore teams cherrypick from their real development stream into a prep(eration) stream and from there copy-up into the mainline. TODO explain other situations where this might occur Call out to Perforce for official support and a whitepaper on this behavior: “Hey Perforce representatives; maybe you can support this officially with a ‘p4 –S <stream>’ command and describe the desired workflow in a nice whitepaper ?”
  6. Because there is no flow enabled from main into the release stream (by design, but can be enabled) it is not possible to normally integrate a fix from the mainline environment into the release. You could enable the flow in the stream specification of the release stream, but you’d have to copy a full set of changes, which is still not what you’d want. Making the edits twice manually, one in development stream and one in the release stream, is not a wishful situation as it is/can be lot of duplicate work and it opens the door for typos and (minor) differences. Call out to Perforce representatives again for another official support and whitepaper.
  7. Typically the same situation as before; consider a situation where 1 team/workpackage is depending on another that is not ready to deliver fully into the parent/mainline it happens that there is a crossintegration done to get the preliminary work quickly from one development stream into the other. Another option here is to be creative with import statements in the stream specification of dev-Y, but that can be cumbersome to maintain and gives issues if dev-Y wants to edit the imported files. Note: writable imports will be available in p4d 2014.2
  8. Tell the story of our user who did this and wasn’t even aware he did wrong. “but I used p4 copy” was his actual first response when asked about how he managed to copy versions.txt into main. Another option here is to be creative with import statements in the stream specification of dev-Y, but that can be cumbersome to maintain and gives issues if dev-Y wants to edit the imported files. Side effect is every stream gets the update via import whenever it changes on main, this is undesirable Note: writable imports will be available in 2014.2 P4D Educate your users: Use “p4 <command> –S <stream>”
  9. Task streams can be converted into development stream, but cannot convert back
  10. You can also do this with real (release) streams, but using virtual streams makes it very clear there isn’t any special branch, there isn’t any data stored specifically for these canaries and cleanup is easier, just delete the stream specification, no trace is left behind.
  11. ‘p4 integrate –f’ resets your integration history and causes unexpected results further down the line. We used it as our ‘go to hammer to hit any nail’ and since have moved away, preferring ‘p4 copy’ commands instead. TODO: can we make the road go behind the template footer ?
  12. Educate your user base: It seems so obvious, but instilling the true reasons and power of streams in combination with the appropriate commands with prevent you from some common mistakes Cherry picking integrations: Sometimes it is needed. Think about it, be prepared for the questions. Done with regular integrations that is not ‘streamy’ but works good. Cross integrations: Similar to cherry picking integrations, where it also ignores the common direction of merge and copy flows. @Perforce; can you support this use cases better ? Stream specification versus branch mapping: Use streamy commands wherever and whenever possible. When you use branch mapping; make sure you thought about its consequences. Task and virtual streams: Task streams have limited use, hard to define when you should choose for task rather than regular development type. @Perforce; maybe you can comment on this ? Virtual streams can be useful indeed, especially to limit the size of your workspaces, but some other creative use exists.
  13. Please pay attention to the mismatch in my email address, but really, my name is spelled correctly (that’s how my mum writes it, and she’s always right, as usual for mums) and my email is also correct.