Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Frozen features #15610

Merged
merged 90 commits into from
Jan 31, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
be36dc9
initial commit
gnusi Jan 22, 2022
8e7581f
wip
gnusi Jan 23, 2022
2759bad
wip
gnusi Jan 23, 2022
f38bc68
wip
gnusi Jan 23, 2022
81caa1f
wip
gnusi Jan 23, 2022
de9be3f
wip
gnusi Jan 23, 2022
1b9c99c
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 24, 2022
4ac869e
wip
gnusi Jan 24, 2022
44d4347
wip
gnusi Jan 24, 2022
81f4ddd
wip
gnusi Jan 24, 2022
ada8804
wip
gnusi Jan 24, 2022
01a7ba2
wip
gnusi Jan 24, 2022
e729dbe
wip
gnusi Jan 24, 2022
dab8961
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 24, 2022
0a18808
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 24, 2022
e74d1ac
wip
gnusi Jan 24, 2022
5a0702d
wip
gnusi Jan 25, 2022
485dc2f
wip
gnusi Jan 25, 2022
e228b3d
wip
gnusi Jan 25, 2022
cbf4f17
wip
gnusi Jan 25, 2022
0e82ce6
wip
gnusi Jan 25, 2022
9230c96
wip
gnusi Jan 25, 2022
c02365f
wip
gnusi Jan 25, 2022
9d212ed
wip
gnusi Jan 25, 2022
2a9e9e9
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 25, 2022
e9e7c99
wip
gnusi Jan 25, 2022
0d2da9c
wip
gnusi Jan 26, 2022
1d97e72
wip
gnusi Jan 26, 2022
cc22221
wip
gnusi Jan 26, 2022
f4d4a1d
wip
gnusi Jan 26, 2022
dbb946c
wip
gnusi Jan 26, 2022
ce0a551
wip
gnusi Jan 26, 2022
482ef8f
wip
gnusi Jan 26, 2022
1db5cbf
wip
gnusi Jan 26, 2022
280a2f3
wip
gnusi Jan 26, 2022
5e1bd02
wip
gnusi Jan 26, 2022
871d34b
wip
gnusi Jan 26, 2022
21f15fb
wip
gnusi Jan 26, 2022
bc8b310
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 26, 2022
1f19438
wip
gnusi Jan 26, 2022
f255f99
wip
gnusi Jan 26, 2022
9a1129b
wip
gnusi Jan 26, 2022
6e88128
get rid of virtual inheritance
gnusi Jan 26, 2022
7752ecf
wip
gnusi Jan 26, 2022
7d97ca8
wip
gnusi Jan 26, 2022
0ccbe4c
wip
gnusi Jan 26, 2022
5405acb
wup
gnusi Jan 27, 2022
5b687e9
wip
gnusi Jan 27, 2022
3da6cd8
wip
gnusi Jan 27, 2022
c544aea
wip
gnusi Jan 27, 2022
08e0796
wip
gnusi Jan 27, 2022
c270e77
wip
gnusi Jan 27, 2022
534937f
wip
gnusi Jan 27, 2022
5e57f80
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 27, 2022
b0980e9
wip
gnusi Jan 27, 2022
a9849b1
wip
gnusi Jan 27, 2022
ad9eb7f
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 28, 2022
9e04236
wip
gnusi Jan 28, 2022
23e648c
wip
gnusi Jan 28, 2022
5fb19ff
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 28, 2022
4fc9103
finally made it to compile
gnusi Jan 28, 2022
2056192
wip
gnusi Jan 28, 2022
9494b11
wip
gnusi Jan 28, 2022
c05e8b0
wip
gnusi Jan 29, 2022
27af8bc
wip
gnusi Jan 29, 2022
f88645b
wip
gnusi Jan 29, 2022
f2db307
wip
gnusi Jan 29, 2022
f501bf9
wip
gnusi Jan 29, 2022
ff9127f
fix tests
gnusi Jan 29, 2022
7ed0620
wip
gnusi Jan 29, 2022
c2e1618
fix compilation
gnusi Jan 29, 2022
638c5e4
fix msvc build
gnusi Jan 29, 2022
6f87d04
remove unused code
gnusi Jan 30, 2022
5ee88e2
wip
gnusi Jan 30, 2022
404aeba
wip
gnusi Jan 30, 2022
e5b992e
wip
gnusi Jan 30, 2022
ae94da2
address review comments
gnusi Jan 30, 2022
00ddb31
wip
gnusi Jan 30, 2022
c4bcb4c
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 30, 2022
fd95726
wip
gnusi Jan 30, 2022
79e73d8
wip
gnusi Jan 30, 2022
fc8a867
wip
gnusi Jan 30, 2022
7fee8ce
wip
gnusi Jan 31, 2022
0b0aa28
wip
gnusi Jan 31, 2022
db51706
wip
gnusi Jan 31, 2022
068bcf6
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 31, 2022
a9d6128
wip
gnusi Jan 31, 2022
8f60724
Merge branch 'devel' of https://github.com/arangodb/arangodb into fea…
gnusi Jan 31, 2022
199f11b
wip
gnusi Jan 31, 2022
92ee15b
wip
gnusi Jan 31, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
wip
  • Loading branch information
gnusi committed Jan 30, 2022
commit fc8a8671cd6f82e21d2a5f6adf669949ea143038
12 changes: 5 additions & 7 deletions arangod/Agency/AgencyFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,23 +297,21 @@ void AgencyFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {
// - IResearchAnalyzer: analyzers are not needed by agency
// - Action/Script/FoxxQueues/Frontend: Foxx and JavaScript APIs
{
constexpr size_t kDisabledFeatures[]{
server().disableFeatures(std::array{
ArangodServer::id<iresearch::IResearchFeature>(),
ArangodServer::id<iresearch::IResearchAnalyzerFeature>(),
ArangodServer::id<ActionFeature>(), ArangodServer::id<FoxxFeature>(),
ArangodServer::id<FrontendFeature>()};
server().disableFeatures(kDisabledFeatures);
ArangodServer::id<FrontendFeature>()});
}

if (!V8DealerFeature::javascriptRequestedViaOptions(options)) {
// specifying --console requires JavaScript, so we can only turn Javascript
// off if not requested

// console mode inactive. so we can turn off V8
constexpr size_t kDisabledFeatures[]{ArangodServer::id<ScriptFeature>(),
ArangodServer::id<V8PlatformFeature>(),
ArangodServer::id<V8DealerFeature>()};
server().disableFeatures(kDisabledFeatures);
server().disableFeatures(std::array{ArangodServer::id<ScriptFeature>(),
ArangodServer::id<V8PlatformFeature>(),
ArangodServer::id<V8DealerFeature>()});
}
}

Expand Down
3 changes: 1 addition & 2 deletions arangod/RestServer/CheckVersionFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,7 @@ void CheckVersionFeature::validateOptions(

// we can turn off all warnings about environment here, because they
// wil show up on a regular start later anyway
constexpr size_t kDisabledFeature[]{ArangodServer::id<EnvironmentFeature>()};
server().disableFeatures(kDisabledFeature);
server().disableFeatures(std::array{ArangodServer::id<EnvironmentFeature>()});
}

void CheckVersionFeature::start() {
Expand Down
5 changes: 2 additions & 3 deletions arangod/RestServer/InitDatabaseFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,8 @@ void InitDatabaseFeature::validateOptions(

// we can turn off all warnings about environment here, because they
// wil show up on a regular start later anyway
constexpr size_t kDisabledFeatures[]{
ArangodServer::id<EnvironmentFeature>()};
server().disableFeatures(kDisabledFeatures);
server().disableFeatures(
std::array{ArangodServer::id<EnvironmentFeature>()});
}
}

