     
     internal func ensureIndexes() -> EventLoopFuture<Void> {
         guard !didEnsureIndexes else {
-            return eventLoop.makeSucceededFuture(())
+            return eventLoop.makeSucceededFuture(())._mongoHop(to: filesCollection.hoppedEventLoop)
         }
         
         didEnsureIndexes = true

        buffer.writeBytes(data)
        
        let writer = GridFSFileWriter(fs: self, fileId: id, chunkSize: chunkSize, buffer: buffer)
        return writer.finalize(filename: filename, metadata: metadata).map { _ in }
    }
    
    public func upload(_ buffer: ByteBuffer, filename: String? = nil, id: Primitive = ObjectId(), metadata: Document? = nil, chunkSize: Int32 = GridFSBucket.defaultChunkSize) -> EventLoopFuture<Void> {
        let writer = GridFSFileWriter(fs: self, fileId: id, chunkSize: chunkSize, buffer: buffer)
        return writer.finalize(filename: filename, metadata: metadata).map { _ in }
    }
    
    public func find(_ query: Document) -> MappedCursor<FindQueryBuilder, GridFSFile> {

        return EventLoopFuture<Void>.andAllSucceed([
            self.filesCollection.deleteAll(where: ["_id": id]).map { _ in },
            self.chunksCollection.deleteAll(where: ["files_id": id]).map { _ in }
        ], on: eventLoop)._mongoHop(to: filesCollection.hoppedEventLoop)
    }
    
    // TODO: Cancellable, streaming writes & reads
