in src/afs.cc [1489:1533]
void open()
{
const char* tag = "open";
// Use this when you want to attach a executor process.
// sleep(5);
pgstat_report_activity(STATE_RUNNING, (std::string(Tag) + ": opening").c_str());
auto session = find_session();
PG_TRY();
{
auto databaseName =
static_cast<const char*>(dsa_get_address(area_, session->databaseName));
auto userName =
static_cast<const char*>(dsa_get_address(area_, session->userName));
auto password =
static_cast<const char*>(dsa_get_address(area_, session->password));
auto clientAddress =
static_cast<const char*>(dsa_get_address(area_, session->clientAddress));
BackgroundWorkerInitializeConnection(databaseName, userName, 0);
CurrentResourceOwner =
ResourceOwnerCreate(nullptr, "arrow-flight-sql: Executor");
if (check_password(session, databaseName, userName, password, clientAddress))
{
// TODO: Customizable.
SharedRingBuffer::allocate_data(
&(session->bufferData), area_, 1L * 1024L * 1024L);
}
session->initialized = true;
localSession_->valid = true;
localSession_->bufferData = &(session->bufferData);
localSession_->bufferAddress =
dsa_get_address(area_, session->bufferData.pointer);
P("%s: %s: open: %" PRIu64, Tag, tag_, session->bufferData.pointer);
dshash_release_lock(sessions_, session);
signal_server(tag);
}
PG_CATCH();
{
set_error_message(session, "failed to connect", tag);
session->initialized = true;
dshash_release_lock(sessions_, session);
signal_server(tag);
PG_RE_THROW();
}
PG_END_TRY();
}