@@ -455,13 +455,19 @@ private java.lang.reflect.Field getTableIdField() throws ClassNotFoundException,
455455 final java .lang .reflect .Field [] f = c .getDeclaredFields ();
456456 for (int i =0 ; i <f .length ; i ++) {
457457 Id a = f [i ].getAnnotation (Id .class );
458- if (a != null ) {
458+ if (a != null ) {
459459 return f [i ];
460460 }
461461 }
462462 return null ;
463463 }
464464
465+ public boolean isIdFieldNoCheck () throws ClassNotFoundException , MalformedURLException {
466+ java .lang .reflect .Field f = getTableIdField ();
467+ NoCheck a = f .getAnnotation (NoCheck .class );
468+ return a == null ? false : true ;
469+ }
470+
465471 public java .lang .reflect .Field getIdField () {
466472 return this .idfield ;
467473 }
@@ -889,12 +895,15 @@ private void ident(final Object o, final Session s, final LLT llt) throws Except
889895 }
890896 } else {
891897 //for distributed ids, id value don't replace exists > 0
892- final long exists = ( long ) f [i ].get ( o );
893- if ( exists == 0 ) {
894- if (f [ i ]. getType (). getName (). equals ( "int" ) ) {
898+ if ( f [i ].getType (). getName (). equals ( "int" )) {
899+ final int exists = ( int ) f [ i ]. get ( o );
900+ if (exists == 0 ) {
895901 f [i ].setInt (o , (int ) (this .getIdValue (s , llt ) * Storage .MAX_NODES ) + Config .getConfig ().LOCAL_NODE_ID );
896902 }
897- if (f [i ].getType ().getName ().equals ("long" )) {
903+ }
904+ if (f [i ].getType ().getName ().equals ("long" )) {
905+ final long exists = (long )f [i ].get (o );
906+ if (exists == 0 ) {
898907 f [i ].setLong (o , (this .getIdValue (s , llt ) * Storage .MAX_NODES ) + Config .getConfig ().LOCAL_NODE_ID );
899908 }
900909 }
@@ -1206,33 +1215,35 @@ protected void delete (final Object o, final Session s, LLT extllt) throws Excep
12061215 public synchronized FrameData createNewFrame (final FrameData frame , final int fileId , final int frameType , final long allocId , final boolean started , final boolean setlbs , final boolean external , final Session s , final LLT llt ) throws Exception {
12071216 final DataFile df = Storage .getStorage ().getDataFileById (fileId );
12081217 final FrameData bd = df .createNewFrame (frame , frameType , allocId , started , external , this , s , llt );
1209- boolean done = true ;
1218+ if (!external ) {
1219+ boolean done = true ;
12101220//System.out.println("Table.createNewFrame: old="+(frame==null?"null":frame.getFrameId())+" frame="+(frame.getFrame()==null?"null":(frame.getFrame().getFrameData()==null?":null":frame.getFrame().getFrameData().getFrameId())));
1211- if (setlbs && !this .getName ().equals ("su.interference.persistent.UndoChunk" )) {
1212- done = false ;
1213- for (WaitFrame wb : this .lbs ) {
1214- if (wb .trySetBd (frame , bd , frameType )) {
1215- done = true ;
1216- break ;
1221+ if (setlbs && !this .getName ().equals ("su.interference.persistent.UndoChunk" )) {
1222+ done = false ;
1223+ for (WaitFrame wb : this .lbs ) {
1224+ if (wb .trySetBd (frame , bd , frameType )) {
1225+ done = true ;
1226+ break ;
1227+ }
12171228 }
12181229 }
1219- }
1220- if (! done ) {
1221- // todo evicted frame -> metric
1222- for ( WaitFrame wb : this . lbs ) {
1223- if ( wb . getBd (). getFile () == bd . getFile ()) {
1224- // remove evicted ptr from prevframe
1225- frame . setNextFrame ( wb . getBd (). getPtr () );
1226- s . persist ( frame );
1230+ if (! done ) {
1231+ // todo evicted frame -> metric
1232+ for ( WaitFrame wb : this . lbs ) {
1233+ if ( wb . getBd (). getFile () == bd . getFile () ) {
1234+ // remove evicted ptr from prevframe
1235+ frame . setNextFrame ( wb . getBd (). getPtr ());
1236+ s . persist ( frame );
1237+ }
12271238 }
1228- }
1229- bd . clearCurrent ( );
1230- s . persist ( bd );
1231- logger . info ( "evict frame " + bd . getObjectId () + ":" + bd . getFile () + ":" + bd . getPtr () + " " + Thread . currentThread (). getName ());
1232- for ( WaitFrame wb : this . lbs ) {
1233- final FrameData bd_ = wb . acquire ( fileId );
1234- if ( bd_ != null ) {
1235- return bd_ ;
1239+ bd . clearCurrent ();
1240+ s . persist ( bd );
1241+ logger . info ( "evict frame " + bd . getObjectId () + ":" + bd . getFile () + ":" + bd . getPtr () + " " + Thread . currentThread (). getName () );
1242+ for ( WaitFrame wb : this . lbs ) {
1243+ final FrameData bd_ = wb . acquire ( fileId );
1244+ if ( bd_ != null ) {
1245+ return bd_ ;
1246+ }
12361247 }
12371248 }
12381249 }
@@ -1508,30 +1519,32 @@ public DataChunk getChunkByEntity (Object o, Session s) throws IOException, Invo
15081519 } else {
15091520 final EntityContainer to = (EntityContainer )o ;
15101521 final Table idt = getFirstIndexByIdColumn ();
1511- if (to .getDataChunk ()==null ) {
1512- final DataChunkId dcid = new DataChunkId (o , s );
1513- if (idt !=null ) {
1514- final DataChunk idc = idt .getObjectByKey (new ValueSet (dcid .getId ()));
1515- if (idc ==null ) {
1516- return null ;
1517- }
1518- final IndexChunk ibx = (IndexChunk )idc .getEntity ();
1519- return ibx .getDataChunk ();
1520- } else {
1521- final byte [] id = dcid .getIdBytes ();
1522- if (id != null ) {
1523- final List <FrameData > bds = Instance .getInstance ().getTableById (this .getObjectId ()).getFrames ();
1524- for (FrameData b : bds ) {
1525- for (Chunk dc : b .getDataFrame ().getFrameChunks (s )) {
1526- if (Arrays .equals (id , ((DataChunk ) dc ).getSerializedId (s ))) {
1527- return (DataChunk ) dc ;
1522+ if (!isIdFieldNoCheck ()) {
1523+ if (to .getDataChunk () == null ) {
1524+ final DataChunkId dcid = new DataChunkId (o , s );
1525+ if (idt != null ) {
1526+ final DataChunk idc = idt .getObjectByKey (new ValueSet (dcid .getId ()));
1527+ if (idc == null ) {
1528+ return null ;
1529+ }
1530+ final IndexChunk ibx = (IndexChunk ) idc .getEntity ();
1531+ return ibx .getDataChunk ();
1532+ } else {
1533+ final byte [] id = dcid .getIdBytes ();
1534+ if (id != null ) {
1535+ final List <FrameData > bds = Instance .getInstance ().getTableById (this .getObjectId ()).getFrames ();
1536+ for (FrameData b : bds ) {
1537+ for (Chunk dc : b .getDataFrame ().getFrameChunks (s )) {
1538+ if (Arrays .equals (id , ((DataChunk ) dc ).getSerializedId (s ))) {
1539+ return (DataChunk ) dc ;
1540+ }
15281541 }
15291542 }
15301543 }
15311544 }
1545+ } else {
1546+ return to .getDataChunk ();
15321547 }
1533- } else {
1534- return to .getDataChunk ();
15351548 }
15361549 }
15371550
0 commit comments