SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Perf e Ad nist ion
P force dmi trati
Optimiz
O     zation Scala
           n,    ability Availability and
                        y,          y
              Relliabilit
                        ty




           Michael Mirman
           M       M
           Pe
            erforce Administ
                    A      trator
           MathWor Inc.
           M        rks,
Abstract
Perforce Software Configuration Management system is designed to be scalable.
Necessary infrastructure includes such maintenance tasks as regular checkpointing, rolling journals,
testing disaster recovery plans, and load balancing.
As our Perforce user base grows, we are striving to minimize downtime and provide reasonable
response time, while running more and more maintenance tasks.
We hope our experience will help other Perforce administrators plan their growing systems.


Perforce at MathWorks
Company’’s source code is company’’s jewels. Perforce is the system that protects it.
As of this writing, MathWorks has one main production server, about 500 users, and several million
archive files.
We deploy almost all possible triggers, several daemons, and partially mirror our own bug database into
Perforce.
In addition to P4, P4V, P4Perl, P4Java, Emacs, and P4Eclipse interfaces, we support a modified version of
P4DB1.




1
 There are several versions of P4DB publicly available.
Our version is close to the version at http://www.releng.com/downloads3/index.html
Archite
      ecture Ov
              verview

We use multiple proxie p4broker, and multiple replicas for d
         m           es,                    e              different purposes. We’’ll d
                                                                                      describe the
details lat
          ter.




            proxy1                     proxy2                   pr
                                                                 roxy3




                                  p4b
                                    broker (H/A VM)
                                                V




                                                                    p4d (replic 2;
                                                                              ca
      p4d (replica 1)               p4d (master)
                                    p                               warm stanndby)




Using proxies
      p
                                                                       methodology2 to route senders
We install proxies at different locations, and we use the anyc routing m
                                                             cast
         pologically nearest node us the same destination .
to the top                           sing        e



2
 General ideas of anycas can be found on Wikipedia (http://en.wi kipedia.org/wi
                       st           d            a                            iki/Anycast), and the details can
be found at http://www.
         a             .cisco.com/en/
                                    /US/docs/ios/s
                                                 solutions_docss/ip_multicast//White_papers  s/anycast.htmll
This means that all our Perforce users use the same default P4PORT=perforce:1666. However,
depending on which computer user issues perforce commands on, the requests are routed to a specific
proxy.

For example, we currently have three proxies at different geographic locations. When user issues a
request to perforce:1666, the proxy is chosen based on the location of the user.

In addition to providing cache for syncing files, using anycast with proxies gives us the ability to fail over.
Anycast routing is supported by a few system processes, started at the boot time. If those processes go
down, another host would automatically take over routing within seconds.

We also have a watchdog cron that detects if a proxy process goes down but anycast processes keep
running. In that case, the cron script can be configured either to bring down anycast processes to let
another proxy host to take over routing, or (our current choice) send email to the administrators for an
immediate action.

Every proxy host is running a command like this:

    /local/perforce/bin/p4p -p 1666 -t host:port 
       -r /local/perforce/1666 -d -L /local/perforce/logs/p4p.1666.log

where host:port identifies the location of a p4broker instance (see below).

Recommendation: Consider using anycast if you have multiple proxies.


Replication

How it’’s done (2009.2 solution)
When the replicate command became available, we implemented the following procedure.

Say, the master server is perforce 00, and perforce 01 is to be the host for our replica. Then, on
perforce 01 we would run

    p4 -p perforce-00:1666 replicate 
    -s SOMEDIR/replica.state -J SOMEDIR/journal 
    SOMEDIR/admin.support/p4admin_replicate -port 1666 -srchost
    perforce-01 -srctop DATADIR

p4admin_replicate is our script to replicate data synchronously3. This was implemented before the ““p4
pull”” command became available, and this method is still used for some replicas.


3
 The script is available in Perforce public depot at
http://public.perforce.com:8080/@md=d&cd=//&cdf=//guest/michael_mirman/conference2011/p4admin_replica
te&c=uLH@//guest/michael_mirman/conference2011/p4admin_replicate?ac=22
The p4admin_replicate script reads journal records from STDIN and passes them to

      p4d –r root –f –jrc –

References:
http://www.perforce.com/perforce/doc.current/manuals/p4sag/10_replication.html and
http://www.perforce.com/perforce/doc.current/manuals/p4sag/aa_p4d.html#1043673

Some features of this script:

Only certain journal records trigger the need to copy data. For example, we ignore db.rev[cdhp]x
records because there are no associated file changes.

Directories are grouped for efficiency, and we use the Perl module Parallel::ForkManager4 to parallelize
rsync of selected directories.

We use this rsync command:

          rsync -av --delete “$srchost:$srctop/$dir_nospace/” “$dir_nospace/”

Note the following:
       We recurse the directory. It may be an overkill, but ““smarter”” selection is error prone;
       We preserve modification times of the files;
       The verbose mode allows introspection in case ““p4 verify”” finds missing revisions;
       We have to quote arguments in case if there are spaces;
       We use delete because subdirectories and files related to deleted shelved changes as well as in
       a rare case of obliterate get removed in the source and we need to mirror it.
Result: the average replica age is typically 4 5 minutes, including data. However, certain conditions may
greatly affect the replica age. For example, maintenance tasks may change using the filer cache, or
copying a top depot directory may take a long time. In these cases the replica age may jump
significantly.

Work in progress –– 2010.2 solution
Perforce 2010.2 release has a new command ““p4 pull”” and several configurables to help the replication.

For the full replica we replaced the replicate command described above with configurations like this:
          -> p4 configure show         Replica
          Replica: monitor = 1
          Replica: server = 1
          Replica: startup.1 =         pull   -i   2   -J /perforce/1666/journal
          Replica: startup.2 =         pull   -i   1   -u
          Replica: startup.3 =         pull   -i   1   -u
          Replica: startup.4 =         pull   -i   1   –u

4
    See http://search.cpan.org/~dlux/Parallel ForkManager 0.7.5/ForkManager.pm
We run p4d with the ––J option. Therefore, we need to use the ––J option in the first pull command, which
replicates the journal records. Note that the ––J option is available in p4d Build 284433 and later.
The number of ““pull ––u”” commands depends on the amount of load on the server.
We use ““p4 pull ––l”” to monitor pending file transfers to see whether we need to add more pull
commands in the configuration.

