Android-cuttlefish cvd tool
start_selector_parser.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <sys/types.h>
20
21#include <optional>
22#include <string>
23#include <utility>
24#include <vector>
25
29
30namespace cuttlefish {
31namespace selector {
32
46 public:
48 const SelectorOptions& selector_options, const cvd_common::Args& cmd_args,
49 const cvd_common::Envs& envs);
50 std::optional<std::string> GroupName() const;
51 std::optional<std::vector<std::string>> PerInstanceNames() const;
52 const std::optional<std::vector<unsigned>>& InstanceIds() const {
53 return instance_ids_;
54 }
57 bool UseCvdalloc() const { return use_cvdalloc_; }
58
59 private:
60 StartSelectorParser(const std::string& system_wide_user_home,
61 const SelectorOptions& selector_options,
62 const cvd_common::Args& cmd_args,
63 const cvd_common::Envs& envs);
64
66
68 std::optional<std::string> num_instances;
69 std::optional<std::string> instance_nums;
70 std::optional<std::string> base_instance_num;
71 std::optional<unsigned> cuttlefish_instance_env;
72 std::optional<unsigned> vsoc_suffix;
73 };
74
76 friend class StartSelectorParser;
77
78 private:
79 ParsedInstanceIdsOpt(const std::vector<unsigned>& instance_ids)
80 : instance_ids_{instance_ids},
81 n_instances_{static_cast<unsigned>(instance_ids.size())} {}
82 ParsedInstanceIdsOpt(const unsigned n_instances)
83 : instance_ids_{std::nullopt}, n_instances_{n_instances} {}
84 auto GetInstanceIds() { return std::move(instance_ids_); }
85 unsigned GetNumOfInstances() const { return n_instances_; }
86 std::optional<std::vector<unsigned>> instance_ids_;
87 const unsigned n_instances_;
88 };
89
90 /*
91 * CF_ERR is meant to be an error:
92 * For example, --num_instances != |--instance_nums|.
93 *
94 * On the contrary, std::nullopt inside Result is not necessary one.
95 * std::nullopt inside Result means that with the given information,
96 * the instance_ids_ cannot be yet figured out, so the task is deferred
97 * to CreationAnaylizer or so, which has more contexts. For example,
98 * if no option at all is given, it is not an error; however, the
99 * StartSelectorParser alone cannot figure out the list of instance ids. The
100 * InstanceDatabase, UniqueResourceAllocator, InstanceLockFileManager will be
101 * involved to automatically generate the valid, numeric instance ids.
102 * If that's the case, Result{std::nullopt} could be returned.
103 *
104 */
106 const InstanceIdsParams& instance_id_params);
107
109 std::optional<unsigned> cuttlefish_instance_env;
110 std::optional<unsigned> vsoc_suffix;
111 std::optional<unsigned> num_instances;
112 };
113 std::optional<std::vector<unsigned>> InstanceFromEnvironment(
114 const InstanceFromEnvParam& params);
115
117 std::optional<std::string> num_instances_flag;
118 std::optional<std::vector<std::string>> instance_names;
119 std::optional<std::string> instance_nums_flag;
120 };
121
123 unsigned default_n_instances = 1) const;
125
139 std::optional<std::vector<unsigned>> instance_ids_;
143
144 // temporarily keeps the leftover of the input cmd_args
145 const std::string client_user_home_;
149};
150
151} // namespace selector
152} // namespace cuttlefish
Definition: expected.h:86
std::optional< std::vector< unsigned > > instance_ids_
Definition: start_selector_parser.h:86
auto GetInstanceIds()
Definition: start_selector_parser.h:84
unsigned GetNumOfInstances() const
Definition: start_selector_parser.h:85
ParsedInstanceIdsOpt(const std::vector< unsigned > &instance_ids)
Definition: start_selector_parser.h:79
const unsigned n_instances_
Definition: start_selector_parser.h:87
ParsedInstanceIdsOpt(const unsigned n_instances)
Definition: start_selector_parser.h:82
Definition: start_selector_parser.h:45
std::optional< std::vector< std::string > > PerInstanceNames() const
Definition: start_selector_parser.cpp:78
const std::string client_user_home_
Definition: start_selector_parser.h:145
bool CalcMayBeDefaultGroup()
Definition: start_selector_parser.cpp:234
bool use_cvdalloc_
Definition: start_selector_parser.h:142
std::optional< std::vector< unsigned > > instance_ids_
Definition: start_selector_parser.h:139
const std::optional< std::vector< unsigned > > & InstanceIds() const
Definition: start_selector_parser.h:52
Result< unsigned > VerifyNumOfInstances(const VerifyNumOfInstancesParam &params, unsigned default_n_instances=1) const
Definition: start_selector_parser.cpp:128
cvd_common::Args cmd_args_
Definition: start_selector_parser.h:147
SelectorOptions selector_options_
Definition: start_selector_parser.h:146
bool may_be_default_group_
Definition: start_selector_parser.h:141
unsigned RequestedNumInstances() const
Definition: start_selector_parser.h:55
unsigned requested_num_instances_
Definition: start_selector_parser.h:140
StartSelectorParser(const std::string &system_wide_user_home, const SelectorOptions &selector_options, const cvd_common::Args &cmd_args, const cvd_common::Envs &envs)
Definition: start_selector_parser.cpp:65
std::optional< std::string > GroupName() const
Definition: start_selector_parser.cpp:74
Result< ParsedInstanceIdsOpt > HandleInstanceIds(const InstanceIdsParams &instance_id_params)
Definition: start_selector_parser.cpp:179
Result< void > ParseOptions()
Definition: start_selector_parser.cpp:248
static Result< StartSelectorParser > ConductSelectFlagsParser(const SelectorOptions &selector_options, const cvd_common::Args &cmd_args, const cvd_common::Envs &envs)
Definition: start_selector_parser.cpp:55
std::optional< std::vector< unsigned > > InstanceFromEnvironment(const InstanceFromEnvParam &params)
Definition: start_selector_parser.cpp:101
bool UseCvdalloc() const
Definition: start_selector_parser.h:57
bool IsMaybeDefaultGroup() const
Definition: start_selector_parser.h:56
cvd_common::Envs envs_
Definition: start_selector_parser.h:148
uint32_t size
Definition: io.h:2
std::vector< std::string > Args
Definition: types.h:25
std::unordered_map< std::string, std::string > Envs
Definition: types.h:26
Definition: alloc_utils.cpp:23
Definition: logging.h:464
Definition: selector_common_parser.h:29
std::optional< unsigned > vsoc_suffix
Definition: start_selector_parser.h:110
std::optional< unsigned > num_instances
Definition: start_selector_parser.h:111
std::optional< unsigned > cuttlefish_instance_env
Definition: start_selector_parser.h:109
std::optional< std::string > instance_nums
Definition: start_selector_parser.h:69
std::optional< std::string > num_instances
Definition: start_selector_parser.h:68
std::optional< unsigned > vsoc_suffix
Definition: start_selector_parser.h:72
std::optional< std::string > base_instance_num
Definition: start_selector_parser.h:70
std::optional< unsigned > cuttlefish_instance_env
Definition: start_selector_parser.h:71
std::optional< std::string > num_instances_flag
Definition: start_selector_parser.h:117
std::optional< std::string > instance_nums_flag
Definition: start_selector_parser.h:119
std::optional< std::vector< std::string > > instance_names
Definition: start_selector_parser.h:118