PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 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 All 508 releases
← All changes | jetpack_vendor/automattic/jetpack-sync/src/class-lock.php +77 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,77 @@
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 +}