8000 fix sporadically failing one shard test (#10074) · archerli/arangodb@8a56ed9 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8a56ed9

Browse files
authored
fix sporadically failing one shard test (arangodb#10074)
1 parent 0b9dfb4 commit 8a56ed9

File tree

9 files changed

+60
-66
lines changed

9 files changed

+60
-66
lines changed

arangod/Cluster/ClusterInfo.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -638,19 +638,22 @@ void ClusterInfo::loadPlan() {
638638
TRI_vocbase_t* vocbase = databaseFeature->lookupDatabase(name);
639639
if (vocbase == nullptr) {
640640
// database does not yet exist, create it now
641-
TRI_voc_tick_t id =
642-
arangodb::basics::VelocyPackHelper::stringUInt64(database.value,
643-
StaticStrings::DatabaseId);
641+
644642
// create a local database object...
645643
arangodb::CreateDatabaseInfo info;
10000
646-
info.load(name, id);
647-
648-
Result res = databaseFeature->createDatabase(info ,vocbase);
649-
644+
Result res = info.load(database.value, VPackSlice::emptyArraySlice());
650645
if (res.fail()) {
651-
LOG_TOPIC("91870", ERR, arangodb::Logger::AGENCY)
652-
<< "creating local database '" << name
646+
LOG_TOPIC("94357", ERR, arangodb::Logger::AGENCY)
647+
<< "validating data for local database '" << name
653648
<< "' failed: " << res.errorMessage();
649+
} else {
650+
res = databaseFeature->createDatabase(info, vocbase);
651+
652+
if (res.fail()) {
653+
LOG_TOPIC("91870", ERR, arangodb::Logger::AGENCY)
654+
<< "creating local database '" << name
655+
<< "' failed: " << res.errorMessage();
656+
}
654657
}
655658
}
656659
}
@@ -1479,7 +1482,7 @@ std::vector<std::shared_ptr<LogicalView>> const ClusterInfo::getViews(DatabaseID
14791482

14801483
// Build the VPackSlice that contains the `isBuilding` entry
14811484
void ClusterInfo::buildIsBuildingSlice(CreateDatabaseInfo const& database,
1482-
VPackBuilder& builder) {
1485+
VPackBuilder& builder) {
14831486
VPackObjectBuilder guard(&builder);
14841487
database.toVelocyPack(builder);
14851488

@@ -1492,7 +1495,7 @@ void ClusterInfo::buildIsBuildingSlice(CreateDatabaseInfo const& database,
14921495

14931496
// Build the VPackSlice that does not contain the `isBuilding` entry
14941497
void ClusterInfo::buildFinalSlice(CreateDatabaseInfo const& database,
1495-
VPackBuilder& builder) {
1498+
VPackBuilder& builder) {
14961499
VPackObjectBuilder guard(&builder);
14971500
database.toVelocyPack(builder);
14981501
}

arangod/ClusterEngine/ClusterEngine.cpp

Lines changed: 3 additions & 2 deletions
Original file line number
Diff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include "Transaction/Options.h"
5252
#include "VocBase/LogicalView.h"
5353
#include "VocBase/ticks.h"
54+
#include "VocBase/VocbaseInfo.h"
5455

5556
#include <velocypack/Iterator.h>
5657
#include <velocypack/velocypack-aliases.h>
@@ -218,7 +219,7 @@ std::unique_ptr<TRI_vocbase_t> ClusterEngine::createDatabase(
218219
status = TRI_ERROR_INTERNAL;
219220
arangodb::CreateDatabaseInfo info;
220221
auto res = info.load(id, args, VPackSlice::emptyArraySlice());
221-
if(res.fail()) {
222+
if (res.fail()) {
222223
THROW_ARANGO_EXCEPTION(res);
223224
}
224225

@@ -368,7 +369,7 @@ std::unique_ptr<TRI_vocbase_t> ClusterEngine::openExistingDatabase(
368369
TRI_ASSERT(args.get("name").isString());
369370
info.allowSystemDB(TRI_vocbase_t::IsSystemName(args.get("name").copyString()));
370371
auto res = info.load(id, args, VPackSlice::emptyArraySlice());
371-
if(res.fail()) {
372+
if (res.fail()) {
372373
THROW_ARANGO_EXCEPTION(res);
373374
}
374375

arangod/RestHandler/RestAdminServerHandler.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "Logger/Logger.h"
3030
#include "Logger/LoggerStream.h"
3131
#include "Replication/ReplicationFeature.h"
32+
#include "VocBase/VocbaseInfo.h"
3233
#include "VocBase/vocbase.h"
3334

3435
using namespace arangodb;

arangod/RocksDBEngine/RocksDBEngine.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
#include "Transaction/Options.h"
8989
#include "Transaction/StandaloneContext.h"
9090
#include "VocBase/LogicalView.h"
91+
#include "VocBase/VocbaseInfo.h"
9192
#include "VocBase/ticks.h"
9293

9394
#include <rocksdb/convenience.h>

arangod/VocBase/Methods/Databases.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ arangodb::Result Databases::grantCurrentUser(CreateDatabaseInfo const& info, int
177177
Result Databases::createCoordinator(CreateDatabaseInfo const& info) {
178178
TRI_ASSERT(ServerState::instance()->isCoordinator());
179179

180-
if(!TRI_vocbase_t::IsAllowedName(/*_isSystemDB*/ false, arangodb::velocypack::StringRef(info.getName()))){
180+
if (!TRI_vocbase_t::IsAllowedName(/*_isSystemDB*/ false, arangodb::velocypack::StringRef(info.getName()))) {
181181
return Result(TRI_ERROR_ARANGO_DATABASE_NAME_INVALID);
182182
}
183183

@@ -194,7 +194,7 @@ Result Databases::createCoordinator(CreateDatabaseInfo const& info) {
194194
return res;
195195
}
196196

197-
auto failureGuard = scopeGuard([ci, info]() {
197+
auto failureGuard = scopeGuard([ci, &info]() {
198198
LOG_TOPIC("8cc61", ERR, Logger::FIXME)
199199
<< "Failed to create database '" << info.getName() << "', rolling back.";
200200
Result res = ci->cancelCreateDatabaseCoordinator(info);
@@ -299,12 +299,12 @@ arangodb::Result Databases::create(std::string const& dbName, VPackSlice const&
299299
}
300300

301301
if (ServerState::instance()->isCoordinator() /* REVIEW! && !localDatabase*/) {
302-
if(!createInfo.validId()){
302+
if (!createInfo.validId()) {
303303
createInfo.setId(ClusterInfo::instance()->uniqid());
304304
}
305305
res = createCoordinator(createInfo);
306306
} else { // Single, DBServer, Agency
307-
if(!createInfo.validId()){
307+
if (!createInfo.validId()) {
308308
createInfo.setId(TRI_NewTickServer());
309309
}
310310
res = createOther(createInfo);

arangod/VocBase/VocbaseInfo.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,8 @@ Result CreateDatabaseInfo::extractOptions(VPackSlice const& options,
225225
bool extractId, bool extractName) {
226226
if (options.isNone() || options.isNull()) {
227227
return Result();
228-
} else if (!options.isObject()) {
228+
}
229+
if (!options.isObject()) {
229230
events::CreateDatabase(_name, TRI_ERROR_HTTP_BAD_PARAMETER);
230231
return Result(TRI_ERROR_HTTP_BAD_PARAMETER, "invalid options slice");
231232
}
@@ -234,7 +235,7 @@ Result CreateDatabaseInfo::extractOptions(VPackSlice const& options,
234235
_replicationFactor = vocopts.replicationFactor;
235236
_minReplicationFactor = vocopts.minReplicationFactor;
236237
_sharding = vocopts.sharding;
237-
238+
238239
if (extractName) {
239240
auto nameSlice = options.get(StaticStrings::DatabaseName);
240241
if (!nameSlice.isString()) {
@@ -317,8 +318,7 @@ VocbaseOptions getVocbaseOptions(VPackSlice const& options) {
317318
vocbaseOptions.replicationFactor = cluster->defaultReplicationFactor();
318319
} else {
319320
LOG_TOPIC("eeeee", ERR, Logger::CLUSTER)
320-
<< "Can not access ClusterFeature to determine database "
321-
"replicationFactor";
321+
<< "Cannot access ClusterFeature to determine replicationFactor";
322322
}
323323
} else if (isSatellite) {
324324
vocbaseOptions.replicationFactor = 0;
@@ -332,8 +332,7 @@ VocbaseOptions getVocbaseOptions(VPackSlice const& options) {
332332
vocbaseOptions.replicationFactor = cluster->defaultReplicationFactor();
333333
} else {
334334
LOG_TOPIC("eeeef", ERR, Logger::CLUSTER)
335-
<< "Can not access ClusterFeature to determine database "
336-
"replicationFactor";
335+
<< "Cannot access ClusterFeature to determine replicationFactor";
337336
vocbaseOptions.replicationFactor = 1;
338337
}
339338
}
@@ -349,8 +348,7 @@ VocbaseOptions getVocbaseOptions(VPackSlice const& options) {
349348
vocbaseOptions.minReplicationFactor = cluster->minReplicationFactor();
350349
} else {
351350
LOG_TOPIC("eeeed", ERR, Logger::CLUSTER)
352-
<< "Can not access ClusterFeature to determine database "
353-
"minReplicationFactor";
351+
<< "Cannot access ClusterFeature to determine minReplicationFactor";
354352
}
355353
} else if (isNumber) {
356354
vocbaseOptions.minReplicationFactor =

arangod/VocBase/vocbase.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
#include "Basics/Result.h"
4141
#include "Basics/voc-errors.h"
4242
#include "VocBase/voc-types.h"
43-
#include "VocBase/VocbaseInfo.h"
4443

4544
#include <velocypack/Slice.h>
4645

@@ -50,22 +49,18 @@ class QueryList;
5049
}
5150
namespace velocypack {
5251
class Builder;
52+
class Slice;
5353
class StringRef;
5454
} // namespace velocypack
5555
class CollectionKeysRepository;
56+
class CreateDatabaseInfo;
5657
class CursorRepository;
5758
class DatabaseReplicationApplier;
5859
class LogicalCollection;
5960
class LogicalDataSource;
6061
class LogicalView;
6162
class ReplicationClientsProgressTracker;
6263
class StorageEngine;
63-
64-
namespace velocypack {
65-
class Builder;
66-
class Slice;
67-
}
68-
6964
} // namespace arangodb
7065

7166
/// @brief predefined collection name for users

tests/VocBase/LogicalView-test.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@
3838
#include "StorageEngine/EngineSelectorFeature.h"
3939
#include "Utils/ExecContext.h"
4040
#include "VocBase/LogicalView.h"
41+
#include "VocBase/VocbaseInfo.h"
4142
#include "VocBase/vocbase.h"
42-
#include "velocypack/Parser.h"
43+
44+
#include <velocypack/Parser.h>
4345

4446
namespace {
4547
struct TestView : public arangodb::LogicalView {

tests/js/common/shell/shell-one-shard.js

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ const jsunity = require("jsunity");
3232
const arangodb = require("@arangodb");
3333
const db = arangodb.db;
3434
const internal = require('internal');
35-
36-
3735
const isEnterprise = internal.isEnterprise();
3836
const isCluster = internal.isCluster();
3937

@@ -46,7 +44,6 @@ function OneShardPropertiesSuite () {
4644
db._useDatabase("_system");
4745
db._dropDatabase(dn);
4846
} catch(ex) {
49-
5047
}
5148
},
5249

@@ -57,80 +54,77 @@ function OneShardPropertiesSuite () {
5754
} catch(ex) {
5855
}
5956
},
60-
57+
6158
testDefaultValues : function () {
6259
assertTrue(db._createDatabase(dn));
6360
db._useDatabase(dn);
6461
let props = db._properties();
65-
if(isCluster) {
62+
if (isCluster) {
6663
assertEqual(props.sharding, "");
6764
assertEqual(props.replicationFactor, 1);
6865
} else {
6966
assertEqual(props.sharding, undefined);
7067
assertEqual(props.replicationFactor, undefined);
7168
}
7269
},
73-
74-
testOneShardDBandOverrides : function () {
75-
assertTrue(db._createDatabase(dn, { sharding : "single", replicationFactor : 2}));
70+
71+
testOneShardDBAndOverrides : function () {
72+
assertTrue(db._createDatabase(dn, { sharding : "single", replicationFactor : 2 }));
7673

7774
db._useDatabase(dn);
7875
let props = db._properties();
79-
if(!isCluster) {
76+
if (!isCluster) {
8077
assertEqual(props.sharding, undefined);
8178
assertEqual(props.replicationFactor, undefined);
8279
} else {
83-
assertEqual(props.sharding, "single");
84-
assertEqual(props.replicationFactor, 2);
80+
assertEqual(props.sharding, "single", props);
81+
assertEqual(props.replicationFactor, 2, props);
8582

8683
{
8784
let col = db._create("oneshardcol");
8885
let colProperties = col.properties();
8986
let graphsProperties = db._collection("_graphs").properties();
9087

91-
if(isCluster && isEnterprise) {
88+
if (isCluster && isEnterprise) {
9289
assertEqual(colProperties.distributeShardsLike, "_graphs");
9390
assertEqual(colProperties.replicationFactor, graphsProperties.replicationFactor);
9491
}
9592
}
9693

97-
9894
{
9995
// we want to create a normal collection
10096
let col = db._create("overrideOneShardCollection", { distributeShardsLike: ""});
10197
let colProperties = col.properties();
10298
let graphsProperties = db._collection("_graphs").properties();
10399

104-
if(isCluster) {
100+
if (isCluster) {
105101
assertEqual(colProperties.distributeShardsLike, undefined);
106102
assertEqual(colProperties.replicationFactor, db._properties().replicationFactor);
107103
}
108104
}
109105

110-
111106
{
112107
// we want to create a normal collection and have a different replication factor
113108
let nonDefaultReplicationFactor = 1;
114109
assertNotEqual(db._properties.ReplicationFactor, nonDefaultReplicationFactor);
115-
let col = db._create("overrideOneShardAndReplicationFactor", { distributeShardsLike: "", replicationFactor: nonDefaultReplicationFactor});
110+
let col = db._create("overrideOneShardAndReplicationFactor", { distributeShardsLike: "", replicationFactor: nonDefaultReplicationFactor });
116111
let colProperties = col.properties();
117112
let graphsProperties = db._collection("_graphs").properties();
118113

119-
if(isCluster) {
114+
if (isCluster) {
120115
assertEqual(colProperties.distributeShardsLike, undefined);
121116
assertEqual(colProperties.replicationFactor, nonDefaultReplicationFactor);
122117
}
123118
}
124119
}
125-
126120
},
127-
128-
testReplicationFactorandOverrides : function () {
129-
assertTrue(db._createDatabase(dn, { replicationFactor : 2, minReplicationFactor : 2}));
121+
122+
testReplicationFactorAndOverrides : function () {
123+
assertTrue(db._createDatabase(dn, { replicationFactor : 2, minReplicationFactor : 2 }));
130124

131125
db._useDatabase(dn);
132126
let props = db._properties();
133-
if(!isCluster) {
127+
if (!isCluster) {
134128
assertEqual(props.sharding, undefined);
135129
assertEqual(props.replicationFactor, undefined);
136130
assertEqual(props.minReplicationFactor, undefined);
@@ -146,7 +140,6 @@ function OneShardPropertiesSuite () {
146140
assertEqual(colProperties.minReplicationFactor, 2);
147141
}
148142

149-
150143
{
151144
let col = db._create("overrideCollection1", { minReplicationFactor : 1});
152145
let colProperties = col.properties();
@@ -162,14 +155,14 @@ function OneShardPropertiesSuite () {
162155
}
163156

164157
{
165-
// we want to create a normal collection and have a different replication factor
166-
let col2 = db._collection("overrideCollection2");
167-
let col3 = db._create("overrideCollection3", { distributeShardsLike: "overrideCollection2"});
168-
let col2Properties = col2.properties();
169-
let col3Properties = col3.properties();
170-
171-
assertEqual(col3Properties.distributeShardsLike, col2.name());
172-
assertEqual(col3Properties.replicationFactor, col2Properties.replicationFactor);
158+
// we want to create a normal collection and have a different replication factor
159+
let col2 = db._collection("overrideCollection2");
160+
let col3 = db._create("overrideCollection3", { distributeShardsLike: "overrideCollection2"});
161+
let col2Properties = col2.properties();
162+
let col3Properties = col3.properties();
163+
164+
assertEqual(col3Properties.distributeShardsLike, col2.name());
165+
assertEqual(col3Properties.replicationFactor, col2Properties.replicationFactor);
173166
}
174167
}
175168
},
@@ -178,7 +171,7 @@ function OneShardPropertiesSuite () {
178171
assertTrue(db._createDatabase(dn, { replicationFactor : "satellite"}));
179172
db._useDatabase(dn);
180173
let props = db._properties();
181-
if(!isCluster) {
174+
if (!isCluster) {
182175
assertEqual(props.sharding, undefined);
183176
} else {
184177
assertEqual(props.sharding, "");
@@ -190,7 +183,7 @@ function OneShardPropertiesSuite () {
190183
}
191184
}
192185
},
193-
186+
194187
};
195188
}
196189

0 commit comments

Comments
 (0)
0