/* * This file is part of rasdaman community. * * Rasdaman community is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Rasdaman community is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ package rasj.test; import rasj.*; import rasj.global.*; import org.odmg.*; import java.util.*; import java.io.*; public class MassLoadTest implements RasGlobalDefs { public static void main(String[] args) { String hostname = null; String port = null; Database mydb = null; Transaction myta = null; RasGMArray myMDD = null; Implementation myApp = null; OQLQuery myQuery = null; String collectionName = "testCollection"; int tileSize = 1000; int overallSize = 200000; int commitInterval = 50; /******************************************* * * * Usage: MassLoadTest hostname [port] * * * *******************************************/ // we need the hostname if(args.length>0 && args[0] == null) { System.out.println("Please provide the hostname as a parameter when calling this test-program."); System.exit(-1); } else hostname = args[0]; // is there a port specified? if(args.length>1 && args[1] != null) port = args[1]; else port = "8080"; try { myApp = new RasImplementation("http://" + hostname + ":" + port); mydb = myApp.newDatabase(); System.err.println("Open Database ..."); mydb.open("RASBASE",Database.OPEN_READ_WRITE); System.err.println(" ok."); myta = myApp.newTransaction(); System.err.println("Begin transaction ..."); myta.begin(); System.err.println(" ok."); //create test collection System.err.println("Create a test collection ..."); myQuery = myApp.newOQLQuery(); myQuery.create("create collection $1 GreySet"); //myQuery.create("drop collection $1"); myQuery.bind(collectionName); myQuery.execute(); System.err.println(" ok."); myta.commit(); // init insertion tile System.err.println("create test arrays ..."); myMDD = new RasGMArray(new RasMInterval("[0:" + (tileSize-1) + ",0:" + (tileSize-1) + "]"),1); int cells = tileSize*tileSize; byte[] mydata = new byte[cells]; for(int i = 0; i < cells; i++) mydata[i]=0; myMDD.setArray(mydata); myMDD.setObjectTypeName("GreyImage"); // now insert tiles boolean first = true; myta.begin(); int dimX = 0; int dimY = 0; String domain = null; int finished = 1; int counter = (int)Math.abs(overallSize/tileSize); for(int x = 0; x < counter; x++) { dimX += tileSize; dimY = 0; for(int y = 0; y < counter; y++) { dimY += tileSize; // init mdd RasGMArray myMDD2 = new RasGMArray(new RasMInterval("[" + String.valueOf(dimX-tileSize) + ":" + String.valueOf(dimX-1) + "," + String.valueOf(dimY-tileSize) + ":" + String.valueOf(dimY-1) + "]"),1); cells = tileSize*tileSize; byte[] mydata2 = new byte[cells]; for(int i = 0; i < cells; i++) mydata2[i]=0; myMDD2.setArray(mydata2); myMDD2.setObjectTypeName("GreyImage"); // prepare query myQuery = myApp.newOQLQuery(); if(first) { myQuery.create("insert into $1 values $2"); first = false; } else myQuery.create("update $1 AS img SET img ASSIGN $2"); myQuery.bind(collectionName); myQuery.bind(myMDD2); // execute query System.err.println("Inserting tile " + myMDD2.spatialDomain()); myQuery.execute(); finished += 1; // commit? if(finished == commitInterval) { myta.commit(); System.err.println("... committed, begin new transaction ..."); myta = myApp.newTransaction(); myta.begin(); finished = 1; } } // now write the rest of y if there is something left: if(dimY < overallSize-1) { RasGMArray myMDD3 = new RasGMArray(new RasMInterval("[" + String.valueOf(dimX-tileSize) + ":" + String.valueOf(dimX-1) + "," + String.valueOf(dimY) + ":" + String.valueOf(overallSize-1) + "]"),1); cells = tileSize*(overallSize-dimY); byte[] mydata3 = new byte[cells]; for(int i = 0; i < cells; i++) mydata3[i]=0; myMDD3.setArray(mydata3); myMDD3.setObjectTypeName("GreyImage"); // prepare query myQuery = myApp.newOQLQuery(); if(first) { myQuery.create("insert into $1 values $2"); first = false; } else myQuery.create("update $1 AS img SET img ASSIGN $2"); myQuery.bind(collectionName); myQuery.bind(myMDD3); // execute query System.err.println("Inserting tile " + myMDD3.spatialDomain()); myQuery.execute(); finished += 1; // commit? if(finished == commitInterval) { myta.commit(); System.err.println("... committed, begin new transaction ..."); myta = myApp.newTransaction(); myta.begin(); finished = 1; } } } // now write the rest of x if there is something left dimY = 0; if(dimX < overallSize-1) { for(int y = 0; y < counter; y++) { dimY += tileSize; // init mdd RasGMArray myMDD4 = new RasGMArray(new RasMInterval("[" + String.valueOf(dimX) + ":" + String.valueOf(overallSize-1) + "," + String.valueOf(dimY-tileSize) + ":" + String.valueOf(dimY-1) + "]"),1); cells = (overallSize-dimX)*tileSize; byte[] mydata4 = new byte[cells]; for(int i = 0; i < cells; i++) mydata4[i]=0; myMDD4.setArray(mydata4); myMDD4.setObjectTypeName("GreyImage"); // prepare query myQuery = myApp.newOQLQuery(); if(first) { myQuery.create("insert into $1 values $2"); first = false; } else myQuery.create("update $1 AS img SET img ASSIGN $2"); myQuery.bind(collectionName); myQuery.bind(myMDD4); // execute query System.err.println("Inserting tile " + myMDD4.spatialDomain()); myQuery.execute(); finished += 1; // commit? if(finished == commitInterval) { myta.commit(); System.err.println("... committed, begin new transaction ..."); myta = myApp.newTransaction(); myta.begin(); finished = 1; } } // now write the rest of y if available if(dimY < overallSize-1) { RasGMArray myMDD5 = new RasGMArray(new RasMInterval("[" + String.valueOf(dimX) + ":" + String.valueOf(overallSize-1) + "," + String.valueOf(dimY) + ":" + String.valueOf(overallSize-1) + "]"),1); cells = (overallSize-dimX)*(overallSize-dimY); byte[] mydata5 = new byte[cells]; for(int i = 0; i < cells; i++) mydata5[i]=0; myMDD5.setArray(mydata5); myMDD5.setObjectTypeName("GreyImage"); // prepare query myQuery = myApp.newOQLQuery(); if(first) { myQuery.create("insert into $1 values $2"); first = false; } else myQuery.create("update $1 AS img SET img ASSIGN $2"); myQuery.bind(collectionName); myQuery.bind(myMDD5); // execute query System.err.println("Inserting tile " + myMDD5.spatialDomain()); myQuery.execute(); finished += 1; } } // READY! myta.commit(); System.err.println("FINISHED!"); // drop test collection myta = myApp.newTransaction(); myta.begin(); System.err.println("Drop test collection ..."); myQuery = myApp.newOQLQuery(); myQuery.create("drop collection $1"); myQuery.bind(collectionName); myQuery.execute(); System.err.println(" ok."); myta.commit(); myta = myApp.newTransaction(); myta.commit(); } catch ( Exception e ) { System.out.println("ERROR: "); System.out.println(e.getMessage()); if(myta.isOpen()) { System.err.println("Abort transaction ..."); myta.abort(); } System.err.println("Close database ..."); try { mydb.close(); System.err.println(" ok."); } catch ( Exception e2 ) { } System.err.println("Exiting..."); System.exit(-1); } } }