forked from arangodb/arangodb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
LES-TODOS
101 lines (93 loc) · 4.24 KB
/
LES-TODOS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
done
----
- create new branch
- factor out transactions from LogfileManager
- concept "collection locks"
- 3 states: READ / WRITE / EXCLUSIVE for locks
- index implementations => moved & renamed to StorageEngine
- move engine files into MMFiles directory
- split IndexElement
- rename *IndexElement to MMFiles*
- move fulltext & geoindex & skiplist helper code into MMFiles
- rename "RocksDBIndex" to "PersistentIndex"
- Delete OperationCursor->getMore. Replace by getMoreTokens
- remove ReadCache
- Index API
- Indexes always return std::vector<TOKEN>
- Rename OperationCursor->getMoreMptr => getMoreTokens, "returns" std::vector<TOKEN>&
- GeoIndex hands out TRI_revision instead of Tokens
- FulltextIndex hands out TRI_revision instead of Tokens
- trx::InvokeOnAllElements : uses SimpleIndexLookupElements => Has to use Tokens instead?
- remove TransactionState include from Transaction.h
MMFiles reference removals from files:
* arangod/V8Server/v8-query.cpp
- StorageEngine specific IndexFactory:
- create indexes from VPack
- enhance/validate given VPack index definitions (set default values, reject illegal ones)
- Implement new IndexIterator API next(callback, limit)
- Primary
- Hash
- Skiplist
- Persistent
- Geo
- Fulltext
- index API
- StorageEngine specific AQL functions
- Register for specific function names => branches to StorageEngine impl
- Storage Engine can implement these functions with specific code and interna
- e.g.: Geo, Fulltext
- Replace Usage of new callback-based IndexIterator
- move engine-specific parts of transaction.cpp into engine
- Logical => Physical
- keyGenerator
- dropIndex(p) => phys->dropIndex(p, true)
- DML API
- DDL API
- StorageEngineAPI readDocument requires 2 functions:
- void readDocument(TOKEN id, VPackBuilder& result) => Collects the document and inserts it asis into result. Does NOT clear result.
- void readDocument(TOKEN id, std::vector<std::string> const& attributePath, VPackBuilder& result) => Collects the document and writes only the value at the given attributePath (e.g. `a.b.c`) into result. Does NOT clear result.
in progress
-----------
- check for illegal includes
- fix includes during API conversion
to do
-----
- rename TRI_df_marker_* to something storage-engine specific
- applyForTickRange has to be moved to MMFilesCollection (used in replication-dump)
- add new serialization RW lock to LogicalCollection. all DML ops must acquire it in read mode, the explicit lock command must acquire it in write mode.
- AqlValue needs a (lazy evaluated) type TOKEN that handles collection ID and TOKEN inplace.
- slice() => looksup the value in the Database
- We need to keep in mind the cluster. If a DBServer creates this token-type it has to be translated BEFORE the register is teleported to coordinator
- Remove temporary wrapper LogCol::readDocument()
- InitialySyncer.cpp knows details of StorageEngine MMFiles
MMFiles are known to the following files:
* arangod/Replication/InitialSyncer.cpp
* arangod/RestHandler/RestExportHandler.cpp
* arangod/RestHandler/RestWalHandler.cpp
* arangod/RestHandler/RestReplicationHandler.cpp
* arangod/RestServer/arangod.cpp
* arangod/StorageEngine/EngineSelectorFeature.cpp
* arangod/Utils/CollectionExport.cpp
* arangod/Utils/CollectionKeys.cpp
* arangod/V8Server/v8-replication.cpp
* arangod/V8Server/v8-collection.cpp
* arangod/V8Server/v8-vocbase.cpp
* arangod/VocBase/replication-dump.cpp
* arangod/VocBase/vocbase.cpp
- IndexFactory needs a function to stringifyIndexes and rename idxFoo => IdxZirkusBar
- Implement new IndexIterator API nextExtra(callback, limit)
- Geo
- OperationOptions
- recovoryMarker
- re-enable RocksDB storage engine (e.g arangod.cpp)
- implement RocksDB storage engine
Questions
---------
* For GeoIndex `ignoreNull: true` and `constraint: false` are only set in Cluster mode. Is that art or can it go away?
OpenIssues Hacki
----------------
* HashIndex Lookup into a still local buffer, could be replaced by callback as well.
* SingleServerTraverser API does NOT takeover responsibility for slice data. getMore() hopes slices to not go away
* This API can be improved if we make better use of those callbacks.
* ShortestPathBlock does assume that slices do not walk away.
* EdgeCollectionInfos in ShortestPath could share one conditionBuilder.