Rename everything to use specification instead of size

This commit is contained in:
Bradley Schofield
2024-07-31 20:27:32 +09:00
parent 198a7973c7
commit 2060d3f09c
21 changed files with 84 additions and 81 deletions
+1 -1
View File
@@ -3057,7 +3057,7 @@ $projectCollections = array_merge([
],
[
'array' => false,
'$id' => ID::custom('size'),
'$id' => ID::custom('specification'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => 128,
+3 -3
View File
@@ -525,9 +525,9 @@ return [
'code' => 408,
],
Exception::FUNCTION_INVALID_RUNTIME_SIZE => [
'name' => Exception::FUNCTION_INVALID_RUNTIME_SIZE,
'description' => "The requested runtime size is either unsupported or isn't included in your plan. If your running self-hosted check the value of the _APP_FUNCTIONS_MEMORY and _APP_FUNCTIONS_CPUS environment variable.",
Exception::FUNCTION_INVALID_RUNTIME_SPECIFICATION => [
'name' => Exception::FUNCTION_INVALID_RUNTIME_SPECIFICATION,
'description' => "The requested runtime specification is either unsupported or isn't included in your plan. If your running community edition check the value of the _APP_FUNCTIONS_MEMORY and _APP_FUNCTIONS_CPUS environment variable.",
'code' => 400,
],
+1 -1
View File
@@ -1,6 +1,6 @@
<?php
enum Sizes: string
enum Specifications: string
{
case S_1VCPU_512MB = 's-1vcpu-512mb';
case S_1VCPU_1GB = 's-1vcpu-1gb';
@@ -3,22 +3,22 @@
require_once __DIR__ . '/enum.php';
return [
Sizes::S_1VCPU_512MB->value => [
Specifications::S_1VCPU_512MB->value => [
'slug' => 's-1vcpu-512mb',
'memory' => 512,
'cpus' => 1
],
Sizes::S_1VCPU_1GB->value => [
Specifications::S_1VCPU_1GB->value => [
'slug' => 's-1vcpu-1gb',
'memory' => 1024,
'cpus' => 1
],
Sizes::S_2VCPU_2GB->value => [
Specifications::S_2VCPU_2GB->value => [
'slug' => 's-2vcpu-2gb',
'memory' => 2048,
'cpus' => 2
],
Sizes::S_2VCPU_4GB->value => [
Specifications::S_2VCPU_4GB->value => [
'slug' => 's-2vcpu-4gb',
'memory' => 4096,
'cpus' => 2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+36 -33
View File
@@ -10,7 +10,7 @@ use Appwrite\Event\Usage;
use Appwrite\Event\Validator\FunctionEvent;
use Appwrite\Extend\Exception;
use Appwrite\Extend\Exception as AppwriteException;
use Appwrite\Functions\Validator\RuntimeSize;
use Appwrite\Functions\Validator\RuntimeSpecification;
use Appwrite\Messaging\Adapter\Realtime;
use Appwrite\Task\Validator\Cron;
use Appwrite\Utopia\Database\Validator\CustomId;
@@ -161,7 +161,7 @@ App::post('/v1/functions')
->param('templateOwner', '', new Text(128, 0), 'The name of the owner of the template.', true)
->param('templateRootDirectory', '', new Text(128, 0), 'Path to function code in the template repo.', true)
->param('templateBranch', '', new Text(128, 0), 'Production branch for the repo linked to the function template.', true)
->param('size', 's-1vcpu-512mb', fn (array $plan) => new RuntimeSize($plan), 'Runtime size for the function and builds.', true, ['plan'])
->param('specification', 's-1vcpu-512mb', fn (array $plan) => new RuntimeSpecification($plan), 'Runtime specification for the function and builds.', true, ['plan'])
->inject('request')
->inject('response')
->inject('dbForProject')
@@ -171,7 +171,7 @@ App::post('/v1/functions')
->inject('queueForBuilds')
->inject('dbForConsole')
->inject('gitHub')
->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, string $installationId, string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $templateRepository, string $templateOwner, string $templateRootDirectory, string $templateBranch, string $size, Request $request, Response $response, Database $dbForProject, Document $project, Document $user, Event $queueForEvents, Build $queueForBuilds, Database $dbForConsole, GitHub $github) use ($redeployVcs) {
->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, string $installationId, string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $templateRepository, string $templateOwner, string $templateRootDirectory, string $templateBranch, string $specification, Request $request, Response $response, Database $dbForProject, Document $project, Document $user, Event $queueForEvents, Build $queueForBuilds, Database $dbForConsole, GitHub $github) use ($redeployVcs) {
$functionId = ($functionId == 'unique()') ? ID::unique() : $functionId;
$allowList = \array_filter(\explode(',', System::getEnv('_APP_FUNCTIONS_RUNTIMES', '')));
@@ -204,10 +204,10 @@ App::post('/v1/functions')
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'When connecting to VCS (Version Control System), you need to provide "installationId" and "providerBranch".');
}
$spec = Config::getParam('runtime-sizes')[$size] ?? [];
$spec = Config::getParam('runtime-specifications')[$specification] ?? [];
if (empty($spec) || empty($spec['memory']) || empty($spec['cpus'])) {
throw new Exception(Exception::FUNCTION_INVALID_RUNTIME_SIZE);
throw new Exception(Exception::FUNCTION_INVALID_RUNTIME_SPECIFICATION);
}
$function = $dbForProject->createDocument('functions', new Document([
@@ -237,7 +237,7 @@ App::post('/v1/functions')
'providerBranch' => $providerBranch,
'providerRootDirectory' => $providerRootDirectory,
'providerSilentMode' => $providerSilentMode,
'size' => $size
'specification' => $specification
]));
$schedule = Authorization::skip(
@@ -451,55 +451,55 @@ App::get('/v1/functions/runtimes')
]), Response::MODEL_RUNTIME_LIST);
});
App::get('/v1/functions/sizes')
App::get('/v1/functions/specifications')
->groups(['api', 'functions'])
->desc('Get available function runtime sizes')
->desc('Get available function runtime specifications')
->label('scope', 'functions.read')
->label('sdk.auth', [APP_AUTH_TYPE_KEY])
->label('sdk.namespace', 'functions')
->label('sdk.method', 'getSizes')
->label('sdk.description', '/docs/references/functions/get-sizes.md')
->label('sdk.method', 'getSpecifications')
->label('sdk.description', '/docs/references/functions/get-specifications.md')
->label('sdk.response.code', Response::STATUS_CODE_OK)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_SIZE_LIST)
->label('sdk.response.model', Response::MODEL_SPECIFICATION_LIST)
->inject('response')
->inject('plan')
->action(function (Response $response, array $plan) {
$allRuntimesSizes = Config::getParam('runtime-sizes');
$allRuntimeSpecs = Config::getParam('runtime-specifications', []);
$plans = Config::getParam('plans', []);
$runtimeSizes = [];
foreach ($allRuntimesSizes as $key => $size) {
$runtimeSpecs = [];
foreach ($allRuntimeSpecs as $key => $spec) {
// Don't perform any billing calculations for CE
if (empty($plans)) {
$size['enabled'] = true;
$spec['enabled'] = true;
} else {
// Show plan names on sizes
// Show plan names on specs
foreach ($plans as $billingPlan) {
if (key_exists('runtimeSizes', $billingPlan) && in_array($key, $billingPlan['runtimeSizes'])) {
if (key_exists('runtimeSpecifications', $billingPlan) && in_array($key, $billingPlan['runtimeSpecifications'])) {
if ($billingPlan['$id'] !== 'tier-0') {
$size['plan'] = $billingPlan['name'];
$spec['plan'] = $billingPlan['name'];
}
break;
}
}
// Check if the size is enabled for the current plan
if (key_exists('runtimeSizes', $plan)) {
$size['enabled'] = in_array($key, $plan['runtimeSizes']);
// Check if the spec is enabled for the current plan
if (key_exists('runtimeSpecifications', $plan)) {
$spec['enabled'] = in_array($key, $plan['runtimeSpecifications']);
}
}
// Only add sizes that are within the limits set by environment variables
if ($size['cpus'] <= System::getEnv('_APP_FUNCTIONS_CPUS', 1) && $size['memory'] <= System::getEnv('_APP_FUNCTIONS_MEMORY', 512)) {
$runtimeSizes[] = $size;
// Only add specs that are within the limits set by environment variables
if ($spec['cpus'] <= System::getEnv('_APP_FUNCTIONS_CPUS', 1) && $spec['memory'] <= System::getEnv('_APP_FUNCTIONS_MEMORY', 512)) {
$runtimeSpecs[] = $spec;
}
}
$response->dynamic(new Document([
'sizes' => $runtimeSizes,
]), Response::MODEL_SIZE_LIST);
'specifications' => $runtimeSpecs,
]), Response::MODEL_SPECIFICATION_LIST);
});
App::get('/v1/functions/:functionId')
@@ -759,7 +759,7 @@ App::put('/v1/functions/:functionId')
->param('providerBranch', '', new Text(128, 0), 'Production branch for the repo linked to the function', true)
->param('providerSilentMode', false, new Boolean(), 'Is the VCS (Version Control System) connection in silent mode for the repo linked to the function? In silent mode, comments will not be made on commits and pull requests.', true)
->param('providerRootDirectory', '', new Text(128, 0), 'Path to function code in the linked repo.', true)
->param('size', 's-1vcpu-512mb', fn (array $plan) => new RuntimeSize($plan), 'Runtime size for the function and builds.', true, ['plan'])
->param('specification', 's-1vcpu-512mb', fn (array $plan) => new RuntimeSpecification($plan), 'Runtime specification for the function and builds.', true, ['plan'])
->inject('request')
->inject('response')
->inject('dbForProject')
@@ -768,7 +768,7 @@ App::put('/v1/functions/:functionId')
->inject('queueForBuilds')
->inject('dbForConsole')
->inject('gitHub')
->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, string $installationId, string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $size, Request $request, Response $response, Database $dbForProject, Document $project, Event $queueForEvents, Build $queueForBuilds, Database $dbForConsole, GitHub $github) use ($redeployVcs) {
->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, string $installationId, string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $specification, Request $request, Response $response, Database $dbForProject, Document $project, Event $queueForEvents, Build $queueForBuilds, Database $dbForConsole, GitHub $github) use ($redeployVcs) {
// TODO: If only branch changes, re-deploy
$function = $dbForProject->getDocument('functions', $functionId);
@@ -867,14 +867,14 @@ App::put('/v1/functions/:functionId')
$live = false;
}
$spec = Config::getParam('runtime-sizes')[$size] ?? [];
$spec = Config::getParam('runtime-specifications')[$specification] ?? [];
if (empty($spec) || empty($spec['memory']) || empty($spec['cpus'])) {
throw new Exception(Exception::FUNCTION_INVALID_RUNTIME_SIZE);
throw new Exception(Exception::FUNCTION_INVALID_RUNTIME_SPECIFICATION);
}
// Enforce Cold Start if spec limits change.
if ($function->getAttribute('size') !== $size && !empty($function->getAttribute('deployment'))) {
if ($function->getAttribute('specification') !== $specification && !empty($function->getAttribute('deployment'))) {
$executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST'));
try {
$executor->deleteRuntime($project->getId(), $function->getAttribute('deployment'));
@@ -903,7 +903,7 @@ App::put('/v1/functions/:functionId')
'providerBranch' => $providerBranch,
'providerRootDirectory' => $providerRootDirectory,
'providerSilentMode' => $providerSilentMode,
'size' => $size,
'specification' => $specification,
'search' => implode(' ', [$functionId, $name, $runtime]),
])));
@@ -1625,7 +1625,10 @@ App::post('/v1/functions/:functionId/executions')
$version = $function->getAttribute('version', 'v2');
$runtimes = Config::getParam($version === 'v2' ? 'runtimes-v2' : 'runtimes', []);
$spec = Config::getParam('runtime-sizes')[$function->getAttribute('size', 's-1vcpu-512mb')];
$spec = Config::getParam('runtime-specifications')[$function->getAttribute('specification', 's-1vcpu-512mb')];
var_dump($function);
var_dump($spec);
$runtime = (isset($runtimes[$function->getAttribute('runtime', '')])) ? $runtimes[$function->getAttribute('runtime', '')] : null;
+1 -1
View File
@@ -130,7 +130,7 @@ function router(App $utopia, Database $dbForConsole, callable $getProjectDB, Swo
$version = $function->getAttribute('version', 'v2');
$runtimes = Config::getParam($version === 'v2' ? 'runtimes-v2' : 'runtimes', []);
$spec = Config::getParam('runtime-sizes')[$function->getAttribute('size', 's-1vcpu-512mb')];
$spec = Config::getParam('runtime-specifications')[$function->getAttribute('specification', 's-1vcpu-512mb')];
$runtime = (isset($runtimes[$function->getAttribute('runtime', '')])) ? $runtimes[$function->getAttribute('runtime', '')] : null;
+1 -1
View File
@@ -291,7 +291,7 @@ Config::load('storage-logos', __DIR__ . '/config/storage/logos.php');
Config::load('storage-mimes', __DIR__ . '/config/storage/mimes.php');
Config::load('storage-inputs', __DIR__ . '/config/storage/inputs.php');
Config::load('storage-outputs', __DIR__ . '/config/storage/outputs.php');
Config::load('runtime-sizes', __DIR__ . '/config/runtimes/sizes.php');
Config::load('runtime-specifications', __DIR__ . '/config/runtimes/specifications.php');
/**
* New DB Filters
-1
View File
@@ -1 +0,0 @@
Get allowed function memory and cpus values on this instance.
@@ -0,0 +1 @@
Get allowed function specifications for this instance.
+1 -1
View File
@@ -154,7 +154,7 @@ class Exception extends \Exception
public const FUNCTION_RUNTIME_UNSUPPORTED = 'function_runtime_unsupported';
public const FUNCTION_ENTRYPOINT_MISSING = 'function_entrypoint_missing';
public const FUNCTION_SYNCHRONOUS_TIMEOUT = 'function_synchronous_timeout';
public const FUNCTION_INVALID_RUNTIME_SIZE = 'function_invalid_runtime_size';
public const FUNCTION_INVALID_RUNTIME_SPECIFICATION = 'function_invalid_runtime_specification';
/** Deployments */
public const DEPLOYMENT_NOT_FOUND = 'deployment_not_found';
@@ -6,7 +6,7 @@ use Utopia\Config\Config;
use Utopia\System\System;
use Utopia\Validator;
class RuntimeSize extends Validator
class RuntimeSpecification extends Validator
{
private array $plan;
@@ -16,31 +16,31 @@ class RuntimeSize extends Validator
}
/**
* Get Allowed Values.
* Get Allowed Specifications.
*
* Get allowed values taking into account the limits set by the environment variables.
* Get allowed specifications taking into account the limits set by the environment variables and the plan.
*
* @return array
*/
public function getAllowedSizes(): array
public function getAllowedSpecifications(): array
{
$sizes = Config::getParam('runtime-sizes', []);
$specifications = Config::getParam('runtime-specifications', []);
$allowedSizes = [];
$allowedSpecficiations = [];
foreach ($sizes as $size => $values) {
foreach ($specifications as $size => $values) {
if ($values['cpus'] <= System::getEnv('_APP_FUNCTIONS_CPUS', 1) && $values['memory'] <= System::getEnv('_APP_FUNCTIONS_MEMORY', 512)) {
if (!empty($this->plan) && key_exists('runtimeSizes', $this->plan)) {
if (!\in_array($size, $this->plan['runtimeSizes'])) {
if (!empty($this->plan) && key_exists('runtimeSpecifications', $this->plan)) {
if (!\in_array($size, $this->plan['runtimeSpecifications'])) {
continue;
}
}
$allowedSizes[] = $size;
$allowedSpecifications[] = $size;
}
}
return $allowedSizes;
return $allowedSpecifications;
}
/**
@@ -52,7 +52,7 @@ class RuntimeSize extends Validator
*/
public function getDescription(): string
{
return 'String must be a valid size value of ' . implode(', ', $this->getAllowedSizes());
return 'String must be a valid size value of ' . implode(', ', $this->getAllowedSpecifications());
}
/**
@@ -74,7 +74,7 @@ class RuntimeSize extends Validator
return false;
}
if (!\in_array($value, $this->getAllowedSizes())) {
if (!\in_array($value, $this->getAllowedSpecifications())) {
return false;
}
+1 -1
View File
@@ -140,7 +140,7 @@ class Builds extends Action
}
$version = $function->getAttribute('version', 'v2');
$spec = Config::getParam('runtime-sizes')[$function->getAttribute('size', 's-1vcpu-512mb')];
$spec = Config::getParam('runtime-specifications')[$function->getAttribute('specifications', 's-1vcpu-512mb')];
$runtimes = Config::getParam($version === 'v2' ? 'runtimes-v2' : 'runtimes', []);
$key = $function->getAttribute('runtime');
$runtime = $runtimes[$key] ?? null;
+1 -1
View File
@@ -308,7 +308,7 @@ class Functions extends Action
$user ??= new Document();
$functionId = $function->getId();
$deploymentId = $function->getAttribute('deployment', '');
$spec = Config::getParam('runtime-sizes')[$function->getAttribute('size', 's-1vcpu-512mb')];
$spec = Config::getParam('runtime-specifications')[$function->getAttribute('specification', 's-1vcpu-512mb')];
$log->addTag('deploymentId', $deploymentId);
+5 -5
View File
@@ -82,7 +82,7 @@ use Appwrite\Utopia\Response\Model\ProviderRepository;
use Appwrite\Utopia\Response\Model\Rule;
use Appwrite\Utopia\Response\Model\Runtime;
use Appwrite\Utopia\Response\Model\Session;
use Appwrite\Utopia\Response\Model\Size;
use Appwrite\Utopia\Response\Model\Specification;
use Appwrite\Utopia\Response\Model\Subscriber;
use Appwrite\Utopia\Response\Model\Target;
use Appwrite\Utopia\Response\Model\Team;
@@ -248,8 +248,8 @@ class Response extends SwooleResponse
public const MODEL_BUILD_LIST = 'buildList'; // Not used anywhere yet
public const MODEL_FUNC_PERMISSIONS = 'funcPermissions';
public const MODEL_HEADERS = 'headers';
public const MODEL_SIZE = 'size';
public const MODEL_SIZE_LIST = 'sizeList';
public const MODEL_SPECIFICATION = 'specification';
public const MODEL_SPECIFICATION_LIST = 'specificationList';
// Proxy
public const MODEL_PROXY_RULE = 'proxyRule';
@@ -367,7 +367,7 @@ class Response extends SwooleResponse
->setModel(new BaseList('Target list', self::MODEL_TARGET_LIST, 'targets', self::MODEL_TARGET))
->setModel(new BaseList('Migrations List', self::MODEL_MIGRATION_LIST, 'migrations', self::MODEL_MIGRATION))
->setModel(new BaseList('Migrations Firebase Projects List', self::MODEL_MIGRATION_FIREBASE_PROJECT_LIST, 'projects', self::MODEL_MIGRATION_FIREBASE_PROJECT))
->setModel(new BaseList('Sizes List', self::MODEL_SIZE_LIST, 'sizes', self::MODEL_SIZE))
->setModel(new BaseList('Specifications List', self::MODEL_SPECIFICATION_LIST, 'specifications', self::MODEL_SPECIFICATION))
// Entities
->setModel(new Database())
->setModel(new Collection())
@@ -444,7 +444,7 @@ class Response extends SwooleResponse
->setModel(new UsageFunction())
->setModel(new UsageProject())
->setModel(new Headers())
->setModel(new Size())
->setModel(new Specification())
->setModel(new Rule())
->setModel(new TemplateSMS())
->setModel(new TemplateEmail())
+2 -2
View File
@@ -145,9 +145,9 @@ class Func extends Model
'default' => false,
'example' => false,
])
->addRule('size', [
->addRule('specification', [
'type' => self::TYPE_STRING,
'description' => 'Function execution and builds machine size.',
'description' => 'Function execution and builds machine specification.',
'default' => 's-1vcpu-512mb',
'example' => 's-1vcpu-512mb',
])
@@ -5,7 +5,7 @@ namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
class Size extends Model
class Specification extends Model
{
public function __construct()
{
@@ -49,7 +49,7 @@ class Size extends Model
*/
public function getName(): string
{
return 'Sizes';
return 'Specification';
}
/**
@@ -59,6 +59,6 @@ class Size extends Model
*/
public function getType(): string
{
return Response::MODEL_SIZE;
return Response::MODEL_SPECIFICATION;
}
}
@@ -857,12 +857,12 @@ class FunctionsCustomServerTest extends Scope
'timeout' => 15,
'runtime' => 'php-8.0',
'entrypoint' => 'index.php',
'size' => 's-1vcpu-1gb',
'specification' => 's-1vcpu-1gb',
]);
$this->assertEquals(200, $response1['headers']['status-code']);
$this->assertNotEmpty($response1['body']['$id']);
$this->assertEquals('s-1vcpu-1gb', $response1['body']['size']);
$this->assertEquals('s-1vcpu-1gb', $response1['body']['specification']);
// Test Execution
$execution = $this->client->call(Client::METHOD_POST, '/functions/' . $data['functionId'] . '/executions', array_merge([
@@ -887,12 +887,12 @@ class FunctionsCustomServerTest extends Scope
'timeout' => 15,
'runtime' => 'php-8.0',
'entrypoint' => 'index.php',
'size' => 's-1vcpu-512mb',
'specification' => 's-1vcpu-512mb',
]);
$this->assertEquals(200, $response2['headers']['status-code']);
$this->assertNotEmpty($response2['body']['$id']);
$this->assertEquals('s-1vcpu-512mb', $response2['body']['size']);
$this->assertEquals('s-1vcpu-512mb', $response2['body']['specification']);
// Test Execution
$execution = $this->client->call(Client::METHOD_POST, '/functions/' . $data['functionId'] . '/executions', array_merge([
@@ -920,11 +920,11 @@ class FunctionsCustomServerTest extends Scope
'timeout' => 15,
'runtime' => 'php-8.0',
'entrypoint' => 'index.php',
'size' => 's-2vcpu-512mb', // Invalid size
'specification' => 's-2vcpu-512mb', // Invalid specification
]);
$this->assertEquals(400, $response3['headers']['status-code']);
$this->assertEquals('Invalid `size` param: String must be a valid size value of s-1vcpu-512mb, s-1vcpu-1gb', $response3['body']['message']);
$this->assertEquals('Invalid `specification` param: String must be a valid specification value of s-1vcpu-512mb, s-1vcpu-1gb', $response3['body']['message']);
return $data;
}