summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-12-02 15:59:08 +0100
committerJon Bratseth <bratseth@gmail.com>2020-12-02 15:59:08 +0100
commit6e95457b48804e5bf8da03721336cab8e23d7eff (patch)
tree872df6e91ca77c211866b254d3ef4e91ca5304a4 /node-repository
parentb984156c6295acb407b577ffab0055bf767fe892 (diff)
Start over if we cannot alter the db
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java34
1 files changed, 23 insertions, 11 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
index 0b3775a683f..8e90294b4a5 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/QuestMetricsDb.java
@@ -174,7 +174,7 @@ public class QuestMetricsDb extends AbstractComponent implements MetricsDb {
*
* @param e the exception indicating corruption
*/
- private void repair(CairoException e) {
+ private void repair(Exception e) {
log.log(Level.WARNING, "QuestDb seems corrupted, wiping data and starting over", e);
IOUtils.recursiveDeleteDir(new File(dataDir));
initializeDb();
@@ -182,22 +182,34 @@ public class QuestMetricsDb extends AbstractComponent implements MetricsDb {
private void ensureExists(String table) {
SqlExecutionContext context = newContext();
+ if (0 == engine.getStatus(context.getCairoSecurityContext(), new Path(), table)) { // table exists
+ ensureUpdated(table, context);
+ } else {
+ create(table, context);
+ }
+ }
+
+ private void ensureUpdated(String table, SqlExecutionContext context) {
try (SqlCompiler compiler = new SqlCompiler(engine)) {
if (0 == engine.getStatus(context.getCairoSecurityContext(), new Path(), table)) {
ensureColumnExists("inService", "boolean", table, compiler, context); // TODO: Remove after December 2020
ensureColumnExists("stable", "boolean", table, compiler, context); // TODO: Remove after December 2020
}
- else {
- compiler.compile("create table " + table +
- " (hostname string, at timestamp, cpu_util float, mem_total_util float, disk_util float," +
- " application_generation long, inService boolean, stable boolean)" +
- " timestamp(at)" +
- "PARTITION BY DAY;",
- context);
- // We should do this if we get a version where selecting on strings work embedded, see below
- // compiler.compile("alter table " + tableName + " alter column hostname add index", context);
- }
+ } catch (SqlException e) {
+ repair(e);
+ }
+ }
+ private void create(String table, SqlExecutionContext context) {
+ try (SqlCompiler compiler = new SqlCompiler(engine)) {
+ compiler.compile("create table " + table +
+ " (hostname string, at timestamp, cpu_util float, mem_total_util float, disk_util float," +
+ " application_generation long, inService boolean, stable boolean)" +
+ " timestamp(at)" +
+ "PARTITION BY DAY;",
+ context);
+ // We should do this if we get a version where selecting on strings work embedded, see below
+ // compiler.compile("alter table " + tableName + " alter column hostname add index", context);
}
catch (SqlException e) {
throw new IllegalStateException("Could not create Quest db table '" + table + "'", e);