Skip to content

Commit 9092214

Browse files
authored
ENGCOM-4267: Allow redis compression options to be specified during setup:install process #21053
2 parents 5ce8747 + 327e02f commit 9092214

File tree

4 files changed

+79
-26
lines changed

4 files changed

+79
-26
lines changed

setup/src/Magento/Setup/Model/ConfigOptionsList/Cache.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@ class Cache implements ConfigOptionsListInterface
2727
const INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE = 'cache-backend-redis-db';
2828
const INPUT_KEY_CACHE_BACKEND_REDIS_PORT = 'cache-backend-redis-port';
2929
const INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD = 'cache-backend-redis-password';
30+
const INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA = 'cache-backend-redis-compress-data';
31+
const INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB = 'cache-backend-redis-compression-lib';
3032
const INPUT_KEY_CACHE_ID_PREFIX = 'cache-id-prefix';
3133

3234
const CONFIG_PATH_CACHE_BACKEND = 'cache/frontend/default/backend';
3335
const CONFIG_PATH_CACHE_BACKEND_SERVER = 'cache/frontend/default/backend_options/server';
3436
const CONFIG_PATH_CACHE_BACKEND_DATABASE = 'cache/frontend/default/backend_options/database';
3537
const CONFIG_PATH_CACHE_BACKEND_PORT = 'cache/frontend/default/backend_options/port';
3638
const CONFIG_PATH_CACHE_BACKEND_PASSWORD = 'cache/frontend/default/backend_options/password';
39+
const CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA = 'cache/frontend/default/backend_options/compress_data';
40+
const CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB = 'cache/frontend/default/backend_options/compression_lib';
3741
const CONFIG_PATH_CACHE_ID_PREFIX = 'cache/frontend/default/id_prefix';
3842