We also created a new meta data only replica with the only purpose to create checkpoints every night.
The configuration of that replica is:
        -> p4 configure show Replica2
        Replica2: monitor = 1
        Replica2: server = 1
        Replica2: startup.1 = pull -i 4 -J /perforce/1666/journal



Load Balance
We monitor the time users hold different locks as Google suggested5, although we do not terminate
processes automatically. In fact, we mostly only collect the information about the locks and command
timing for later introspection.

Recommendation: Don’’t delay deploying monitoring until you notice a slowdown. Start collecting the
data about what might cause a slow down as early as possible.

This monitoring helps us identify users and workflows putting significant load on the system. It also
helps us determine whether a remote office may benefit from deploying a new proxy.

Many continuous integration build systems submit at least a few commands every so often. Depending
on the number of build systems and the time interval they use, the load may become noticeable.

For example, we have found out that one particular group, which deployed a build system based on
TeamCity submits approximately 120,000 ““changes ––m 1 //……”” commands every day. That’’s almost
three commands every two seconds, and from only one small group.

We deployed replica servers (we’’ll talk about the details later), installed p4broker, and started rerouting
build systems to replicas.

Recommendation: Using replicas is a good way of reducing the load on the main server.




5

http://www.perforce.com/perforce/conferences/us/2007/presentations/DBloch_Life_on_the_Edge2007_paper.p
df
Using p4broker
We use p4broker for several reasons.

First, p4broker helps distribute the load, routing certain read only requests to replicas.

Second, p4broker can be used to provide read only access to Perforce while the master server is under
maintenance.

To accomplish these goals, we have a watchdog cron job that runs every five minutes and checks the
availability of all the servers as well as the replica age. This job updates the broker configuration file as
needed. P4broker does not have to be restarted. It automatically picks up the change in the
configuration file.

If all the servers are up and running, and the replica age is within the set boundaries, the configuration
file redirects all p4db (web) and build systems queries to a replica.

If the replica age reaches the set threshold, the routing to the replicas is removed from the broker
configuration file and email is sent to the administrators.

If the main server is down, all read only requests are redirected to a replica, and other user commands
will result in the message that the server is in maintenance mode.



Offline Checkpointing
As of this writing, creating a new checkpoint at MathWorks takes an hour and a half. Even when it took
half of this time, regardless of the time of the day when we ran it, some users would complain that their
commands would hang. This is typical for companies where people work long hours or have offices
around the world.

Our first solution used NetApp filer snapshots6. When we deployed replicas we implemented a simpler
solution: creating a checkpoint on one of the replicas.

On the replica, we create a new checkpoint by the command

    p4d –r root –z –jd path

Our replicas run with the ““ J off”” option, which turns off journals. This way we don’’t have to worry about
truncating journals on the replicas.


6
 Available in the Perforce public depot at
http://public.perforce.com:8080/@md=d&cd=//&cdf=//guest/michael_mirman/snap_checkpoint/snap_checkpoin
t&pat=//guest/michael_mirman/...&c=Kcu@//guest/michael_mirman/snap_checkpoint/snap_checkpoint?ac=22
On the master server we roll journal every 30 minutes (journals are not compressed because replication
does not support compressed journals). All checkpoints from the replica and journals from the master
are copied to a backup filer, from which everything gets copied on tape once a day.

There is no synchronization between rolling journals on the master, replication process on the replica,
and creating checkpoints on the replica. This gives us flexibility in when we do different maintenance
tasks, but poses a challenge (more below) when we need to determine what journals we have to replay
to rebuild the database.

Disaster Recovery Plan (Preparation)
At the proxy level we have redundant machines, where one takes over if another goes down.

At the p4broker level, the machine is an H/A virtual machine, and it gets rebooted if needed.

A copy of the archive data on the backup file server is maintained during the day by rsync. A checkpoint
is created every night and copied to the backup file server. Every time when the master rolls journal,
the latest journal also gets copied to the backup file server. Checkpoints, journals, and the archive get
copied on tape once in 24 hours.

What is kept on the backup file server (and tape) is sufficient to restore the database to the last roll of
the master journal, which is no more than 30 minutes.

Currently we do not have redundant servers at different locations and we don’’t fail over automatically.

Disaster Recovery Plan (Execution)
To restore the database, we run a script, which first finds the latest checkpoint and uses it to create db
files from scratch. Then, the script needs to play sequentially all the journals from a certain point in
time. Due to the mentioned independence of replication, rolling journals and creating checkpoints, using
journal counters causes a race condition, sometimes leading to not replaying some journal records,
which in turn causes inconsistency errors in the ““p4d ––xx”” report.

Instead, to determine which journals to replay we use the @ex@ records7 in the checkpoint.

The first @ex@ record in the checkpoint contains the time when we started creating this checkpoint.
Starting with the journal determined by the journal counter, walking back in time, we need to find the
first journal that has an @ex@ record with the time preceding or equal the time from the first
checkpoint record.




7
 The described implementation had been done before the new @nx@ type was introduced in 2010.2. See the