Expand Down
12 changes: 4 additions & 8 deletions arangod/RestServer/ServerFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,24 +198,20 @@ void ServerFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {

auto disableDeamonAndSupervisor = [&]() {
if constexpr (Server::contains<DaemonFeature>()) {
constexpr size_t kDisabledFeatures[]{Server::id<DaemonFeature>()};
server().disableFeatures(kDisabledFeatures);
server().disableFeatures(std::array{Server::id<DaemonFeature>()});
}
if constexpr (Server::contains<SupervisorFeature>()) {
constexpr size_t kDisabledFeatures[]{Server::id<SupervisorFeature>()};
server().disableFeatures(kDisabledFeatures);
server().disableFeatures(std::array{Server::id<SupervisorFeature>()});
}
};

if (!_restServer) {
constexpr size_t kDisabledFeatures[]{
server().disableFeatures(std::array{
Server::id<HttpEndpointProvider>(),
Server::id<GeneralServerFeature>(),
Server::id<SslServerFeature>(),
Server::id<StatisticsFeature>(),
};

server().disableFeatures(kDisabledFeatures);
});
disableDeamonAndSupervisor();

if (!options->processingResult().touched("replication.auto-start")) {
Expand Down
17 changes: 7 additions & 10 deletions arangod/RestServer/UpgradeFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,24 +127,21 @@ void UpgradeFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {
if (ServerState::instance()->isCoordinator()) {
auto disableDeamonAndSupervisor = [&]() {
if constexpr (Server::contains<DaemonFeature>()) {
constexpr size_t kDisabledFeatures[]{Server::id<DaemonFeature>()};
server().forceDisableFeatures(kDisabledFeatures);
server().forceDisableFeatures(std::array{Server::id<DaemonFeature>()});
}
if constexpr (Server::contains<SupervisorFeature>()) {
constexpr size_t kDisabledFeatures[]{Server::id<SupervisorFeature>()};
server().forceDisableFeatures(kDisabledFeatures);
server().forceDisableFeatures(
std::array{Server::id<SupervisorFeature>()});
}
};

constexpr size_t kOtherFeaturesToDisable[]{
Server::id<GreetingsFeature>(), Server::id<pregel::PregelFeature>()};
server().forceDisableFeatures(kOtherFeaturesToDisable);
server().forceDisableFeatures(std::array{
Server::id<GreetingsFeature>(), Server::id<pregel::PregelFeature>()});
disableDeamonAndSupervisor();
} else {
server().forceDisableFeatures(_nonServerFeatures);
constexpr size_t kOtherFeaturesToDisable[]{
Server::id<BootstrapFeature>(), Server::id<HttpEndpointProvider>()};
server().forceDisableFeatures(kOtherFeaturesToDisable);
server().forceDisableFeatures(std::array{
Server::id<BootstrapFeature>(), Server::id<HttpEndpointProvider>()});
}

ReplicationFeature& replicationFeature =
Expand Down
122 changes: 61 additions & 61 deletions arangod/RestServer/arangod.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,23 +151,23 @@
using namespace arangodb;
using namespace arangodb::application_features;

constexpr size_t kNonServerFeatures[]{
ArangodServer::id<ActionFeature>(),
ArangodServer::id<AgencyFeature>(),
ArangodServer::id<ClusterFeature>(),
constexpr auto kNonServerFeatures =
std::array{ArangodServer::id<ActionFeature>(),
ArangodServer::id<AgencyFeature>(),
ArangodServer::id<ClusterFeature>(),
#ifdef ARANGODB_HAVE_FORK
ArangodServer::id<SupervisorFeature>(),
ArangodServer::id<DaemonFeature>(),
ArangodServer::id<SupervisorFeature>(),
ArangodServer::id<DaemonFeature>(),
#endif
ArangodServer::id<FoxxFeature>(),
ArangodServer::id<GeneralServerFeature>(),
ArangodServer::id<GreetingsFeature>(),
ArangodServer::id<HttpEndpointProvider>(),
ArangodServer::id<LogBufferFeature>(),
ArangodServer::id<pregel::PregelFeature>(),
ArangodServer::id<ServerFeature>(),
ArangodServer::id<SslServerFeature>(),
ArangodServer::id<StatisticsFeature>()};
ArangodServer::id<FoxxFeature>(),
ArangodServer::id<GeneralServerFeature>(),
ArangodServer::id<GreetingsFeature>(),
ArangodServer::id<HttpEndpointProvider>(),
ArangodServer::id<LogBufferFeature>(),
ArangodServer::id<pregel::PregelFeature>(),
ArangodServer::id<ServerFeature>(),
ArangodServer::id<SslServerFeature>(),
ArangodServer::id<StatisticsFeature>()};

static int runServer(int argc, char** argv, ArangoGlobalContext& context) {
try {
Expand All @@ -191,55 +191,55 @@ static int runServer(int argc, char** argv, ArangoGlobalContext& context) {
},
{}});

server.addFeatures(Visitor{
[]<typename T>(auto& server, TypeTag<T>) {
return std::make_unique<T>(server);
},
[](auto& server, TypeTag<GreetingsFeaturePhase>) {
return std::make_unique<GreetingsFeaturePhase>(server,
std::false_type{});
},
[&ret](auto& server, TypeTag<CheckVersionFeature>) {
return std::make_unique<CheckVersionFeature>(server, &ret,
kNonServerFeatures);
},
[&name](auto& server, TypeTag<ConfigFeature>) {
return std::make_unique<ConfigFeature>(server, name);
},
[](auto& server, TypeTag<InitDatabaseFeature>) {
return std::make_unique<InitDatabaseFeature>(server,
kNonServerFeatures);
},
[](auto& server, TypeTag<LoggerFeature>) {
return std::make_unique<LoggerFeature>(server, true);
},
[&ret](auto& server, TypeTag<ScriptFeature>) {
return std::make_unique<ScriptFeature>(server, &ret);
},
[&ret](auto& server, TypeTag<ServerFeature>) {
return std::make_unique<ServerFeature>(server, &ret);
},
[](auto& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangodServer::id<ScriptFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
},
[&name](auto& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, name);
},
[](auto& server, TypeTag<SslServerFeature>) {
server.addFeatures(
Visitor{[]<typename T>(auto& server, TypeTag<T>) {
return std::make_unique<T>(server);
},
[](auto& server, TypeTag<GreetingsFeaturePhase>) {
return std::make_unique<GreetingsFeaturePhase>(
server, std::false_type{});
},
[&ret](auto& server, TypeTag<CheckVersionFeature>) {
return std::make_unique<CheckVersionFeature>(
server, &ret, kNonServerFeatures);
},
[&name](auto& server, TypeTag<ConfigFeature>) {
return std::make_unique<ConfigFeature>(server, name);
},
[](auto& server, TypeTag<InitDatabaseFeature>) {
return std::make_unique<InitDatabaseFeature>(
server, kNonServerFeatures);
},
[](auto& server, TypeTag<LoggerFeature>) {
return std::make_unique<LoggerFeature>(server, true);
},
[&ret](auto& server, TypeTag<ScriptFeature>) {
return std::make_unique<ScriptFeature>(server, &ret);
},
[&ret](auto& server, TypeTag<ServerFeature>) {
return std::make_unique<ServerFeature>(server, &ret);
},
[](auto& server, TypeTag<ShutdownFeature>) {
return std::make_unique<ShutdownFeature>(
server, std::array{ArangodServer::id<ScriptFeature>()});
},
[&name](auto& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, name);
},
[](auto& server, TypeTag<SslServerFeature>) {
#ifdef USE_ENTERPRISE
return std::make_unique<SslServerFeatureEE>(server);
return std::make_unique<SslServerFeatureEE>(server);
#else
return std::make_unique<SslServerFeature>(server);
return std::make_unique<SslServerFeature>(server);
#endif
},
[&ret](auto& server, TypeTag<UpgradeFeature>) {
return std::make_unique<UpgradeFeature>(server, &ret,
kNonServerFeatures);
},
[](auto& server, TypeTag<HttpEndpointProvider>) {
return std::make_unique<EndpointFeature>(server);
}});
},
[&ret](auto& server, TypeTag<UpgradeFeature>) {
return std::make_unique<UpgradeFeature>(server, &ret,
kNonServerFeatures);
},
[](auto& server, TypeTag<HttpEndpointProvider>) {
return std::make_unique<EndpointFeature>(server);
}});

try {
server.run(argc, argv);
Expand Down
9 changes: 4 additions & 5 deletions arangod/V8Server/V8DealerFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,11 +314,10 @@ void V8DealerFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {
if (!_enableJS) {
disable();

constexpr size_t kDisabledFeatures[]{
Server::id<V8PlatformFeature>(), Server::id<ActionFeature>(),
Server::id<ScriptFeature>(), Server::id<FoxxFeature>(),
Server::id<FrontendFeature>()};
server().disableFeatures(kDisabledFeatures);
server().disableFeatures(
std::array{Server::id<V8PlatformFeature>(), Server::id<ActionFeature>(),
Server::id<ScriptFeature>(), Server::id<FoxxFeature>(),
Server::id<FrontendFeature>()});
return;
}

Expand Down
4 changes: 2 additions & 2 deletions client-tools/Backup/arangobackup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<BackupFeature>(server, ret);
},
[](ArangoBackupServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoBackupServer::id<BackupFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoBackupServer::id<BackupFeature>()});
}});

