modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/StorageNodeAddressUpgradeTask.java | 54 ++++++++++ 1 file changed, 54 insertions(+)
New commits: commit 6430ccb39805a3b1de2fe7a57d303a6b640ce059 Author: John Sanda jsanda@redhat.com Date: Wed Jul 10 21:32:43 2013 -0400
adding custom java dbupgrade task for updating storage node addresss
Forgot to include this file in my previous commit.
diff --git a/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/StorageNodeAddressUpgradeTask.java b/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/StorageNodeAddressUpgradeTask.java new file mode 100644 index 0000000..9fc90ed --- /dev/null +++ b/modules/core/dbutils/src/main/java/org/rhq/core/db/upgrade/StorageNodeAddressUpgradeTask.java @@ -0,0 +1,54 @@ +package org.rhq.core.db.upgrade; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.rhq.core.db.DatabaseType; +import org.rhq.core.db.DbUtilsI18NFactory; +import org.rhq.core.db.DbUtilsI18NResourceKeys; + +import mazz.i18n.Logger; + +/** + * Updates the address field of storage node entities to ensure we are storing IP addresses and not hostnames. We want + * to store the IP address since that is what Cassandra uses for inter-node communication. JMX operations that return + * nodes will return the node IP addresses and not hostnames. + * + * @author John Sanda + */ +public class StorageNodeAddressUpgradeTask implements DatabaseUpgradeTask { + + private final Logger log = DbUtilsI18NFactory.getLogger(StorageNodeAddressUpgradeTask.class); + + @Override + public void execute(DatabaseType databaseType, Connection connection) throws SQLException { + String sql = "SELECT id, address FROM rhq_storage_node"; + + log.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, sql); + List<Object[]> results = databaseType.executeSelectSql(connection, sql); + + Integer id = null; + String storageNodeAddress = null; + try { + for (Object[] row : results) { + id = (Integer) row[0]; + storageNodeAddress = (String) row[1]; + InetAddress address = InetAddress.getByName(storageNodeAddress); + if (!storageNodeAddress.equals(address.getHostAddress())) { + log.debug(DbUtilsI18NResourceKeys.MESSAGE, "Updating address for StorageNode[id= " + id + ", ]" + + "address= " + storageNodeAddress + "]"); + String update = "UPDATE rhq_storage_node SET address = '" + address.getHostAddress() + "' " + + "WHERE id = " + id; + log.debug(DbUtilsI18NResourceKeys.EXECUTING_SQL, update); + databaseType.executeSql(connection, update); + } + } + } catch (UnknownHostException e) { + throw new RuntimeException("Failed to look up IP address for StorageNode[id =" + id + ", address=" + + storageNodeAddress + "]", e); + } + } +}
rhq-commits@lists.fedorahosted.org