Release Notes (http://www.perforce.com/perforce/r10.2/user/relnotes.txt) for the description of the @nx@
records.
Example of restoring server.

Created on a replica server:
    -r--r--r-- 1 perforce users 3656847585 Nov 28 18:59 perforce-01-blr.1666.ckp.42909.gz


Created on the master:
    -r--r--r--   1   perforce   users     14967   Nov   28   17:52   journal.jnl.42906
    -r--r--r--   1   perforce   users     34766   Nov   28   18:22   journal.jnl.42907
    -r--r--r--   1   perforce   users     12319   Nov   28   18:52   journal.jnl.42908
    -r--r--r--   1   perforce   users   1188176   Nov   28   19:22   journal.jnl.42909
    -r--r--r--   1   perforce   users     44062   Nov   28   19:52   journal.jnl.42910
    -r--r--r--   1   perforce   users     51032   Nov   28   20:22   journal.jnl.42911


First, all old database files are removed and recreated by

        p4d –r root –z –jr path/perforce-01-blr.1666.ckp.42909.gz

Now we’’ll find out what journals we should replay.

Find the time from the first @ex@ record in the checkpoint file:

my $ex_time_ckp;
if ( open my $PIPE, '-|', "/bin/zcat $ckp" ) {
    while ( <$PIPE> ) {
        if ( /^@ex@ d+ (d+)/ ) {
            $ex_time_ckp = $1;
            last;
        }
    }
}
else {
    warn "WARNING: Cannot open pipe to zcat: $!n";
}

From the checkpoint file name $counter=42909. Collect all the available journals and start walking back
starting with 42909 looking for the @ex@ record with time <= time in the previous step:

my @all_journals = glob("$backups/journal/journal.jnl.*");
my @jnl_nums = map { /.(d+)$/ ? $1 : () } @all_journals;
READ_JOURNAL:
    # journals are sorted from the most recent to the oldest
    for my $n ( sort { $b <=> $a } grep { $_ <= $counter } @jnl_nums ) {
        my $jnl_file = "$backups/journal/journal.jnl.$n";
        open my $JNL, '<', $jnl_file
            or do {
                print "Unexpected error opening file $jnl_file: $!n";
                next;
            };
        while ( <$JNL> ) {
            my ($time) = /^@ex@ d+ (d+)/
                or next;
                print "Found in $jnl_file @ex@ with time=",
                         scalar(localtime $time), "n";
if ( $time <= $ex_time_ckp ) {
                  $new_counter = $n;
                  last READ_JOURNAL;
              }
              else {
                  next READ_JOURNAL;
              }
         }
    }

Now $new_counter contains the journal number to start replaying.

Here is the snippet from the log:

>> We got this time from /nasbackups/perforce/checkpoint/perforce-01-
blr.1666.ckp.42909.gz: Sun Nov 28 18:30:22 2010
>> Found in /nasbackups/perforce/journal/journal.jnl.42909 @ex@ with time=Sun Nov 28
18:52:01 2010
>> Found in /nasbackups/perforce/journal/journal.jnl.42908 @ex@ with time=Sun Nov 28
18:22:01 2010

Depending how frequently the master rolls the journal and how much time checkpointing takes, you
may have to walk back for more than one journal.

Now we can play all the journals sequentially:

my $last_replayed;
for ( sort { $a <=> $b } grep { $_ >= $counter } @jnl_nums ) {
    $last_replayed = $_;
    my $jnl = "$backups/journal/journal.jnl.$last_replayed";
    # We'll use -f to overcome benign errors
    #     Journal record replay failed!
    # This was recommended by Perforce Support.
    print "Replaying journaln";
    system "$p4d -r $dbroot -f -jr $jnl";
}

We calculate $last_replayed in case if we restore the database on a replica and have to restart
replication after we’’re done restoring the database. In that case, we need to update correctly the replica
state file we use in the ––s option of the ““p4 replica”” command.

    # modify the replica.state file according to the last journal we replayed
    print "Updating $replica_state:n",
            "the new counter from which we'll start replicating is $last_replayedn";
    open my $STATE, '>', $replica_state
       or die "Unexpectedly, cannot rewrite $replica_state: $!";
    print $STATE "$last_replayedn";
    close $STATE;
Testing
We have two stacks: production and test, which we keep very similar to each other. Every server host
runs monitoring jobs. We also use Nagios8 to monitor certain processes, as well as the CPU load and
disk space usage.

Test servers are used for daily testing of the restore procedure using the latest checkpoint and journals.
This is followed by full verification (““p4 verify””, ““p4d ––xv””, ““p4d ––xx””), although during the week ““p4
verify”” is done only against head revisions.

Restore procedures on two different test servers are staggered. This means that they may use the same
checkpoint, but they use a different number of journals. Any problem with the checkpoint usually
becomes known within 24 hours.


Maintenance Procedures on the Production Stack
           Master                 Replica 1 (full)            Replica 2                   Replica 3 (full)
                                                           (meta data only)
    Review Daemon               Replication with          Create daily              Mirroring some Perforce
    Mirroring some              synchronous data          checkpoints and           information to an SQL db
    Perforce information        update                    copy them to              Replication with
    to an SQL db                Watchdog to create        backup storage            synchronous data update
    Partial mirroring of        broker configuration      Database                  for the replica itself and
    our own bug                 file                      verification              backup storage
    database into               Database verification     (p4d ––xx and ––xv)       Database verification
    Perforce                    (p4d ––xx and ––xv)                                 (p4d ––xx and ––xv)
    Roll journal every 30       ““p4 verify”” –– during                              ““p4 verify”” –– during the
    minutes and copy            the week: only head                                 week: only head
    journals to backup          revisions; on a                                     revisions; on a weekend ––
    storage                     weekend –– full                                     full verification
    only on Sundays:            verification
    Database verification                                                          This replica is a warm
    (p4d ––xx and p4d ––xv)   This replica is used for                             standby and used for
                              read only queries.                                   periodic controlled fail
                                                                                   over.




8
    http://www.nagios.org/
Fail over Planning
We do not have an automatic fail over procedure because we want to assess the situation before acting.

Fail over is achieved by changing the broker configuration file and making the standby server the new
master.

The standby server cannot be contacted directly (protect table makes sure every contact to the server is
made through one of the proxies, and there is no proxy for the standby server). We have not started
using the read only mode available in 2010.2, but we plan to start using it at least for some replicas.



Minimize downtime during upgrade

Consider the following sequence of steps to minimize the downtime during a major upgrade:

        Prepare all binaries (p4d, p4p, p4broker , p4) in the right locations on the servers, so a restart of
        any of them would start the new version of that executable.
        Make sure your license files allow your upgrade.
        Configure p4broker configuration file to redirect all read only access to a replica. All other
        requests would respond to the user with the message that the server is in the maintenance
        mode.
        Wait until the replication process is finished.
        Stop the master server (p4 admin stop). This typically brings down the replication processes.
        Alternatively, kill them.
        Upgrade the master (p4d ––xu) and restart it.
        Restart p4broker (this is one of the service interrupts).
        Reconfigure the broker configuration file without using any replicas.
        Upgrade every replica server (p4d ––xu) and restart replication.
        Reconfigure the broker configuration file using replicas.
        Restart proxies (this is another service interrupt).



Conclusion
        Have test servers with identical or very similar architecture.

        Consider the following options to decrease possible downtime:

            o   Anycast with multiple proxies;

            o   High Availability VM for p4broker;
o   Maintain a warm standby replica.

For load balancing:

    o   Move some maintenance procedures to replica servers (VMs can be adequate);

    o   Create checkpoints on a replica server (don’’t forget to test the restore regularly);

    o   Use p4broker to redirect some load to a replica server.

Replicate data synchronously on replicas that need them.

““Set it and forget it”” Administration is easy when you have automated most functions.
White Paper: Perforce Administration Optimization, Scalability, Availability and Reliability

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDPlcplcp1
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking WalkthroughThomas Graf
 
2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful ServicesThomas Graf
 
NDMPCOPY lun from 7-mode NetApp to cDOT
NDMPCOPY lun from 7-mode NetApp to cDOTNDMPCOPY lun from 7-mode NetApp to cDOT
NDMPCOPY lun from 7-mode NetApp to cDOTAshwin Pawar
 
Advanced Bash Scripting Guide 2002
Advanced Bash Scripting Guide 2002Advanced Bash Scripting Guide 2002
Advanced Bash Scripting Guide 2002duquoi
 
Berkeley Packet Filters
Berkeley Packet FiltersBerkeley Packet Filters
Berkeley Packet FiltersKernel TLV
 
Introduction to tcp ip linux networking
Introduction to tcp ip   linux networkingIntroduction to tcp ip   linux networking
Introduction to tcp ip linux networkingSreenatha Reddy K R
 
Lecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationLecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationMohammed Farrag
 
Performance Analysis Tools for Linux Kernel
Performance Analysis Tools for Linux KernelPerformance Analysis Tools for Linux Kernel
Performance Analysis Tools for Linux Kernellcplcp1
 
BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabTaeung Song
 
3.2 process text streams using filters
3.2 process text streams using filters3.2 process text streams using filters
3.2 process text streams using filtersAcácio Oliveira
 
BPF - All your packets belong to me
BPF - All your packets belong to meBPF - All your packets belong to me
BPF - All your packets belong to me_xhr_
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCKernel TLV
 
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThe Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThomas Graf
 

Was ist angesagt? (20)

Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDP
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking Walkthrough
 
2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services2015 FOSDEM - OVS Stateful Services
2015 FOSDEM - OVS Stateful Services
 
NDMPCOPY lun from 7-mode NetApp to cDOT
NDMPCOPY lun from 7-mode NetApp to cDOTNDMPCOPY lun from 7-mode NetApp to cDOT
NDMPCOPY lun from 7-mode NetApp to cDOT
 
Advanced Bash Scripting Guide 2002
Advanced Bash Scripting Guide 2002Advanced Bash Scripting Guide 2002
Advanced Bash Scripting Guide 2002
 
Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
Berkeley Packet Filters
Berkeley Packet FiltersBerkeley Packet Filters
Berkeley Packet Filters
 
Introduction to tcp ip linux networking
Introduction to tcp ip   linux networkingIntroduction to tcp ip   linux networking
Introduction to tcp ip linux networking
 
Lecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administrationLecture 3 Perl & FreeBSD administration
Lecture 3 Perl & FreeBSD administration
 
dh-make-perl
dh-make-perldh-make-perl
dh-make-perl
 
Staging driver sins
Staging driver sinsStaging driver sins
Staging driver sins
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
Performance Analysis Tools for Linux Kernel
Performance Analysis Tools for Linux KernelPerformance Analysis Tools for Linux Kernel
Performance Analysis Tools for Linux Kernel
 
BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLab
 
Lec7
Lec7Lec7
Lec7
 
3.2 process text streams using filters
3.2 process text streams using filters3.2 process text streams using filters
3.2 process text streams using filters
 
Examples 2.0
Examples 2.0Examples 2.0
Examples 2.0
 
BPF - All your packets belong to me
BPF - All your packets belong to meBPF - All your packets belong to me
BPF - All your packets belong to me
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCC
 
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RCThe Next Generation Firewall for Red Hat Enterprise Linux 7 RC
The Next Generation Firewall for Red Hat Enterprise Linux 7 RC
 

Andere mochten auch

"Німіє слово і мовчать уста"
"Німіє слово і мовчать уста""Німіє слово і мовчать уста"
"Німіє слово і мовчать уста"2408868
 
Love locks no more the replacements
Love locks no more   the replacementsLove locks no more   the replacements
Love locks no more the replacementsChase Rubin
 
Vietnam Delegation VR Presentation
Vietnam Delegation VR PresentationVietnam Delegation VR Presentation
Vietnam Delegation VR PresentationMikeWalshPhDLPCCRC
 
Antika tablo alanlar
Antika tablo alanlarAntika tablo alanlar
Antika tablo alanlaremre yıldız
 
How to make presentation
How to make presentation How to make presentation
How to make presentation Digitycoon
 
Your scuess-is-only-limited-new hom-active_april_2012
Your scuess-is-only-limited-new hom-active_april_2012Your scuess-is-only-limited-new hom-active_april_2012
Your scuess-is-only-limited-new hom-active_april_2012Dhurandhar Singh
 
Ep sept 12 staff meeting
Ep sept 12 staff meetingEp sept 12 staff meeting
Ep sept 12 staff meetingctepei
 
Software testing and_quality_assurance_powerpoint_presentation
Software testing and_quality_assurance_powerpoint_presentationSoftware testing and_quality_assurance_powerpoint_presentation
Software testing and_quality_assurance_powerpoint_presentationvigneshasromio
 
Non è solo un problema di metodologia
Non è solo un problema di metodologiaNon è solo un problema di metodologia
Non è solo un problema di metodologiaMarco Trincardi
 
Huisvesting in control (wiljan jansen en hanneke kohlmann)
Huisvesting in control (wiljan jansen en hanneke kohlmann)Huisvesting in control (wiljan jansen en hanneke kohlmann)
Huisvesting in control (wiljan jansen en hanneke kohlmann)Bart Vogels
 
Системы оценки рисков при катании вне трасс
Системы оценки рисков при катании вне трассСистемы оценки рисков при катании вне трасс
Системы оценки рисков при катании вне трассAlexandr Gabchenko
 
HurstonConflictingMessages
HurstonConflictingMessagesHurstonConflictingMessages
HurstonConflictingMessagesMeaghan Kielley
 
Cosmetic dermatology washington dc
Cosmetic dermatology washington dcCosmetic dermatology washington dc
Cosmetic dermatology washington dcmi skin
 
Pregón de navidad. texto
Pregón de navidad. textoPregón de navidad. texto
Pregón de navidad. textoLuksCorso
 
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)DonorPath
 

Andere mochten auch (20)

"Німіє слово і мовчать уста"
"Німіє слово і мовчать уста""Німіє слово і мовчать уста"
"Німіє слово і мовчать уста"
 
Love locks no more the replacements
Love locks no more   the replacementsLove locks no more   the replacements
Love locks no more the replacements
 
Vietnam Delegation VR Presentation
Vietnam Delegation VR PresentationVietnam Delegation VR Presentation
Vietnam Delegation VR Presentation
 
Antika tablo alanlar
Antika tablo alanlarAntika tablo alanlar
Antika tablo alanlar
 
FJE Consulting Services 2015
FJE Consulting Services 2015FJE Consulting Services 2015
FJE Consulting Services 2015
 
How to make presentation
How to make presentation How to make presentation
How to make presentation
 
Treats for sunburn
Treats for sunburnTreats for sunburn
Treats for sunburn
 
Your scuess-is-only-limited-new hom-active_april_2012
Your scuess-is-only-limited-new hom-active_april_2012Your scuess-is-only-limited-new hom-active_april_2012
Your scuess-is-only-limited-new hom-active_april_2012
 
Ep sept 12 staff meeting
Ep sept 12 staff meetingEp sept 12 staff meeting
Ep sept 12 staff meeting
 
Software testing and_quality_assurance_powerpoint_presentation
Software testing and_quality_assurance_powerpoint_presentationSoftware testing and_quality_assurance_powerpoint_presentation
Software testing and_quality_assurance_powerpoint_presentation
 
