1
0
Fork 0

Fix enterprise auth tests (#5721)

This commit is contained in:
Simon 2018-07-05 18:03:54 +02:00 committed by Jan
parent e04037243d
commit c84fbcfb24
1 changed files with 43 additions and 13 deletions

View File

@ -52,14 +52,6 @@ namespace {
const double SETUP_TIMEOUT = 25.0;
void injectQueryOptions(
Query& query,
VPackBuilder& infoBuilder
) {
// the toVelocyPack will open & close the "options" object
query.queryOptions().toVelocyPack(infoBuilder, true);
}
Result ExtractRemoteAndShard(VPackSlice keySlice, size_t& remoteId, std::string& shardId) {
TRI_ASSERT(keySlice.isString()); // used as a key in Json
StringRef key(keySlice);
@ -561,7 +553,34 @@ void EngineInfoContainerDBServer::DBServerInfo::buildMessage(
}
infoBuilder.close(); // lockInfo
infoBuilder.add(VPackValue("options"));
injectQueryOptions(query, infoBuilder);
// toVelocyPack will open & close the "options" object
#ifdef USE_ENTERPRISE
if (query.trx()->state()->options().skipInaccessibleCollections) {
aql::QueryOptions opts = query.queryOptions();
TRI_ASSERT(opts.transactionOptions.skipInaccessibleCollections);
for (auto const& it : _engineInfos) {
TRI_ASSERT(it.first);
EngineInfo const& engine = *it.first;
std::vector<ShardID> const& shards = it.second;
if (engine.type() != ExecutionNode::ENUMERATE_IRESEARCH_VIEW &&
query.trx()->isInaccessibleCollectionId(engine.collection()->getPlanId())) {
for (ShardID sid : shards) {
opts.inaccessibleCollections.insert(sid);
}
opts.inaccessibleCollections.insert(std::to_string(engine.collection()->getPlanId()));
}
}
opts.toVelocyPack(infoBuilder, true);
} else {
query.queryOptions().toVelocyPack(infoBuilder, true);
}
#else
query.queryOptions().toVelocyPack(infoBuilder, true);
#endif
infoBuilder.add(VPackValue("variables"));
// This will open and close an Object.
query.ast()->variables()->toVelocyPack(infoBuilder);
@ -570,12 +589,12 @@ void EngineInfoContainerDBServer::DBServerInfo::buildMessage(
for (auto const& it : _engineInfos) {
TRI_ASSERT(it.first);
auto const& engine = *it.first;
auto const& shards = it.second;
EngineInfo const& engine = *it.first;
std::vector<ShardID> const& shards = it.second;
#ifdef USE_IRESEARCH
// serialize for the list of shards
if (it.first->type() == ExecutionNode::ENUMERATE_IRESEARCH_VIEW) {
if (engine.type() == ExecutionNode::ENUMERATE_IRESEARCH_VIEW) {
engine.serializeSnippet(serverId, query, shards, infoBuilder);
// register current DBServer for each scatter associated with the view
@ -611,7 +630,7 @@ void EngineInfoContainerDBServer::DBServerInfo::injectTraverserEngines(
infoBuilder.openArray();
for (auto const& it : _traverserEngineInfos) {
GraphNode* en = it.first;
auto const& list = it.second;
TraverserEngineShardLists const& list = it.second;
infoBuilder.openObject();
{
// Options
@ -657,6 +676,17 @@ void EngineInfoContainerDBServer::DBServerInfo::injectTraverserEngines(
infoBuilder.close();
}
infoBuilder.close(); // edges
#ifdef USE_ENTERPRISE
if (!list.inaccessibleShards.empty()) {
infoBuilder.add(VPackValue("inaccessible"));
infoBuilder.openArray();
for (ShardID const& shard : list.inaccessibleShards) {
infoBuilder.add(VPackValue(shard));
}
infoBuilder.close(); // inaccessible
}
#endif
infoBuilder.close(); // shards
en->enhanceEngineInfo(infoBuilder);