From 51616296674d24601e9b51cc2cc75ee4cab3f295 Mon Sep 17 00:00:00 2001 From: "yuriy.glotanov" Date: Wed, 9 Dec 2020 21:10:52 +0300 Subject: [PATCH] 2020.3 hotfix (NPE in session.find()) --- src/main/java/su/interference/core/Config.java | 1 + src/main/java/su/interference/core/DataChunk.java | 14 ++++++++------ src/main/java/su/interference/core/SyncFrame.java | 2 +- .../java/su/interference/persistent/FrameData.java | 6 +++++- .../java/su/interference/persistent/Table.java | 4 ++-- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/su/interference/core/Config.java b/src/main/java/su/interference/core/Config.java index e5b8871..97c11ec 100644 --- a/src/main/java/su/interference/core/Config.java +++ b/src/main/java/su/interference/core/Config.java @@ -113,6 +113,7 @@ public class Config { public final int READ_BUFFER_SIZE = 33554432; public final int WRITE_BUFFER_SIZE = 33554432; // cleanup + public final int TRANS_CLEANUP_TIMEOUT = 5000; public final int CLEANUP_TIMEOUT = 3000; public final int CLEANUP_PROTECTION_THR = 1000; public final int IX_CLEANUP_PROTECTION_THR = 5000; diff --git a/src/main/java/su/interference/core/DataChunk.java b/src/main/java/su/interference/core/DataChunk.java index 1819d3d..a67a9d1 100644 --- a/src/main/java/su/interference/core/DataChunk.java +++ b/src/main/java/su/interference/core/DataChunk.java @@ -176,10 +176,6 @@ public Table getT() { return t; } - protected void setT(Table t) { - this.t = t; - } - public Comparable getId (Field idfield, Session s) throws InvocationTargetException, NoSuchMethodException, IllegalAccessException { if (serializedId==null) { if (entity==null) { @@ -325,12 +321,18 @@ public DataChunk (ValueSet vs, Session s, Table t) { //serializer INSERT ONLY!!! (with generate Id value) public DataChunk (Object o, Session s) { - this(o, s, null); + this(o, s, null, null); + } + + //serializer INSERT ONLY!!! (with generate Id value) + public DataChunk (Object o, Session s, Table t) { + this(o, s, null, t); } //serializer INSERT ONLY!!! (with generate Id value) - rowid for index chunk - public DataChunk (Object o, Session s, RowId r) { + public DataChunk (Object o, Session s, RowId r, Table t) { this.entity = o; + this.t = t; this.state = NORMAL_STATE; this.header = new RowHeader(r, null, getChunk().length, false); } diff --git a/src/main/java/su/interference/core/SyncFrame.java b/src/main/java/su/interference/core/SyncFrame.java index d3dcc47..055ad9f 100644 --- a/src/main/java/su/interference/core/SyncFrame.java +++ b/src/main/java/su/interference/core/SyncFrame.java @@ -89,7 +89,7 @@ public SyncFrame(Frame frame, Session s, FreeFrame fb, boolean proc) throws Exce className = bd == null ? null : t.getName(); rtran = frame.getLiveTransactions(); - uframes = allowR ? bd.getLiveUFrameAllocIds() : null; + uframes = allowR ? bd == null ? null : bd.getLiveUFrameAllocIds() : null; if (frame.getClass().getName().equals("su.interference.core.DataFrame")) { if (frame.getType()!=0) { diff --git a/src/main/java/su/interference/persistent/FrameData.java b/src/main/java/su/interference/persistent/FrameData.java index 7262319..d23ce90 100644 --- a/src/main/java/su/interference/persistent/FrameData.java +++ b/src/main/java/su/interference/persistent/FrameData.java @@ -212,7 +212,7 @@ public ArrayList getFrameEntities(Session s) throws Exception { public Frame getFrame() throws Exception { if (frame == null) { - if (getDataObject().isIndex()) { + if (isIndex()) { frame = getIndexFrame(); } else { frame = getDataFrame(); @@ -222,6 +222,10 @@ public Frame getFrame() throws Exception { return frame; } + public boolean isIndex() { + return getDataObject().isIndex(); + } + public boolean isFrame() { return frame != null; } diff --git a/src/main/java/su/interference/persistent/Table.java b/src/main/java/su/interference/persistent/Table.java index fa25772..5d44071 100644 --- a/src/main/java/su/interference/persistent/Table.java +++ b/src/main/java/su/interference/persistent/Table.java @@ -1151,7 +1151,7 @@ protected DataChunk persist (final Object o, final Session s, final LLT extllt) this.ident(o, s, llt); //ident system entities during persist } - final DataChunk nc = new DataChunk(o, s); + final DataChunk nc = new DataChunk(o, s, this); final int len = nc.getBytesAmount(); final WaitFrame bdw = getAvailableFrame(o, fpart); final FrameData bd = bdw.getBd(); @@ -1797,7 +1797,7 @@ private byte[] append(byte[] b, byte[] toAdd){ //rowid used in DataChunk constructor for build standalone indexes private synchronized void add (RowId rowid, Object o, Session s, LLT extllt) throws Exception { - final DataChunk dc = new DataChunk(o, s, rowid); + final DataChunk dc = new DataChunk(o, s, rowid, this); final int len = dc.getBytesAmount(); dc.getHeader().setTran(s.getTransaction());