/*
* Copyright (c) 2008-2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.plugins.common;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.Stat;
import com.emc.storageos.db.client.model.StatTimeSeries;
import com.emc.storageos.db.exceptions.DatabaseException;
import com.google.common.collect.Lists;
public class PartitionManager {
private Logger _log = LoggerFactory
.getLogger(PartitionManager.class);
/**
* insert in batches
*
* @param records
* @param partitionSize
* @param dbClient
*/
public void insertInBatches(List<Stat> records, int partitionSize,
DbClient dbClient) {
List<List<Stat>> stat_partitions = Lists.partition(records, partitionSize);
for (List<Stat> partition : stat_partitions) {
Stat[] statBatch = new Stat[partition.size()];
statBatch = partition.toArray(statBatch);
try {
dbClient.insertTimeSeries(StatTimeSeries.class, statBatch);
_log.info("{} Stat records persisted to DB", statBatch.length);
} catch (DatabaseException e) {
_log.error("Error inserting time series records into the database", e);
}
}
}
/**
* insert Discovered Objects in batches
*
* @param records
* @param partitionSize
* @param dbClient
*/
public <T extends DataObject> void insertInBatches(List<T> records, int partitionSize, DbClient dbClient,
String type) {
List<List<T>> volume_partitions = Lists.partition(records, partitionSize);
for (List<T> partition : volume_partitions) {
try {
dbClient.createObject(partition);
_log.info("{} {} Records inserted to DB", partition.size(), type);
} catch (DatabaseException e) {
_log.error("Error inserting {} records into the database:", type, e);
}
}
}
/**
* update Discovered Objects in batches
*
* @param records
* @param partitionSize
* @param dbClient
*/
public <T extends DataObject> void updateInBatches(List<T> records, int partitionSize,
DbClient dbClient, String type) {
List<List<T>> volume_partitions = Lists.partition(records, partitionSize);
for (List<T> partition : volume_partitions) {
try {
dbClient.updateObject(partition);
_log.info("{} {} Records updated to DB", partition.size(), type);
} catch (DatabaseException e) {
_log.error("Error updating {} records into the database:", type, e);
}
}
}
/**
* update Discovered Objects in batches
*
* @param records
* @param partitionSize
* @param dbClient
*/
public <T extends DataObject> void updateAndReIndexInBatches(List<T> records, int partitionSize,
DbClient dbClient, String type) {
List<List<T>> volume_partitions = Lists.partition(records, partitionSize);
for (List<T> partition : volume_partitions) {
try {
dbClient.updateObject(partition);
_log.info("{} {} Records updated and reindexed to DB", partition.size(), type);
} catch (DatabaseException e) {
_log.error("Error updating {} records into the database:", type, e);
}
}
}
}