Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Neo4jsource
Commits
efc02528
Commit
efc02528
authored
5 years ago
by
MishaDemianenko
Browse files
Options
Download
Email Patches
Plain Diff
Remove statement allocation in TransactionImpl.
parent
38a36ccb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/TransactionImpl.java
+17
-35
...n/java/org/neo4j/kernel/impl/coreapi/TransactionImpl.java
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/NodeCursorResourceIterator.java
+6
-6
...nel/impl/coreapi/internal/NodeCursorResourceIterator.java
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/NodeLabelPropertyIterator.java
+3
-5
...rnel/impl/coreapi/internal/NodeLabelPropertyIterator.java
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/PrefetchingNodeResourceIterator.java
+3
-6
...mpl/coreapi/internal/PrefetchingNodeResourceIterator.java
with
29 additions
and
52 deletions
+29
-52
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/TransactionImpl.java
+
17
-
35
View file @
efc02528
...
...
@@ -74,7 +74,6 @@ import org.neo4j.internal.schema.IndexType;
import
org.neo4j.internal.schema.SchemaDescriptor
;
import
org.neo4j.kernel.api.KernelTransaction
;
import
org.neo4j.kernel.api.SilentTokenNameLookup
;
import
org.neo4j.kernel.api.Statement
;
import
org.neo4j.kernel.api.exceptions.Status
;
import
org.neo4j.kernel.api.exceptions.Status.Classification
;
import
org.neo4j.kernel.api.exceptions.Status.Code
;
...
...
@@ -145,7 +144,7 @@ public class TransactionImpl implements InternalTransaction
public
Node
createNode
()
{
var
ktx
=
kernelTransaction
();
try
(
Statement
ignore
=
ktx
.
acquireStatement
()
)
try
{
return
newNodeEntity
(
ktx
.
dataWrite
().
nodeCreate
()
);
}
...
...
@@ -159,7 +158,7 @@ public class TransactionImpl implements InternalTransaction
public
Node
createNode
(
Label
...
labels
)
{
var
ktx
=
kernelTransaction
();
try
(
Statement
ignore
=
ktx
.
acquireStatement
()
)
try
{
TokenWrite
tokenWrite
=
ktx
.
tokenWrite
();
int
[]
labelIds
=
new
int
[
labels
.
length
];
...
...
@@ -198,15 +197,12 @@ public class TransactionImpl implements InternalTransaction
}
KernelTransaction
ktx
=
kernelTransaction
();
try
(
Statement
ignore
=
ktx
.
acquireStatement
(
)
)
if
(
!
ktx
.
dataRead
().
nodeExists
(
id
)
)
{
if
(
!
ktx
.
dataRead
().
nodeExists
(
id
)
)
{
throw
new
NotFoundException
(
format
(
"Node %d not found"
,
id
),
new
EntityNotFoundException
(
EntityType
.
NODE
,
id
)
);
}
return
newNodeEntity
(
id
);
throw
new
NotFoundException
(
format
(
"Node %d not found"
,
id
),
new
EntityNotFoundException
(
EntityType
.
NODE
,
id
)
);
}
return
newNodeEntity
(
id
);
}
@Override
...
...
@@ -251,15 +247,13 @@ public class TransactionImpl implements InternalTransaction
}
KernelTransaction
ktx
=
kernelTransaction
();
try
(
Statement
ignore
=
ktx
.
acquireStatement
()
)
if
(
!
ktx
.
dataRead
().
relationshipExists
(
id
)
)
{
if
(
!
ktx
.
dataRead
().
relationshipExists
(
id
)
)
{
throw
new
NotFoundException
(
format
(
"Relationship %d not found"
,
id
),
new
EntityNotFoundException
(
EntityType
.
RELATIONSHIP
,
id
)
);
}
return
newRelationshipEntity
(
id
);
throw
new
NotFoundException
(
format
(
"Relationship %d not found"
,
id
),
new
EntityNotFoundException
(
EntityType
.
RELATIONSHIP
,
id
)
);
}
return
newRelationshipEntity
(
id
);
}
@Override
...
...
@@ -416,7 +410,6 @@ public class TransactionImpl implements InternalTransaction
KernelTransaction
ktx
=
kernelTransaction
();
return
()
->
{
Statement
statement
=
ktx
.
acquireStatement
();
NodeCursor
cursor
=
ktx
.
cursors
().
allocateNodeCursor
();
ktx
.
dataRead
().
allNodesScan
(
cursor
);
return
new
PrefetchingResourceIterator
<>()
...
...
@@ -439,7 +432,6 @@ public class TransactionImpl implements InternalTransaction
public
void
close
()
{
cursor
.
close
();
statement
.
close
();
}
};
};
...
...
@@ -451,7 +443,6 @@ public class TransactionImpl implements InternalTransaction
KernelTransaction
ktx
=
kernelTransaction
();
return
()
->
{
Statement
statement
=
ktx
.
acquireStatement
();
RelationshipScanCursor
cursor
=
ktx
.
cursors
().
allocateRelationshipScanCursor
();
ktx
.
dataRead
().
allRelationshipsScan
(
cursor
);
return
new
PrefetchingResourceIterator
<>()
...
...
@@ -475,7 +466,6 @@ public class TransactionImpl implements InternalTransaction
public
void
close
()
{
cursor
.
close
();
statement
.
close
();
}
};
};
...
...
@@ -636,12 +626,10 @@ public class TransactionImpl implements InternalTransaction
private
ResourceIterator
<
Node
>
nodesByLabelAndProperty
(
KernelTransaction
transaction
,
int
labelId
,
IndexQuery
query
)
{
Statement
statement
=
transaction
.
acquireStatement
();
Read
read
=
transaction
.
dataRead
();
if
(
query
.
propertyKeyId
()
==
TokenRead
.
NO_TOKEN
||
labelId
==
TokenRead
.
NO_TOKEN
)
{
statement
.
close
();
return
emptyResourceIterator
();
}
Iterator
<
IndexDescriptor
>
iterator
=
transaction
.
schemaRead
().
index
(
SchemaDescriptor
.
forLabel
(
labelId
,
query
.
propertyKeyId
()
)
);
...
...
@@ -660,7 +648,7 @@ public class TransactionImpl implements InternalTransaction
IndexReadSession
indexSession
=
read
.
indexReadSession
(
index
);
read
.
nodeIndexSeek
(
indexSession
,
cursor
,
IndexOrder
.
NONE
,
false
,
query
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
statement
,
this
::
newNodeEntity
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
this
::
newNodeEntity
);
}
catch
(
KernelException
e
)
{
...
...
@@ -668,7 +656,7 @@ public class TransactionImpl implements InternalTransaction
}
}
return
getNodesByLabelAndPropertyWithoutIndex
(
statement
,
labelId
,
query
);
return
getNodesByLabelAndPropertyWithoutIndex
(
labelId
,
query
);
}
@Override
...
...
@@ -691,8 +679,7 @@ public class TransactionImpl implements InternalTransaction
return
!
closed
;
}
private
ResourceIterator
<
Node
>
getNodesByLabelAndPropertyWithoutIndex
(
Statement
statement
,
int
labelId
,
IndexQuery
...
queries
)
private
ResourceIterator
<
Node
>
getNodesByLabelAndPropertyWithoutIndex
(
int
labelId
,
IndexQuery
...
queries
)
{
KernelTransaction
transaction
=
kernelTransaction
();
...
...
@@ -706,7 +693,6 @@ public class TransactionImpl implements InternalTransaction
nodeLabelCursor
,
nodeCursor
,
propertyCursor
,
statement
,
this
::
newNodeEntity
,
queries
);
}
...
...
@@ -714,12 +700,10 @@ public class TransactionImpl implements InternalTransaction
private
ResourceIterator
<
Node
>
nodesByLabelAndProperties
(
KernelTransaction
transaction
,
int
labelId
,
IndexQuery
.
ExactPredicate
...
queries
)
{
Statement
statement
=
transaction
.
acquireStatement
();
Read
read
=
transaction
.
dataRead
();
if
(
isInvalidQuery
(
labelId
,
queries
)
)
{
statement
.
close
();
return
emptyResourceIterator
();
}
...
...
@@ -733,14 +717,14 @@ public class TransactionImpl implements InternalTransaction
NodeValueIndexCursor
cursor
=
transaction
.
cursors
().
allocateNodeValueIndexCursor
();
IndexReadSession
indexSession
=
read
.
indexReadSession
(
index
);
read
.
nodeIndexSeek
(
indexSession
,
cursor
,
IndexOrder
.
NONE
,
false
,
getReorderedIndexQueries
(
index
.
schema
().
getPropertyIds
(),
queries
)
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
statement
,
this
::
newNodeEntity
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
this
::
newNodeEntity
);
}
catch
(
KernelException
e
)
{
// weird at this point but ignore and fallback to a label scan
}
}
return
getNodesByLabelAndPropertyWithoutIndex
(
statement
,
labelId
,
queries
);
return
getNodesByLabelAndPropertyWithoutIndex
(
labelId
,
queries
);
}
private
static
IndexQuery
[]
getReorderedIndexQueries
(
int
[]
indexPropertyIds
,
IndexQuery
[]
queries
)
...
...
@@ -764,18 +748,16 @@ public class TransactionImpl implements InternalTransaction
private
ResourceIterator
<
Node
>
allNodesWithLabel
(
final
Label
myLabel
)
{
KernelTransaction
ktx
=
kernelTransaction
();
Statement
statement
=
ktx
.
acquireStatement
();
int
labelId
=
ktx
.
tokenRead
().
nodeLabel
(
myLabel
.
name
()
);
if
(
labelId
==
TokenRead
.
NO_TOKEN
)
{
statement
.
close
();
return
Iterators
.
emptyResourceIterator
();
}
NodeLabelIndexCursor
cursor
=
ktx
.
cursors
().
allocateNodeLabelIndexCursor
();
ktx
.
dataRead
().
nodeLabelScan
(
labelId
,
cursor
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
statement
,
this
::
newNodeEntity
);
return
new
NodeCursorResourceIterator
<>(
cursor
,
this
::
newNodeEntity
);
}
private
static
IndexDescriptor
findMatchingIndex
(
KernelTransaction
transaction
,
int
labelId
,
int
[]
propertyIds
)
...
...
This diff is collapsed.
Click to expand it.
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/NodeCursorResourceIterator.java
+
6
-
6
View file @
efc02528
...
...
@@ -20,16 +20,16 @@
package
org.neo4j.kernel.impl.coreapi.internal
;
import
org.neo4j.internal.kernel.api.NodeIndexCursor
;
import
org.neo4j.io.IOUtils
;
import
org.neo4j.
kernel.api.Statem
ent
;
import
static
org
.
neo4j
.
io
.
IOUtils
.
closeAllSil
ent
ly
;
public
class
NodeCursorResourceIterator
<
CURSOR
extends
NodeIndexCursor
>
extends
PrefetchingNodeResourceIterator
{
private
final
CURSOR
cursor
;
public
NodeCursorResourceIterator
(
CURSOR
cursor
,
Statement
statement
,
NodeFactory
nodeFactory
)
public
NodeCursorResourceIterator
(
CURSOR
cursor
,
NodeFactory
nodeFactory
)
{
super
(
statement
,
nodeFactory
);
super
(
nodeFactory
);
this
.
cursor
=
cursor
;
}
...
...
@@ -48,8 +48,8 @@ public class NodeCursorResourceIterator<CURSOR extends NodeIndexCursor> extends
}
@Override
void
closeResources
(
Statement
statement
)
void
closeResources
()
{
IOUtils
.
closeAllSilently
(
statement
,
cursor
);
closeAllSilently
(
cursor
);
}
}
This diff is collapsed.
Click to expand it.
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/NodeLabelPropertyIterator.java
+
3
-
5
View file @
efc02528
...
...
@@ -25,7 +25,6 @@ import org.neo4j.internal.kernel.api.NodeLabelIndexCursor;
import
org.neo4j.internal.kernel.api.PropertyCursor
;
import
org.neo4j.internal.kernel.api.Read
;
import
org.neo4j.io.IOUtils
;
import
org.neo4j.kernel.api.Statement
;
public
class
NodeLabelPropertyIterator
extends
PrefetchingNodeResourceIterator
{
...
...
@@ -40,11 +39,10 @@ public class NodeLabelPropertyIterator extends PrefetchingNodeResourceIterator
NodeLabelIndexCursor
nodeLabelCursor
,
NodeCursor
nodeCursor
,
PropertyCursor
propertyCursor
,
Statement
statement
,
NodeFactory
nodeFactory
,
IndexQuery
...
queries
)
{
super
(
statement
,
nodeFactory
);
super
(
nodeFactory
);
this
.
read
=
read
;
this
.
nodeLabelCursor
=
nodeLabelCursor
;
this
.
nodeCursor
=
nodeCursor
;
...
...
@@ -74,9 +72,9 @@ public class NodeLabelPropertyIterator extends PrefetchingNodeResourceIterator
}
@Override
void
closeResources
(
Statement
statement
)
void
closeResources
()
{
IOUtils
.
closeAllSilently
(
statement
,
nodeLabelCursor
,
nodeCursor
,
propertyCursor
);
IOUtils
.
closeAllSilently
(
nodeLabelCursor
,
nodeCursor
,
propertyCursor
);
}
private
boolean
hasPropertiesWithValues
()
...
...
This diff is collapsed.
Click to expand it.
community/kernel/src/main/java/org/neo4j/kernel/impl/coreapi/internal/PrefetchingNodeResourceIterator.java
+
3
-
6
View file @
efc02528
...
...
@@ -23,11 +23,9 @@ import java.util.NoSuchElementException;
import
org.neo4j.graphdb.Node
;
import
org.neo4j.graphdb.ResourceIterator
;
import
org.neo4j.kernel.api.Statement
;
abstract
class
PrefetchingNodeResourceIterator
implements
ResourceIterator
<
Node
>
{
private
final
Statement
statement
;
private
final
NodeFactory
nodeFactory
;
private
long
next
;
private
boolean
closed
;
...
...
@@ -35,9 +33,8 @@ abstract class PrefetchingNodeResourceIterator implements ResourceIterator<Node>
private
static
final
long
NOT_INITIALIZED
=
-
2L
;
protected
static
final
long
NO_ID
=
-
1L
;
PrefetchingNodeResourceIterator
(
Statement
statement
,
NodeFactory
nodeFactory
)
PrefetchingNodeResourceIterator
(
NodeFactory
nodeFactory
)
{
this
.
statement
=
statement
;
this
.
nodeFactory
=
nodeFactory
;
this
.
next
=
NOT_INITIALIZED
;
}
...
...
@@ -71,12 +68,12 @@ abstract class PrefetchingNodeResourceIterator implements ResourceIterator<Node>
if
(
!
closed
)
{
next
=
NO_ID
;
closeResources
(
statement
);
closeResources
();
closed
=
true
;
}
}
abstract
long
fetchNext
();
abstract
void
closeResources
(
Statement
statement
);
abstract
void
closeResources
();
}
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment