kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			Update snowflake config, allow custom datacenter/worker ids
							rodzic
							
								
									134eb6324e
								
							
						
					
					
						commit
						806e210f13
					
				| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
 | 
			
		||||
namespace App\Services\Account;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\Redis;
 | 
			
		||||
 | 
			
		||||
class AccountStatService
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +32,7 @@ class AccountStatService
 | 
			
		|||
    {
 | 
			
		||||
        return Redis::zrangebyscore(
 | 
			
		||||
            self::REFRESH_CACHE_KEY,
 | 
			
		||||
            '(' . $lastId,
 | 
			
		||||
            '('.$lastId,
 | 
			
		||||
            '+inf',
 | 
			
		||||
            ['limit' => [0, $count]]
 | 
			
		||||
        );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,45 +2,50 @@
 | 
			
		|||
 | 
			
		||||
namespace App\Services;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Carbon;
 | 
			
		||||
use Cache;
 | 
			
		||||
use Illuminate\Support\Carbon;
 | 
			
		||||
 | 
			
		||||
class SnowflakeService {
 | 
			
		||||
class SnowflakeService
 | 
			
		||||
{
 | 
			
		||||
    public static function byDate(?Carbon $ts = null)
 | 
			
		||||
    {
 | 
			
		||||
        if ($ts instanceof Carbon) {
 | 
			
		||||
            $ts = now()->parse($ts)->timestamp;
 | 
			
		||||
        } else {
 | 
			
		||||
            return self::next();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public static function byDate(Carbon $ts = null)
 | 
			
		||||
	{
 | 
			
		||||
		if($ts instanceOf Carbon) {
 | 
			
		||||
			$ts = now()->parse($ts)->timestamp;
 | 
			
		||||
		} else {
 | 
			
		||||
			return self::next();
 | 
			
		||||
		}
 | 
			
		||||
        $datacenterId = config('snowflake.datacenter_id') ?? random_int(1, 31);
 | 
			
		||||
        $workerId = config('snowflake.worker_id') ?? random_int(1, 31);
 | 
			
		||||
 | 
			
		||||
		return ((round($ts * 1000) - 1549756800000) << 22)
 | 
			
		||||
		| (random_int(1,31) << 17)
 | 
			
		||||
		| (random_int(1,31) << 12)
 | 
			
		||||
		| 0;
 | 
			
		||||
	}
 | 
			
		||||
        return ((round($ts * 1000) - 1549756800000) << 22)
 | 
			
		||||
        | ($datacenterId << 17)
 | 
			
		||||
        | ($workerId << 12)
 | 
			
		||||
        | 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public static function next()
 | 
			
		||||
	{
 | 
			
		||||
		$seq = Cache::get('snowflake:seq');
 | 
			
		||||
    public static function next()
 | 
			
		||||
    {
 | 
			
		||||
        $seq = Cache::get('snowflake:seq');
 | 
			
		||||
 | 
			
		||||
		if(!$seq) {
 | 
			
		||||
			Cache::put('snowflake:seq', 1);
 | 
			
		||||
			$seq = 1;
 | 
			
		||||
		} else {
 | 
			
		||||
			Cache::increment('snowflake:seq');
 | 
			
		||||
		}
 | 
			
		||||
        if (! $seq) {
 | 
			
		||||
            Cache::put('snowflake:seq', 1);
 | 
			
		||||
            $seq = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            Cache::increment('snowflake:seq');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		if($seq >= 4095) {
 | 
			
		||||
			Cache::put('snowflake:seq', 0);
 | 
			
		||||
			$seq = 0;
 | 
			
		||||
		}
 | 
			
		||||
        if ($seq >= 4095) {
 | 
			
		||||
            Cache::put('snowflake:seq', 0);
 | 
			
		||||
            $seq = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		return ((round(microtime(true) * 1000) - 1549756800000) << 22)
 | 
			
		||||
		| (random_int(1,31) << 17)
 | 
			
		||||
		| (random_int(1,31) << 12)
 | 
			
		||||
		| $seq;
 | 
			
		||||
	}
 | 
			
		||||
        $datacenterId = config('snowflake.datacenter_id') ?? random_int(1, 31);
 | 
			
		||||
        $workerId = config('snowflake.worker_id') ?? random_int(1, 31);
 | 
			
		||||
 | 
			
		||||
        return ((round(microtime(true) * 1000) - 1549756800000) << 22)
 | 
			
		||||
        | ($datacenterId << 17)
 | 
			
		||||
        | ($workerId << 12)
 | 
			
		||||
        | $seq;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
<?php
 | 
			
		||||
return [
 | 
			
		||||
    'epoch' => 1549756800000,
 | 
			
		||||
    'worker_id' => 1,
 | 
			
		||||
    'datacenter_id' => 1,
 | 
			
		||||
    'worker_id' => env('SNOWFLAKE_WORKER_ID', null),
 | 
			
		||||
    'datacenter_id' => env('SNOWFLAKE_DATACENTER_ID', null),
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue