diff --git a/client/src/main/java/com/metamx/druid/query/ChainedExecutionQueryRunner.java b/client/src/main/java/com/metamx/druid/query/ChainedExecutionQueryRunner.java index 0dd878c7aad..8acc43a7585 100644 --- a/client/src/main/java/com/metamx/druid/query/ChainedExecutionQueryRunner.java +++ b/client/src/main/java/com/metamx/druid/query/ChainedExecutionQueryRunner.java @@ -20,6 +20,7 @@ package com.metamx.druid.query; import com.google.common.base.Function; +import com.google.common.base.Predicates; import com.google.common.base.Throwables; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -76,7 +77,7 @@ public class ChainedExecutionQueryRunner implements QueryRunner { this.exec = exec; this.ordering = ordering; - this.queryables = Iterables.unmodifiableIterable(queryables); + this.queryables = Iterables.unmodifiableIterable(Iterables.filter(queryables, Predicates.notNull())); } @Override diff --git a/common/src/main/java/com/metamx/druid/aggregation/CountAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/CountAggregatorFactory.java index f4e2265745c..55900394860 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/CountAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/CountAggregatorFactory.java @@ -41,7 +41,7 @@ public class CountAggregatorFactory implements AggregatorFactory @JsonProperty("name") String name ) { - Preconditions.checkNotNull(name, "Must have a valid, non null aggregator name"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); this.name = name; } diff --git a/common/src/main/java/com/metamx/druid/aggregation/DoubleSumAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/DoubleSumAggregatorFactory.java index 0f47561d1d7..ec89a79f39d 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/DoubleSumAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/DoubleSumAggregatorFactory.java @@ -45,8 +45,8 @@ public class DoubleSumAggregatorFactory implements AggregatorFactory @JsonProperty("fieldName") final String fieldName ) { - Preconditions.checkNotNull(name, "Must have a valid, nonl null aggregator name"); - Preconditions.checkNotNull(fieldName, "Must have a valid, non null fieldName"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldName, "Must have a valid, non-null fieldName"); this.name = name; this.fieldName = fieldName; diff --git a/common/src/main/java/com/metamx/druid/aggregation/HistogramAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/HistogramAggregatorFactory.java index 5bc4a40a420..6c65cd95f28 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/HistogramAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/HistogramAggregatorFactory.java @@ -51,8 +51,8 @@ public class HistogramAggregatorFactory implements AggregatorFactory @JsonProperty("breaks") final List breaksList ) { - Preconditions.checkNotNull(name, "Must have a valid, nonl null aggregator name"); - Preconditions.checkNotNull(fieldName, "Must have a valid, non null fieldName"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldName, "Must have a valid, non-null fieldName"); this.name = name; this.fieldName = fieldName; diff --git a/common/src/main/java/com/metamx/druid/aggregation/JavaScriptAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/JavaScriptAggregatorFactory.java index 7e4c1a66c6a..a8375f294fa 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/JavaScriptAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/JavaScriptAggregatorFactory.java @@ -63,11 +63,11 @@ public class JavaScriptAggregatorFactory implements AggregatorFactory @JsonProperty("fnCombine") final String fnCombine ) { - Preconditions.checkNotNull(name, "Must have a valid, non null aggregator name"); - Preconditions.checkNotNull(fieldNames, "Must have a valid, non null fieldNames"); - Preconditions.checkNotNull(fnAggregate, "Must have a valid, non null fnAggregate"); - Preconditions.checkNotNull(fnReset, "Must have a valid, non null fnReset"); - Preconditions.checkNotNull(fnCombine, "Must have a valid, non null fnCombine"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldNames, "Must have a valid, non-null fieldNames"); + Preconditions.checkNotNull(fnAggregate, "Must have a valid, non-null fnAggregate"); + Preconditions.checkNotNull(fnReset, "Must have a valid, non-null fnReset"); + Preconditions.checkNotNull(fnCombine, "Must have a valid, non-null fnCombine"); this.name = name; this.fieldNames = fieldNames; diff --git a/common/src/main/java/com/metamx/druid/aggregation/LongSumAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/LongSumAggregatorFactory.java index 1aeb5e6471d..07e04254f76 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/LongSumAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/LongSumAggregatorFactory.java @@ -45,8 +45,8 @@ public class LongSumAggregatorFactory implements AggregatorFactory @JsonProperty("fieldName") final String fieldName ) { - Preconditions.checkNotNull(name, "Must have a valid, nonl null aggregator name"); - Preconditions.checkNotNull(fieldName, "Must have a valid, non null fieldName"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldName, "Must have a valid, non-null fieldName"); this.name = name; this.fieldName = fieldName; diff --git a/common/src/main/java/com/metamx/druid/aggregation/MaxAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/MaxAggregatorFactory.java index dda25b355d7..45cd85257f7 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/MaxAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/MaxAggregatorFactory.java @@ -45,8 +45,8 @@ public class MaxAggregatorFactory implements AggregatorFactory @JsonProperty("fieldName") final String fieldName ) { - Preconditions.checkNotNull(name, "Must have a valid, non null aggregator name"); - Preconditions.checkNotNull(fieldName, "Must have a valid, non null fieldName"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldName, "Must have a valid, non-null fieldName"); this.name = name; this.fieldName = fieldName; diff --git a/common/src/main/java/com/metamx/druid/aggregation/MinAggregatorFactory.java b/common/src/main/java/com/metamx/druid/aggregation/MinAggregatorFactory.java index 5b92072be07..a6d19ebd8e5 100644 --- a/common/src/main/java/com/metamx/druid/aggregation/MinAggregatorFactory.java +++ b/common/src/main/java/com/metamx/druid/aggregation/MinAggregatorFactory.java @@ -45,8 +45,8 @@ public class MinAggregatorFactory implements AggregatorFactory @JsonProperty("fieldName") final String fieldName ) { - Preconditions.checkNotNull(name, "Must have a valid, non null aggregator name"); - Preconditions.checkNotNull(fieldName, "Must have a valid, non null fieldName"); + Preconditions.checkNotNull(name, "Must have a valid, non-null aggregator name"); + Preconditions.checkNotNull(fieldName, "Must have a valid, non-null fieldName"); this.name = name; this.fieldName = fieldName; diff --git a/common/src/main/java/com/metamx/druid/db/DbConnector.java b/common/src/main/java/com/metamx/druid/db/DbConnector.java index cb202b1a8f2..a76536bed6e 100644 --- a/common/src/main/java/com/metamx/druid/db/DbConnector.java +++ b/common/src/main/java/com/metamx/druid/db/DbConnector.java @@ -140,15 +140,16 @@ public class DbConnector @Override public Void withHandle(Handle handle) throws Exception { - List> table = handle.select(String.format("SHOW tables LIKE '%s'", tableName)); + if ( !handle.getConnection().getMetaData().getDatabaseProductName().contains("PostgreSQL") ) { + List> table = handle.select(String.format("SHOW tables LIKE '%s'", tableName)); - if (table.isEmpty()) { - log.info("Creating table[%s]", tableName); - handle.createStatement(sql).execute(); - } else { - log.info("Table[%s] existed: [%s]", tableName, table); + if (table.isEmpty()) { + log.info("Creating table[%s]", tableName); + handle.createStatement(sql).execute(); + } else { + log.info("Table[%s] existed: [%s]", tableName, table); + } } - return null; } } diff --git a/install/postgresql-schema.sql b/install/postgresql-schema.sql new file mode 100644 index 00000000000..180ec5e6702 --- /dev/null +++ b/install/postgresql-schema.sql @@ -0,0 +1,49 @@ +-- Table structure for table `config` +-- + + +DROP TABLE IF EXISTS prod_config; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE prod_config ( + name varchar(255) NOT NULL, + payload bytea NOT NULL, + PRIMARY KEY (name) +); +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rules` +-- +DROP TABLE IF EXISTS prod_rules; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE prod_rules ( + id varchar(255) NOT NULL, + dataSource varchar(255) NOT NULL, + version text NOT NULL, + payload text NOT NULL, + PRIMARY KEY (id) +); +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `segments` +-- + +DROP TABLE IF EXISTS prod_segments; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE prod_segments ( + id varchar(255) NOT NULL, + dataSource varchar(255) NOT NULL, + created_date text NOT NULL, + start text NOT NULL, + "end" text NOT NULL, + partitioned SMALLINT NOT NULL, + version text NOT NULL, + used boolean NOT NULL, + payload text NOT NULL, + PRIMARY KEY (id) +); + diff --git a/realtime/src/main/java/com/metamx/druid/realtime/DbSegmentPublisher.java b/realtime/src/main/java/com/metamx/druid/realtime/DbSegmentPublisher.java index 7a7e0e8ed7f..67177e8f45c 100644 --- a/realtime/src/main/java/com/metamx/druid/realtime/DbSegmentPublisher.java +++ b/realtime/src/main/java/com/metamx/druid/realtime/DbSegmentPublisher.java @@ -62,7 +62,7 @@ public class DbSegmentPublisher implements SegmentPublisher { handle.createStatement( String.format( - "INSERT INTO %s (id, dataSource, created_date, start, end, partitioned, version, used, payload) " + "INSERT INTO %s (id, dataSource, created_date, start, \"end\", partitioned, version, used, payload) " + "VALUES (:id, :dataSource, :created_date, :start, :end, :partitioned, :version, :used, :payload)", config.getSegmentTable() ) diff --git a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java index 708c61d9e24..44ea802082c 100644 --- a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java +++ b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java @@ -192,7 +192,7 @@ public class DatabaseRuleManager return handle.createQuery( // Return latest version rule by dataSource String.format( - "SELECT %1$s.dataSource, %1$s.payload FROM %1$s INNER JOIN(SELECT dataSource, max(version) as version, payload FROM %1$s GROUP BY dataSource) ds ON %1$s.datasource = ds.datasource and %1$s.version = ds.version", + "SELECT %1$s.dataSource, %1$s.payload FROM %1$s INNER JOIN(SELECT dataSource, max(version) as version FROM %1$s GROUP BY dataSource) ds ON %1$s.datasource = ds.datasource and %1$s.version = ds.version", config.getRuleTable() ) ).fold( diff --git a/server/src/main/java/com/metamx/druid/db/DatabaseSegmentManager.java b/server/src/main/java/com/metamx/druid/db/DatabaseSegmentManager.java index 2ea9056627f..53c853d5a21 100644 --- a/server/src/main/java/com/metamx/druid/db/DatabaseSegmentManager.java +++ b/server/src/main/java/com/metamx/druid/db/DatabaseSegmentManager.java @@ -203,7 +203,7 @@ public class DatabaseSegmentManager for (DataSegment segment : segments) { batch.add( String.format( - "UPDATE %s SET used=1 WHERE id = '%s'", + "UPDATE %s SET used=true WHERE id = '%s'", config.getSegmentTable(), segment.getIdentifier() ) @@ -234,7 +234,7 @@ public class DatabaseSegmentManager public Void withHandle(Handle handle) throws Exception { handle.createStatement( - String.format("UPDATE %s SET used=1 WHERE id = :id", config.getSegmentTable()) + String.format("UPDATE %s SET used=true WHERE id = :id", config.getSegmentTable()) ) .bind("id", segmentId) .execute(); @@ -268,7 +268,7 @@ public class DatabaseSegmentManager public Void withHandle(Handle handle) throws Exception { handle.createStatement( - String.format("UPDATE %s SET used=0 WHERE dataSource = :dataSource", config.getSegmentTable()) + String.format("UPDATE %s SET used=false WHERE dataSource = :dataSource", config.getSegmentTable()) ) .bind("dataSource", ds) .execute(); @@ -298,7 +298,7 @@ public class DatabaseSegmentManager public Void withHandle(Handle handle) throws Exception { handle.createStatement( - String.format("UPDATE %s SET used=0 WHERE id = :segmentID", config.getSegmentTable()) + String.format("UPDATE %s SET used=false WHERE id = :segmentID", config.getSegmentTable()) ).bind("segmentID", segmentID) .execute(); @@ -398,7 +398,7 @@ public class DatabaseSegmentManager public List> withHandle(Handle handle) throws Exception { return handle.createQuery( - String.format("SELECT payload FROM %s WHERE used=1", config.getSegmentTable()) + String.format("SELECT payload FROM %s WHERE used=true", config.getSegmentTable()) ).list(); } } diff --git a/server/src/main/java/com/metamx/druid/loading/HdfsDataSegmentPusherConfig.java b/server/src/main/java/com/metamx/druid/loading/HdfsDataSegmentPusherConfig.java index c3f6d603ccb..b27d03672bc 100644 --- a/server/src/main/java/com/metamx/druid/loading/HdfsDataSegmentPusherConfig.java +++ b/server/src/main/java/com/metamx/druid/loading/HdfsDataSegmentPusherConfig.java @@ -21,12 +21,10 @@ package com.metamx.druid.loading; import org.skife.config.Config; -import java.io.File; - /** */ public abstract class HdfsDataSegmentPusherConfig { @Config("druid.pusher.hdfs.storageDirectory") - public abstract File getStorageDirectory(); + public abstract String getStorageDirectory(); } diff --git a/server/src/main/java/com/metamx/druid/master/DruidMaster.java b/server/src/main/java/com/metamx/druid/master/DruidMaster.java index af1f1d052aa..c7c39d3fdd3 100644 --- a/server/src/main/java/com/metamx/druid/master/DruidMaster.java +++ b/server/src/main/java/com/metamx/druid/master/DruidMaster.java @@ -668,7 +668,7 @@ public class DruidMaster synchronized (lock) { final LeaderLatch latch = leaderLatch.get(); if (latch == null || !latch.hasLeadership()) { - log.info("[%s] is master, not me. Phooey.", latch == null ? null : latch.getLeader().getId()); + log.info("LEGGO MY EGGO. [%s] is master.", latch == null ? null : latch.getLeader().getId()); stopBeingMaster(); return; }