PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 All 504 releases
jetpack / jetpack_vendor / automattic / jetpack-sync / src / class-lock.php

class-lock.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.1, at jetpack_vendor/automattic/jetpack-sync/src/class-lock.php

78 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Lock class.
4 *
5 * @package automattic/jetpack-sync
6 */
7
8 namespace Automattic\Jetpack\Sync;
9
10 /**
11 * Lock class
12 */
13 class Lock {
14 /**
15 * Prefix of the blog lock transient.
16 *
17 * @access public
18 *
19 * @var string
20 */
21 const LOCK_PREFIX = 'jp_sync_lock_';
22
23 /**
24 * Default Lifetime of the lock.
25 * This is the expiration value as such we are setting it high to handle cases where there are
26 * long running requests. Short expiration value leads to concurrent requests and performance issues.
27 *
28 * @access public
29 *
30 * @var int
31 */
32 const LOCK_TRANSIENT_EXPIRY = 180; // Seconds.
33
34 /**
35 * Attempt to lock.
36 *
37 * @access public
38 *
39 * @param string $name lock name.
40 * @param int $expiry lock duration in seconds.
41 *
42 * @return boolean True if succeeded, false otherwise.
43 */
44 public function attempt( $name, $expiry = self::LOCK_TRANSIENT_EXPIRY ) {
45 $lock_name = self::LOCK_PREFIX . $name;
46 $locked_time = get_option( $lock_name );
47
48 if ( $locked_time ) {
49 // If expired update to false but don't send. Send will occurr in new request to avoid race conditions.
50 if ( microtime( true ) > $locked_time ) {
51 update_option( $lock_name, false, false );
52 }
53 return false;
54 }
55
56 $locked_time = microtime( true ) + $expiry;
57 update_option( $lock_name, $locked_time, false );
58 return $locked_time;
59 }
60
61 /**
62 * Remove the lock.
63 *
64 * @access public
65 *
66 * @param string $name lock name.
67 * @param bool|float $lock_expiration lock expiration.
68 */
69 public function remove( $name, $lock_expiration = false ) {
70 $lock_name = self::LOCK_PREFIX . $name;
71
72 // Only remove lock if current value matches our lock.
73 if ( true === $lock_expiration || (string) get_option( $lock_name ) === (string) $lock_expiration ) {
74 update_option( $lock_name, false, false );
75 }
76 }
77 }
78