AS Evaluation
AS EvaluationAS Evaluation
AS Evaluation
 
Non è solo un problema di metodologia
Non è solo un problema di metodologiaNon è solo un problema di metodologia
Non è solo un problema di metodologia
 
Huisvesting in control (wiljan jansen en hanneke kohlmann)
Huisvesting in control (wiljan jansen en hanneke kohlmann)Huisvesting in control (wiljan jansen en hanneke kohlmann)
Huisvesting in control (wiljan jansen en hanneke kohlmann)
 
SAK:n luottamusmieskysely 2007
SAK:n luottamusmieskysely 2007SAK:n luottamusmieskysely 2007
SAK:n luottamusmieskysely 2007
 
Системы оценки рисков при катании вне трасс
Системы оценки рисков при катании вне трассСистемы оценки рисков при катании вне трасс
Системы оценки рисков при катании вне трасс
 
HurstonConflictingMessages
HurstonConflictingMessagesHurstonConflictingMessages
HurstonConflictingMessages
 
Cosmetic dermatology washington dc
Cosmetic dermatology washington dcCosmetic dermatology washington dc
Cosmetic dermatology washington dc
 
OPT Runner
OPT Runner OPT Runner
OPT Runner
 
Pregón de navidad. texto
Pregón de navidad. textoPregón de navidad. texto
Pregón de navidad. texto
 
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)
How To Create An Integrated Annual Campaign (With A 'No-To-Low' Budget)
 

Ähnlich wie White Paper: Perforce Administration Optimization, Scalability, Availability and Reliability

