package cookbook;
import java.io.File;
import org.junit.Test;
import water.DKV;
import water.H2O;
import water.Key;
import water.UKV;
import water.Value;
import water.fvec.Frame;
import water.fvec.NFSFileVec;
import water.fvec.ParseDataset2;
import water.util.Log;
/*
* This example parses a data frame, prints key counts and then deletes the data frame from the KV store
*/
public class KeyDemo {
@Test
public void frame_001() {
int initial_keycnt0 = H2O.store_size();
Log.info("initial key count: should be One builtin jobkey and probably a log key: "+initial_keycnt0);
//Log.info(H2O.STORE.toString());
//String fileName = "/Users/nidhimehta/Desktop/data/covtype/covtrain_tit";
String fileName = "../smalldata/iris/iris.csv";
File file = new File(fileName);
Key fkey = NFSFileVec.make(file);
Key okey = Key.make("iris.hex");
//Expected: fkey holds the info before parse and is null after parse, as it passes the data to
// okey which is null before parse.
// int initial_keycnt = H2O.store_size();
Log.info("NFSFile key added to the key store, so should be plus one: "+H2O.store_size());
//Log.info(H2O.STORE.toString());
Log.info("UKV fkey before parse:" + UKV.get(fkey));
Log.info("DKV fkey before parse:" + DKV.get(fkey));
Log.info("UKV okey before parse:" + UKV.get(okey));
Log.info("DKV okey before parse:" + DKV.get(okey));
Frame fr;
fr = ParseDataset2.parse(okey, new Key[]{fkey});
Log.info("-------After parse of file ---------");
Log.info("key count after frame parse: (5)vectors, (5)chunks, (1)vector group keys + 2 keys (-1 NFSkey): "+ H2O.store_size());
//Log.info(H2O.STORE.toString());
Log.info("UKV fkey after parse:" + UKV.get(fkey));
Log.info("DKV fkey after parse:" + DKV.get(fkey));
Log.info("UKV okey after parse:" + UKV.get(okey));
Log.info("DKV okey after parse:" + DKV.get(okey));
Log.info("DKV okey get :" + DKV.get(okey).get());
H2O.KeySnapshot ks = H2O.KeySnapshot.globalSnapshot();
long keyCount = ks.keys().length;
Log.info("Global Keyset count :" + keyCount);
Log.info("Sanity check:key count after a few prints should not change anything;But not so straightforward if more than 1 nodes: "+H2O.store_size());
//Log.info(H2O.STORE.toString());
//UKV.remove(okey); //this does not work use frame.delete cascade deletes the stuff
//DKV.remove(okey);// this will remove just the header and that's all
Frame.delete(okey);
//Log.info(H2O.STORE.toString());
try { Thread.sleep(3000); } catch(InterruptedException _) {} ;
Log.info("After frame delete, just the job key, builtin job key, (and probably a log key and the vector group key) should remain: "+ H2O.store_size());
//Log.info(H2O.STORE.toString());
}
}