]> git.openstreetmap.org Git - chef.git/blob - cookbooks/tile/templates/default/replicate.erb
24e41819846c13fccdb89bce29739e45164cf8a1
[chef.git] / cookbooks / tile / templates / default / replicate.erb
1 #!/bin/bash
2
3 # DO NOT EDIT - This file is being maintained by Chef
4
5 # Initialize timestamp with day of latest planet dump
6 # Setting to midnight ensures we get conistent data after first run
7 # osmosis --read-replication-interval-init
8
9 # Define exit handler
10 function onexit {
11     [ -f state-prev.txt ] && mv state-prev.txt state.txt
12 }
13
14 # Send output to the log
15 exec > /var/log/tile/replicate.log 2>&1
16
17 # Change to the replication state directory
18 cd /var/lib/replicate
19
20 # Install exit handler
21 trap onexit EXIT
22
23 # Read in initial state
24 . state.txt
25
26 # Loop indefinitely
27 while true
28 do
29     # Work out the name of the next file
30     file="changes-${sequenceNumber}.osm.gz"
31
32     # Save state file so we can rollback if an error occurs
33     cp state.txt state-prev.txt
34
35     # Fetch the next set of changes
36     osmosis --read-replication-interval --simc --write-xml-change file="${file}" compressionMethod="gzip"
37
38     # Check for errors
39     if [ $? -eq 0 ]
40     then
41         # Enable exit on error
42         set -e
43
44         # Remember the previous sequence number
45         prevSequenceNumber=$sequenceNumber
46
47         # Read in new state
48         . state.txt
49
50         # Did we get any new data?
51         if [ "${sequenceNumber}" == "${prevSequenceNumber}" ]
52         then
53             # Log the lack of data
54             echo "No new data available. Sleeping..."
55
56             # Remove file, it will just be an empty changeset
57             rm ${file}
58
59             # No need to rollback now
60             rm state-prev.txt
61
62             # Sleep for a short while
63             sleep 30
64         else
65             # Log the new data
66             echo "Fetched new data from ${prevSequenceNumber} to ${sequenceNumber} into ${file}"
67
68             # Apply the changes to the database
69 <% if node[:tile][:node_file] -%>
70             osm2pgsql --slim --append --flat-nodes=<%= node[:tile][:node_file] %> ${file}
71 <% else -%>
72             osm2pgsql --slim --append ${file}
73 <% end -%>
74
75             # No need to rollback now
76             rm state-prev.txt
77
78             # Expire tiles which are touched by the changes
79             sudo -u www-data /usr/local/bin/expire-tiles ${file} > /dev/null 2>&1 &
80         fi
81
82         # Delete old downloads
83         find . -name 'changes-*.gz' -mmin +300 -exec rm -f {} \;
84
85         # Disable exit on error
86         set +e
87     else
88         # Log our failure to fetch changes
89         echo "Failed to fetch changes - waiting a few minutes before retry"
90
91         # Wait five minutes and have another go
92         sleep 300
93     fi
94 done