[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning InfrastructurePerforce
 
[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning InfrastructurePerforce
 
Container orchestration from theory to practice
Container orchestration from theory to practiceContainer orchestration from theory to practice
Container orchestration from theory to practiceDocker, Inc.
 
Linux Server Deep Dives (DrupalCon Amsterdam)
Linux Server Deep Dives (DrupalCon Amsterdam)Linux Server Deep Dives (DrupalCon Amsterdam)
Linux Server Deep Dives (DrupalCon Amsterdam)Amin Astaneh
 
Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeDocker, Inc.
 
OpenPOWER Application Optimization
OpenPOWER Application Optimization OpenPOWER Application Optimization
OpenPOWER Application Optimization Ganesan Narayanasamy
 
Using R on High Performance Computers
Using R on High Performance ComputersUsing R on High Performance Computers
Using R on High Performance ComputersDave Hiltbrand
 
Transferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersTransferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersPerforce
 
Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce
 
White Paper: Scaling Servers and Storage for Film Assets
White Paper: Scaling Servers and Storage for Film AssetsWhite Paper: Scaling Servers and Storage for Film Assets
White Paper: Scaling Servers and Storage for Film AssetsPerforce
 
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU:  Deep Dive into Building Streaming Applications with Apache PulsarOSS EU:  Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU: Deep Dive into Building Streaming Applications with Apache PulsarTimothy Spann
 
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudPHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudSalesforce Developers
 
Genomics Is Not Special: Towards Data Intensive Biology
Genomics Is Not Special: Towards Data Intensive BiologyGenomics Is Not Special: Towards Data Intensive Biology
Genomics Is Not Special: Towards Data Intensive BiologyUri Laserson
 
Open erp on ubuntu
Open erp on ubuntuOpen erp on ubuntu
Open erp on ubuntuIker Coranti
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDropsolid
 
[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate TransportsPerforce
 
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
 
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE
 

Ähnlich wie White Paper: Perforce Administration Optimization, Scalability, Availability and Reliability (20)

[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure
 
[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure[MathWorks] Versioning Infrastructure
[MathWorks] Versioning Infrastructure
 
Container orchestration from theory to practice
Container orchestration from theory to practiceContainer orchestration from theory to practice
Container orchestration from theory to practice
 
Linux Server Deep Dives (DrupalCon Amsterdam)
Linux Server Deep Dives (DrupalCon Amsterdam)Linux Server Deep Dives (DrupalCon Amsterdam)
Linux Server Deep Dives (DrupalCon Amsterdam)
 
Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to Practice
 
Railsconf
RailsconfRailsconf
Railsconf
 
OpenPOWER Application Optimization
OpenPOWER Application Optimization OpenPOWER Application Optimization
OpenPOWER Application Optimization
 
Using R on High Performance Computers
Using R on High Performance ComputersUsing R on High Performance Computers
Using R on High Performance Computers
 
Transferring Changes Between Perforce Servers
Transferring Changes Between Perforce ServersTransferring Changes Between Perforce Servers
Transferring Changes Between Perforce Servers
 
Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and Reliability
 
White Paper: Scaling Servers and Storage for Film Assets
White Paper: Scaling Servers and Storage for Film AssetsWhite Paper: Scaling Servers and Storage for Film Assets
White Paper: Scaling Servers and Storage for Film Assets
 
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU:  Deep Dive into Building Streaming Applications with Apache PulsarOSS EU:  Deep Dive into Building Streaming Applications with Apache Pulsar
OSS EU: Deep Dive into Building Streaming Applications with Apache Pulsar
 
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the CloudPHP on Heroku: Deploying and Scaling Apps in the Cloud
PHP on Heroku: Deploying and Scaling Apps in the Cloud
 
Genomics Is Not Special: Towards Data Intensive Biology
Genomics Is Not Special: Towards Data Intensive BiologyGenomics Is Not Special: Towards Data Intensive Biology
Genomics Is Not Special: Towards Data Intensive Biology
 
Open erp on ubuntu
Open erp on ubuntuOpen erp on ubuntu
Open erp on ubuntu
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
 
[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports[Lucas Films] Using a Perforce Proxy with Alternate Transports
[Lucas Films] Using a Perforce Proxy with Alternate Transports
 
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...
 
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 

Kürzlich hochgeladen (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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

White Paper: Perforce Administration Optimization, Scalability, Availability and Reliability

  • 1. Perf e Ad nist ion P force dmi trati Optimiz O zation Scala n, ability Availability and y, y Relliabilit ty Michael Mirman M M Pe erforce Administ A trator MathWor Inc. M rks,
  • 2. Abstract Perforce Software Configuration Management system is designed to be scalable. Necessary infrastructure includes such maintenance tasks as regular checkpointing, rolling journals, testing disaster recovery plans, and load balancing. As our Perforce user base grows, we are striving to minimize downtime and provide reasonable response time, while running more and more maintenance tasks. We hope our experience will help other Perforce administrators plan their growing systems. Perforce at MathWorks Company’’s source code is company’’s jewels. Perforce is the system that protects it. As of this writing, MathWorks has one main production server, about 500 users, and several million archive files. We deploy almost all possible triggers, several daemons, and partially mirror our own bug database into Perforce. In addition to P4, P4V, P4Perl, P4Java, Emacs, and P4Eclipse interfaces, we support a modified version of P4DB1. 1 There are several versions of P4DB publicly available. Our version is close to the version at http://www.releng.com/downloads3/index.html
  • 3. Archite ecture Ov verview We use multiple proxie p4broker, and multiple replicas for d m es, e different purposes. We’’ll d describe the details lat ter. proxy1 proxy2 pr roxy3 p4b broker (H/A VM) V p4d (replic 2; ca p4d (replica 1) p4d (master) p warm stanndby) Using proxies p methodology2 to route senders We install proxies at different locations, and we use the anyc routing m cast pologically nearest node us the same destination . to the top sing e 2 General ideas of anycas can be found on Wikipedia (http://en.wi kipedia.org/wi st d a iki/Anycast), and the details can be found at http://www. a .cisco.com/en/ /US/docs/ios/s solutions_docss/ip_multicast//White_papers s/anycast.htmll
  • 4. This means that all our Perforce users use the same default P4PORT=perforce:1666. However, depending on which computer user issues perforce commands on, the requests are routed to a specific proxy. For example, we currently have three proxies at different geographic locations. When user issues a request to perforce:1666, the proxy is chosen based on the location of the user. In addition to providing cache for syncing files, using anycast with proxies gives us the ability to fail over. Anycast routing is supported by a few system processes, started at the boot time. If those processes go down, another host would automatically take over routing within seconds. We also have a watchdog cron that detects if a proxy process goes down but anycast processes keep running. In that case, the cron script can be configured either to bring down anycast processes to let another proxy host to take over routing, or (our current choice) send email to the administrators for an immediate action. Every proxy host is running a command like this: /local/perforce/bin/p4p -p 1666 -t host:port -r /local/perforce/1666 -d -L /local/perforce/logs/p4p.1666.log where host:port identifies the location of a p4broker instance (see below). Recommendation: Consider using anycast if you have multiple proxies. Replication How it’’s done (2009.2 solution) When the replicate command became available, we implemented the following procedure. Say, the master server is perforce 00, and perforce 01 is to be the host for our replica. Then, on perforce 01 we would run p4 -p perforce-00:1666 replicate -s SOMEDIR/replica.state -J SOMEDIR/journal SOMEDIR/admin.support/p4admin_replicate -port 1666 -srchost perforce-01 -srctop DATADIR p4admin_replicate is our script to replicate data synchronously3. This was implemented before the ““p4 pull”” command became available, and this method is still used for some replicas. 3 The script is available in Perforce public depot at http://public.perforce.com:8080/@md=d&cd=//&cdf=//guest/michael_mirman/conference2011/p4admin_replica te&c=uLH@//guest/michael_mirman/conference2011/p4admin_replicate?ac=22
  • 5. The p4admin_replicate script reads journal records from STDIN and passes them to p4d –r root –f –jrc – References: http://www.perforce.com/perforce/doc.current/manuals/p4sag/10_replication.html and http://www.perforce.com/perforce/doc.current/manuals/p4sag/aa_p4d.html#1043673 Some features of this script: Only certain journal records trigger the need to copy data. For example, we ignore db.rev[cdhp]x records because there are no associated file changes. Directories are grouped for efficiency, and we use the Perl module Parallel::ForkManager4 to parallelize rsync of selected directories. We use this rsync command: rsync -av --delete “$srchost:$srctop/$dir_nospace/” “$dir_nospace/” Note the following: We recurse the directory. It may be an overkill, but ““smarter”” selection is error prone; We preserve modification times of the files; The verbose mode allows introspection in case ““p4 verify”” finds missing revisions; We have to quote arguments in case if there are spaces; We use delete because subdirectories and files related to deleted shelved changes as well as in a rare case of obliterate get removed in the source and we need to mirror it. Result: the average replica age is typically 4 5 minutes, including data. However, certain conditions may greatly affect the replica age. For example, maintenance tasks may change using the filer cache, or copying a top depot directory may take a long time. In these cases the replica age may jump significantly. Work in progress –– 2010.2 solution Perforce 2010.2 release has a new command ““p4 pull”” and several configurables to help the replication. For the full replica we replaced the replicate command described above with configurations like this: -> p4 configure show Replica Replica: monitor = 1 Replica: server = 1 Replica: startup.1 = pull -i 2 -J /perforce/1666/journal Replica: startup.2 = pull -i 1 -u Replica: startup.3 = pull -i 1 -u Replica: startup.4 = pull -i 1 –u 4 See http://search.cpan.org/~dlux/Parallel ForkManager 0.7.5/ForkManager.pm
  • 6. We run p4d with the ––J option. Therefore, we need to use the ––J option in the first pull command, which replicates the journal records. Note that the ––J option is available in p4d Build 284433 and later. The number of ““pull ––u”” commands depends on the amount of load on the server. We use ““p4 pull ––l”” to monitor pending file transfers to see whether we need to add more pull commands in the configuration. We also created a new meta data only replica with the only purpose to create checkpoints every night. The configuration of that replica is: -> p4 configure show Replica2 Replica2: monitor = 1 Replica2: server = 1 Replica2: startup.1 = pull -i 4 -J /perforce/1666/journal Load Balance We monitor the time users hold different locks as Google suggested5, although we do not terminate processes automatically. In fact, we mostly only collect the information about the locks and command timing for later introspection. Recommendation: Don’’t delay deploying monitoring until you notice a slowdown. Start collecting the data about what might cause a slow down as early as possible. This monitoring helps us identify users and workflows putting significant load on the system. It also helps us determine whether a remote office may benefit from deploying a new proxy. Many continuous integration build systems submit at least a few commands every so often. Depending on the number of build systems and the time interval they use, the load may become noticeable. For example, we have found out that one particular group, which deployed a build system based on TeamCity submits approximately 120,000 ““changes ––m 1 //……”” commands every day. That’’s almost three commands every two seconds, and from only one small group. We deployed replica servers (we’’ll talk about the details later), installed p4broker, and started rerouting build systems to replicas. Recommendation: Using replicas is a good way of reducing the load on the main server. 5 http://www.perforce.com/perforce/conferences/us/2007/presentations/DBloch_Life_on_the_Edge2007_paper.p df
  • 7. Using p4broker We use p4broker for several reasons. First, p4broker helps distribute the load, routing certain read only requests to replicas. Second, p4broker can be used to provide read only access to Perforce while the master server is under maintenance. To accomplish these goals, we have a watchdog cron job that runs every five minutes and checks the availability of all the servers as well as the replica age. This job updates the broker configuration file as needed. P4broker does not have to be restarted. It automatically picks up the change in the configuration file. If all the servers are up and running, and the replica age is within the set boundaries, the configuration file redirects all p4db (web) and build systems queries to a replica. If the replica age reaches the set threshold, the routing to the replicas is removed from the broker configuration file and email is sent to the administrators. If the main server is down, all read only requests are redirected to a replica, and other user commands will result in the message that the server is in maintenance mode. Offline Checkpointing As of this writing, creating a new checkpoint at MathWorks takes an hour and a half. Even when it took half of this time, regardless of the time of the day when we ran it, some users would complain that their commands would hang. This is typical for companies where people work long hours or have offices around the world. Our first solution used NetApp filer snapshots6. When we deployed replicas we implemented a simpler solution: creating a checkpoint on one of the replicas. On the replica, we create a new checkpoint by the command p4d –r root –z –jd path Our replicas run with the ““ J off”” option, which turns off journals. This way we don’’t have to worry about truncating journals on the replicas. 6 Available in the Perforce public depot at http://public.perforce.com:8080/@md=d&cd=//&cdf=//guest/michael_mirman/snap_checkpoint/snap_checkpoin t&pat=//guest/michael_mirman/...&c=Kcu@//guest/michael_mirman/snap_checkpoint/snap_checkpoint?ac=22
  • 8. On the master server we roll journal every 30 minutes (journals are not compressed because replication does not support compressed journals). All checkpoints from the replica and journals from the master are copied to a backup filer, from which everything gets copied on tape once a day. There is no synchronization between rolling journals on the master, replication process on the replica, and creating checkpoints on the replica. This gives us flexibility in when we do different maintenance tasks, but poses a challenge (more below) when we need to determine what journals we have to replay to rebuild the database. Disaster Recovery Plan (Preparation) At the proxy level we have redundant machines, where one takes over if another goes down. At the p4broker level, the machine is an H/A virtual machine, and it gets rebooted if needed. A copy of the archive data on the backup file server is maintained during the day by rsync. A checkpoint is created every night and copied to the backup file server. Every time when the master rolls journal, the latest journal also gets copied to the backup file server. Checkpoints, journals, and the archive get copied on tape once in 24 hours. What is kept on the backup file server (and tape) is sufficient to restore the database to the last roll of the master journal, which is no more than 30 minutes. Currently we do not have redundant servers at different locations and we don’’t fail over automatically. Disaster Recovery Plan (Execution) To restore the database, we run a script, which first finds the latest checkpoint and uses it to create db files from scratch. Then, the script needs to play sequentially all the journals from a certain point in time. Due to the mentioned independence of replication, rolling journals and creating checkpoints, using journal counters causes a race condition, sometimes leading to not replaying some journal records, which in turn causes inconsistency errors in the ““p4d ––xx”” report. Instead, to determine which journals to replay we use the @ex@ records7 in the checkpoint. The first @ex@ record in the checkpoint contains the time when we started creating this checkpoint. Starting with the journal determined by the journal counter, walking back in time, we need to find the first journal that has an @ex@ record with the time preceding or equal the time from the first checkpoint record. 7 The described implementation had been done before the new @nx@ type was introduced in 2010.2. See the Release Notes (http://www.perforce.com/perforce/r10.2/user/relnotes.txt) for the description of the @nx@ records.
  • 9. Example of restoring server. Created on a replica server: -r--r--r-- 1 perforce users 3656847585 Nov 28 18:59 perforce-01-blr.1666.ckp.42909.gz Created on the master: -r--r--r-- 1 perforce users 14967 Nov 28 17:52 journal.jnl.42906 -r--r--r-- 1 perforce users 34766 Nov 28 18:22 journal.jnl.42907 -r--r--r-- 1 perforce users 12319 Nov 28 18:52 journal.jnl.42908 -r--r--r-- 1 perforce users 1188176 Nov 28 19:22 journal.jnl.42909 -r--r--r-- 1 perforce users 44062 Nov 28 19:52 journal.jnl.42910 -r--r--r-- 1 perforce users 51032 Nov 28 20:22 journal.jnl.42911 First, all old database files are removed and recreated by p4d –r root –z –jr path/perforce-01-blr.1666.ckp.42909.gz Now we’’ll find out what journals we should replay. Find the time from the first @ex@ record in the checkpoint file: my $ex_time_ckp; if ( open my $PIPE, '-|', "/bin/zcat $ckp" ) { while ( <$PIPE> ) { if ( /^@ex@ d+ (d+)/ ) { $ex_time_ckp = $1; last; } } } else { warn "WARNING: Cannot open pipe to zcat: $!n"; } From the checkpoint file name $counter=42909. Collect all the available journals and start walking back starting with 42909 looking for the @ex@ record with time <= time in the previous step: my @all_journals = glob("$backups/journal/journal.jnl.*"); my @jnl_nums = map { /.(d+)$/ ? $1 : () } @all_journals; READ_JOURNAL: # journals are sorted from the most recent to the oldest for my $n ( sort { $b <=> $a } grep { $_ <= $counter } @jnl_nums ) { my $jnl_file = "$backups/journal/journal.jnl.$n"; open my $JNL, '<', $jnl_file or do { print "Unexpected error opening file $jnl_file: $!n"; next; }; while ( <$JNL> ) { my ($time) = /^@ex@ d+ (d+)/ or next; print "Found in $jnl_file @ex@ with time=", scalar(localtime $time), "n";
  • 10. if ( $time <= $ex_time_ckp ) { $new_counter = $n; last READ_JOURNAL; } else { next READ_JOURNAL; } } } Now $new_counter contains the journal number to start replaying. Here is the snippet from the log: >> We got this time from /nasbackups/perforce/checkpoint/perforce-01- blr.1666.ckp.42909.gz: Sun Nov 28 18:30:22 2010 >> Found in /nasbackups/perforce/journal/journal.jnl.42909 @ex@ with time=Sun Nov 28 18:52:01 2010 >> Found in /nasbackups/perforce/journal/journal.jnl.42908 @ex@ with time=Sun Nov 28 18:22:01 2010 Depending how frequently the master rolls the journal and how much time checkpointing takes, you may have to walk back for more than one journal. Now we can play all the journals sequentially: my $last_replayed; for ( sort { $a <=> $b } grep { $_ >= $counter } @jnl_nums ) { $last_replayed = $_; my $jnl = "$backups/journal/journal.jnl.$last_replayed"; # We'll use -f to overcome benign errors # Journal record replay failed! # This was recommended by Perforce Support. print "Replaying journaln"; system "$p4d -r $dbroot -f -jr $jnl"; } We calculate $last_replayed in case if we restore the database on a replica and have to restart replication after we’’re done restoring the database. In that case, we need to update correctly the replica state file we use in the ––s option of the ““p4 replica”” command. # modify the replica.state file according to the last journal we replayed print "Updating $replica_state:n", "the new counter from which we'll start replicating is $last_replayedn"; open my $STATE, '>', $replica_state or die "Unexpectedly, cannot rewrite $replica_state: $!"; print $STATE "$last_replayedn"; close $STATE;
  • 11. Testing We have two stacks: production and test, which we keep very similar to each other. Every server host runs monitoring jobs. We also use Nagios8 to monitor certain processes, as well as the CPU load and disk space usage. Test servers are used for daily testing of the restore procedure using the latest checkpoint and journals. This is followed by full verification (““p4 verify””, ““p4d ––xv””, ““p4d ––xx””), although during the week ““p4 verify”” is done only against head revisions. Restore procedures on two different test servers are staggered. This means that they may use the same checkpoint, but they use a different number of journals. Any problem with the checkpoint usually becomes known within 24 hours. Maintenance Procedures on the Production Stack Master Replica 1 (full) Replica 2 Replica 3 (full) (meta data only) Review Daemon Replication with Create daily Mirroring some Perforce Mirroring some synchronous data checkpoints and information to an SQL db Perforce information update copy them to Replication with to an SQL db Watchdog to create backup storage synchronous data update Partial mirroring of broker configuration Database for the replica itself and our own bug file verification backup storage database into Database verification (p4d ––xx and ––xv) Database verification Perforce (p4d ––xx and ––xv) (p4d ––xx and ––xv) Roll journal every 30 ““p4 verify”” –– during ““p4 verify”” –– during the minutes and copy the week: only head week: only head journals to backup revisions; on a revisions; on a weekend –– storage weekend –– full full verification only on Sundays: verification Database verification This replica is a warm (p4d ––xx and p4d ––xv) This replica is used for standby and used for read only queries. periodic controlled fail over. 8 http://www.nagios.org/
  • 12. Fail over Planning We do not have an automatic fail over procedure because we want to assess the situation before acting. Fail over is achieved by changing the broker configuration file and making the standby server the new master. The standby server cannot be contacted directly (protect table makes sure every contact to the server is made through one of the proxies, and there is no proxy for the standby server). We have not started using the read only mode available in 2010.2, but we plan to start using it at least for some replicas. Minimize downtime during upgrade Consider the following sequence of steps to minimize the downtime during a major upgrade: Prepare all binaries (p4d, p4p, p4broker , p4) in the right locations on the servers, so a restart of any of them would start the new version of that executable. Make sure your license files allow your upgrade. Configure p4broker configuration file to redirect all read only access to a replica. All other requests would respond to the user with the message that the server is in the maintenance mode. Wait until the replication process is finished. Stop the master server (p4 admin stop). This typically brings down the replication processes. Alternatively, kill them. Upgrade the master (p4d ––xu) and restart it. Restart p4broker (this is one of the service interrupts). Reconfigure the broker configuration file without using any replicas. Upgrade every replica server (p4d ––xu) and restart replication. Reconfigure the broker configuration file using replicas. Restart proxies (this is another service interrupt). Conclusion Have test servers with identical or very similar architecture. Consider the following options to decrease possible downtime: o Anycast with multiple proxies; o High Availability VM for p4broker;
  • 13. o Maintain a warm standby replica. For load balancing: o Move some maintenance procedures to replica servers (VMs can be adequate); o Create checkpoints on a replica server (don’’t forget to test the restore regularly); o Use p4broker to redirect some load to a replica server. Replicate data synchronously on replicas that need them. ““Set it and forget it”” Administration is easy when you have automated most functions.