1
0
Fork 0

issue #662: ArangoDB on Windows hanging...

fix unloading of collections which prevented some collections from being dropped
This commit is contained in:
Jan Steemann 2013-11-11 13:51:58 +01:00
parent d7b90bb7df
commit dc82642998
4 changed files with 13 additions and 10 deletions

View File

@ -6971,7 +6971,7 @@ static v8::Handle<v8::Value> JS_UnloadVocbaseCol (v8::Arguments const& argv) {
TRI_V8_EXCEPTION_INTERNAL(scope, "cannot extract collection");
}
int res = TRI_UnloadCollectionVocBase(collection->_vocbase, collection);
int res = TRI_UnloadCollectionVocBase(collection->_vocbase, collection, false);
if (res != TRI_ERROR_NO_ERROR) {
TRI_V8_EXCEPTION_MESSAGE(scope, res, "cannot unload collection");

View File

@ -1461,7 +1461,7 @@ static void DatabaseManager (void* data) {
}
// found a database to delete
database = TRI_RemoveVectorPointer(&server->_droppedDatabases, i);
database = (TRI_vocbase_t*) TRI_RemoveVectorPointer(&server->_droppedDatabases, i);
break;
}

View File

@ -1512,7 +1512,12 @@ void TRI_DestroyVocBase (TRI_vocbase_t* vocbase) {
TRI_vector_pointer_t collections;
int res;
size_t i;
// stop replication
TRI_StopReplicationApplier(vocbase->_replicationApplier, false);
TRI_StopReplicationLogger(vocbase->_replicationLogger);
TRI_InitVectorPointer(&collections, TRI_UNKNOWN_MEM_ZONE);
TRI_WRITE_LOCK_COLLECTIONS_VOCBASE(vocbase);
@ -1527,15 +1532,11 @@ void TRI_DestroyVocBase (TRI_vocbase_t* vocbase) {
TRI_vocbase_col_t* collection;
collection = (TRI_vocbase_col_t*) vocbase->_collections._buffer[i];
TRI_UnloadCollectionVocBase(vocbase, collection);
TRI_UnloadCollectionVocBase(vocbase, collection, true);
}
TRI_DestroyVectorPointer(&collections);
// stop replication
TRI_StopReplicationApplier(vocbase->_replicationApplier, false);
TRI_StopReplicationLogger(vocbase->_replicationLogger);
// this will signal the synchroniser and the compactor threads to do one last iteration
vocbase->_state = 2;
@ -1945,8 +1946,9 @@ TRI_vocbase_col_t* TRI_CreateCollectionVocBase (TRI_vocbase_t* vocbase,
////////////////////////////////////////////////////////////////////////////////
int TRI_UnloadCollectionVocBase (TRI_vocbase_t* vocbase,
TRI_vocbase_col_t* collection) {
if (! collection->_canUnload) {
TRI_vocbase_col_t* collection,
bool force) {
if (! collection->_canUnload && ! force) {
return TRI_set_errno(TRI_ERROR_FORBIDDEN);
}

View File

@ -535,7 +535,8 @@ TRI_vocbase_col_t* TRI_CreateCollectionVocBase (TRI_vocbase_t*,
////////////////////////////////////////////////////////////////////////////////
int TRI_UnloadCollectionVocBase (TRI_vocbase_t*,
TRI_vocbase_col_t*);
TRI_vocbase_col_t*,
bool);
////////////////////////////////////////////////////////////////////////////////
/// @brief drops a (document) collection