3943
/**
@@ -43,7 +47,9 @@ class Cache implements ConfigOptionsListInterface
4347
self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => '127.0.0.1',
4448
self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => '0',
4549
self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => '6379',
46-
self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => ''
50+
self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => '',
51+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA => '1',
52+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB => '',
4753
];
4854

4955
/**
@@ -60,7 +66,9 @@ class Cache implements ConfigOptionsListInterface
6066
self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => self::CONFIG_PATH_CACHE_BACKEND_SERVER,
6167
self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => self::CONFIG_PATH_CACHE_BACKEND_DATABASE,
6268
self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => self::CONFIG_PATH_CACHE_BACKEND_PORT,
63-
self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_CACHE_BACKEND_PASSWORD
69+
self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_CACHE_BACKEND_PASSWORD,
70+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA => self::CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA,
71+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB => self::CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB,
6472
];
6573

6674
/**
@@ -115,12 +123,24 @@ public function getOptions()
115123
self::CONFIG_PATH_CACHE_BACKEND_PASSWORD,
116124
'Redis server password'
117125
),
126+
new TextConfigOption(
127+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA,
128+
TextConfigOption::FRONTEND_WIZARD_TEXT,
129+
self::CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA,
130+
'Set to 0 to disable compression (default is 1, enabled)'
131+
),
132+
new TextConfigOption(
133+
self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB,
134+
TextConfigOption::FRONTEND_WIZARD_TEXT,
135+
self::CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB,
136+
'Compression lib to use [snappy,lzf,l4z,zstd,gzip] (leave blank to determine automatically)'
137+
),
118138
new TextConfigOption(
119139
self::INPUT_KEY_CACHE_ID_PREFIX,
120140
TextConfigOption::FRONTEND_WIZARD_TEXT,
121141
self::CONFIG_PATH_CACHE_ID_PREFIX,
122142
'ID prefix for cache keys'
123-
)
143+
),
124144
];
125145
}
126146

setup/src/Magento/Setup/Model/ConfigOptionsList/PageCache.php

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
namespace Magento\Setup\Model\ConfigOptionsList;
88

9-
use Magento\Framework\Setup\ConfigOptionsListInterface;
10-
use Magento\Framework\Config\File\ConfigFilePool;
119
use Magento\Framework\App\DeploymentConfig;
1210
use Magento\Framework\Config\Data\ConfigData;
11+
use Magento\Framework\Config\File\ConfigFilePool;
12+
use Magento\Framework\Setup\ConfigOptionsListInterface;
1313
use Magento\Framework\Setup\Option\SelectConfigOption;
1414
use Magento\Framework\Setup\Option\TextConfigOption;
1515
use Magento\Setup\Validator\RedisConnectionValidator;
@@ -26,16 +26,18 @@ class PageCache implements ConfigOptionsListInterface
2626
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER = 'page-cache-redis-server';
2727
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE = 'page-cache-redis-db';
2828
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT = 'page-cache-redis-port';
29-
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA = 'page-cache-redis-compress-data';
3029
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD = 'page-cache-redis-password';
30+
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA = 'page-cache-redis-compress-data';
31+
const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB = 'page-cache-redis-compression-lib';
3132
const INPUT_KEY_PAGE_CACHE_ID_PREFIX = 'page-cache-id-prefix';
3233

3334
const CONFIG_PATH_PAGE_CACHE_BACKEND = 'cache/frontend/page_cache/backend';
3435
const CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER = 'cache/frontend/page_cache/backend_options/server';
3536
const CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE = 'cache/frontend/page_cache/backend_options/database';
3637
const CONFIG_PATH_PAGE_CACHE_BACKEND_PORT = 'cache/frontend/page_cache/backend_options/port';
37-
const CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA = 'cache/frontend/page_cache/backend_options/compress_data';
3838
const CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD = 'cache/frontend/page_cache/backend_options/password';
39+
const CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA = 'cache/frontend/page_cache/backend_options/compress_data';
40+
const CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB = 'cache/frontend/page_cache/backend_options/compression_lib';
3941
const CONFIG_PATH_PAGE_CACHE_ID_PREFIX = 'cache/frontend/page_cache/id_prefix';
4042

4143
/**
@@ -45,8 +47,9 @@ class PageCache implements ConfigOptionsListInterface
4547
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER => '127.0.0.1',
4648
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE => '1',
4749
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT => '6379',
50+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => '',
4851
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA => '0',
49-
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => ''
52+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB => '',
5053
];
5154

5255
/**
@@ -63,8 +66,10 @@ class PageCache implements ConfigOptionsListInterface
6366
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER => self::CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER,
6467
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE => self::CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE,
6568
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT => self::CONFIG_PATH_PAGE_CACHE_BACKEND_PORT,
69+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD,
6670
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA => self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA,
67-
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD
71+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB =>
72+
self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB,
6873
];
6974

7075
/**
@@ -113,24 +118,30 @@ public function getOptions()
113118
self::CONFIG_PATH_PAGE_CACHE_BACKEND_PORT,
114119
'Redis server listen port'
115120
),
121+
new TextConfigOption(
122+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD,
123+
TextConfigOption::FRONTEND_WIZARD_TEXT,
124+
self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD,
125+
'Redis server password'
126+
),
116127
new TextConfigOption(
117128
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA,
118129
TextConfigOption::FRONTEND_WIZARD_TEXT,
119130
self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA,
120131
'Set to 1 to compress the full page cache (use 0 to disable)'
121132
),
122133
new TextConfigOption(
123-
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD,
134+
self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB,
124135
TextConfigOption::FRONTEND_WIZARD_TEXT,
125-
self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD,
126-
'Redis server password'
136+
self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB,
137+
'Compression library to use [snappy,lzf,l4z,zstd,gzip] (leave blank to determine automatically)'
127138
),
128139
new TextConfigOption(
129140
self::INPUT_KEY_PAGE_CACHE_ID_PREFIX,
130141
TextConfigOption::FRONTEND_WIZARD_TEXT,
131142
self::CONFIG_PATH_PAGE_CACHE_ID_PREFIX,
132143
'ID prefix for cache keys'
133-
)
144+
),
134145
];
135146
}
136147

@@ -224,7 +235,7 @@ private function validateRedisConfig(array $options, DeploymentConfig $deploymen
224235
self::CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE,
225236
$this->getDefaultConfigValue(self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE)
226237
);
227-
238+
228239
$config['password'] = isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD])
229240
? $options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD]
230241
: $deploymentConfig->get(

setup/src/Magento/Setup/Test/Unit/Model/ConfigOptionsList/CacheTest.php

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected function setUp()
4545
public function testGetOptions()
4646
{
4747
$options = $this->configOptionsList->getOptions();
48-
$this->assertCount(6, $options);
48+
$this->assertCount(8, $options);
4949

5050
$this->assertArrayHasKey(0, $options);
5151
$this->assertInstanceOf(SelectConfigOption::class, $options[0]);
@@ -69,7 +69,15 @@ public function testGetOptions()
6969

7070
$this->assertArrayHasKey(5, $options);
7171
$this->assertInstanceOf(TextConfigOption::class, $options[5]);
72-
$this->assertEquals('cache-id-prefix', $options[5]->getName());
72+
$this->assertEquals('cache-backend-redis-compress-data', $options[5]->getName());
73+
74+
$this->assertArrayHasKey(6, $options);
75+
$this->assertInstanceOf(TextConfigOption::class, $options[6]);
76+
$this->assertEquals('cache-backend-redis-compression-lib', $options[6]->getName());
77+
78+
$this->assertArrayHasKey(7, $options);
79+
$this->assertInstanceOf(TextConfigOption::class, $options[7]);
80+
$this->assertEquals('cache-id-prefix', $options[7]->getName());
7381
}
7482

7583
/**
@@ -88,7 +96,9 @@ public function testCreateConfigCacheRedis()
8896
'server' => '',
8997
'port' => '',
9098
'database' => '',
91-
'password' => ''
99+
'password' => '',
100+
'compress_data' => '',
101+
'compression_lib' => '',
92102
],
93103
'id_prefix' => $this->expectedIdPrefix(),
94104
]
@@ -115,18 +125,23 @@ public function testCreateConfigWithRedisConfig()
115125
'server' => 'localhost',
116126
'port' => '1234',
117127
'database' => '5',
118-
'password' => ''
128+
'password' => '',
129+
'compress_data' => '1',
130+
'compression_lib' => 'gzip',
119131
],
120132
'id_prefix' => $this->expectedIdPrefix(),
121133
]
122134
]
123135
]
124136
];
137+
125138
$options = [
126139
'cache-backend' => 'redis',
127140
'cache-backend-redis-server' => 'localhost',
128141
'cache-backend-redis-port' => '1234',
129-
'cache-backend-redis-db' => '5'
142+
'cache-backend-redis-db' => '5',
143+
'cache-backend-redis-compress-data' => '1',
144+
'cache-backend-redis-compression-lib' => 'gzip'
130145
];
131146

132147
$configData = $this->configOptionsList->createConfig($options, $this->deploymentConfigMock);

setup/src/Magento/Setup/Test/Unit/Model/ConfigOptionsList/PageCacheTest.php

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected function setUp()
4545
public function testGetOptions()
4646
{
4747
$options = $this->configList->getOptions();
48-
$this->assertCount(7, $options);
48+
$this->assertCount(8, $options);
4949

5050
$this->assertArrayHasKey(0, $options);
5151
$this->assertInstanceOf(SelectConfigOption::class, $options[0]);
@@ -65,15 +65,19 @@ public function testGetOptions()
6565

6666
$this->assertArrayHasKey(4, $options);
6767
$this->assertInstanceOf(TextConfigOption::class, $options[4]);
68-
$this->assertEquals('page-cache-redis-compress-data', $options[4]->getName());
68+
$this->assertEquals('page-cache-redis-password', $options[4]->getName());
6969

7070
$this->assertArrayHasKey(5, $options);
7171
$this->assertInstanceOf(TextConfigOption::class, $options[5]);
72-
$this->assertEquals('page-cache-redis-password', $options[5]->getName());
72+
$this->assertEquals('page-cache-redis-compress-data', $options[5]->getName());
7373

7474
$this->assertArrayHasKey(6, $options);
7575
$this->assertInstanceOf(TextConfigOption::class, $options[6]);
76-
$this->assertEquals('page-cache-id-prefix', $options[6]->getName());
76+
$this->assertEquals('page-cache-redis-compression-lib', $options[6]->getName());
77+
78+
$this->assertArrayHasKey(7, $options);
79+
$this->assertInstanceOf(TextConfigOption::class, $options[7]);
80+
$this->assertEquals('page-cache-id-prefix', $options[7]->getName());
7781
}
7882

7983
/**
@@ -93,7 +97,8 @@ public function testCreateConfigWithRedis()
9397
'port' => '',
9498
'database' => '',
9599
'compress_data' => '',
96-
'password' => ''
100+
'password' => '',
101+
'compression_lib' => '',
97102
],
98103
'id_prefix' => $this->expectedIdPrefix(),
99104
]
@@ -120,8 +125,9 @@ public function testCreateConfigWithRedisConfiguration()
120125
'server' => 'foo.bar',
121126
'port' => '9000',
122127
'database' => '6',
128+
'password' => '',
123129
'compress_data' => '1',
124-
'password' => ''
130+
'compression_lib' => 'gzip',
125131
],
126132
'id_prefix' => $this->expectedIdPrefix(),
127133
]
@@ -134,7 +140,8 @@ public function testCreateConfigWithRedisConfiguration()
134140
'page-cache-redis-server' => 'foo.bar',
135141
'page-cache-redis-port' => '9000',
136142
'page-cache-redis-db' => '6',
137-
'page-cache-redis-compress-data' => '1'
143+
'page-cache-redis-compress-data' => '1',
144+
'page-cache-redis-compression-lib' => 'gzip',
138145
];
139146

140147
$configData = $this->configList->createConfig($options, $this->deploymentConfigMock);

0 commit comments

Comments
 (0)