in tensorflow_serving/model_servers/server_core.cc [431:496]
Status ServerCore::ReloadConfig(const ModelServerConfig& new_config) {
mutex_lock l(config_mu_);
// Determine whether to accept this config transition.
const bool is_first_config =
config_.config_case() == ModelServerConfig::CONFIG_NOT_SET;
const bool accept_transition =
is_first_config ||
(config_.config_case() == ModelServerConfig::kModelConfigList &&
new_config.config_case() == ModelServerConfig::kModelConfigList);
if (!accept_transition) {
return errors::FailedPrecondition(
"Cannot transition to requested config. It is only legal to transition "
"from one ModelConfigList to another.");
}
if (new_config.config_case() == ModelServerConfig::CONFIG_NOT_SET) {
// Nothing to load. In this case we allow a future call with a non-empty
// config.
LOG(INFO) << "Taking no action for empty config.";
return Status::OK();
}
if (new_config.config_case() == ModelServerConfig::kModelConfigList) {
TF_RETURN_IF_ERROR(
ValidateModelConfigList(new_config.model_config_list(), options_));
}
if (new_config.config_case() == ModelServerConfig::kModelConfigList &&
config_.config_case() == ModelServerConfig::kModelConfigList) {
TF_RETURN_IF_ERROR(ValidateNoModelsChangePlatforms(
config_.model_config_list(), new_config.model_config_list()));
}
config_ = new_config;
TF_RETURN_IF_ERROR(UpdateModelVersionLabelMap());
LOG(INFO) << "Adding/updating models.";
switch (config_.config_case()) {
case ModelServerConfig::kModelConfigList: {
if (options_.model_config_list_root_dir) {
TF_RETURN_IF_ERROR(UpdateModelConfigListRelativePaths(
*options_.model_config_list_root_dir,
config_.mutable_model_config_list()));
}
TF_RETURN_IF_ERROR(AddModelsViaModelConfigList());
break;
}
case ModelServerConfig::kCustomModelConfig: {
// We've already verified this invariant above, so this check should
// always pass.
CHECK(is_first_config); // Crash ok.
TF_RETURN_IF_ERROR(AddModelsViaCustomModelConfig());
break;
}
default:
return errors::InvalidArgument("Invalid ServerModelConfig");
}
LOG(INFO) << "Finished adding/updating models";
TF_RETURN_IF_ERROR(MaybeUpdateServerRequestLogger(config_.config_case()));
if (options_.flush_filesystem_caches) {
return Env::Default()->FlushFileSystemCaches();
}
LOG(INFO) << "Finished reloading config";
return Status::OK();
}