try {
Expand Down
4 changes: 2 additions & 2 deletions client-tools/Benchmark/arangobench.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<BenchFeature>(server, &ret);
},
[](ArangoBenchServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoBenchServer::id<BenchFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoBenchServer::id<BenchFeature>()});
},
[&](ArangoBenchServer& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, context.binaryName());
Expand Down
4 changes: 2 additions & 2 deletions client-tools/Dump/arangodump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<DumpFeature>(server, ret);
},
[](ArangoDumpServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoDumpServer::id<DumpFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoDumpServer::id<DumpFeature>()});
}});

try {
Expand Down
4 changes: 2 additions & 2 deletions client-tools/Export/arangoexport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<ExportFeature>(server, &ret);
},
[](ArangoExportServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoExportServer::id<ExportFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoExportServer::id<ExportFeature>()});
},
[&context](ArangoExportServer& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, context.binaryName());
Expand Down
4 changes: 2 additions & 2 deletions client-tools/Import/arangoimport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<ImportFeature>(server, &ret);
},
[](ArangoImportServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoImportServer::id<ImportFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoImportServer::id<ImportFeature>()});
},
[&](ArangoImportServer& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, context.binaryName());
Expand Down
5 changes: 2 additions & 3 deletions client-tools/Restore/arangorestore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<RestoreFeature>(server, ret);
},
[](ArangoRestoreServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{
ArangoRestoreServer::id<RestoreFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoRestoreServer::id<RestoreFeature>()});
},
[&](ArangoRestoreServer& server, TypeTag<TempFeature>) {
return std::make_unique<TempFeature>(server, context.binaryName());
Expand Down
4 changes: 2 additions & 2 deletions client-tools/Shell/arangosh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ int main(int argc, char* argv[]) {
return std::make_unique<TempFeature>(server, context.binaryName());
},
[](ArangoshServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoshServer::id<ShellFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoshServer::id<ShellFeature>()});
}});

try {
Expand Down
4 changes: 2 additions & 2 deletions client-tools/VPack/arangovpack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ int main(int argc, char* argv[]) {
"none");
},
[](ArangoVPackServer& server, TypeTag<ShutdownFeature>) {
constexpr size_t kFeatures[]{ArangoVPackServer::id<VPackFeature>()};
return std::make_unique<ShutdownFeature>(server, kFeatures);
return std::make_unique<ShutdownFeature>(
server, std::array{ArangoVPackServer::id<VPackFeature>()});
},
[](ArangoVPackServer& server, TypeTag<GreetingsFeaturePhase>) {
return std::make_unique<GreetingsFeaturePhase>(server,
Expand Down