private RrdDb(String rrdPath, URI rrdUri, String externalPath, DataImporter importer, RrdBackendFactory factory, RrdDbPool pool) throws IOException {
this.pool = pool;
rrdUri = Builder.buildUri(rrdPath, rrdUri, factory);
factory = Builder.checkFactory(rrdUri, factory);
backend = factory.getBackend(this, rrdUri, false);
try (DataImporter reader = Builder.resoleImporter(externalPath, importer)) {
backend.setLength(reader.getEstimatedSize());
header = new Header(this, reader);
datasources = new Datasource[reader.getDsCount()];
for (int i = 0; i < datasources.length; i++) {
datasources[i] = new Datasource(this, reader, i);
}
archives = new Archive[reader.getArcCount()];
for (int i = 0; i < archives.length; i++) {
archives[i] = new Archive(this, reader, i);
}
} catch (IOException e) {
backend.rrdClose();
throw e;
}
}