summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-12-01 14:12:51 -0300
committerEuAndreh <eu@euandre.org>2025-12-01 14:12:51 -0300
commita78cb5f7845fb4bd0830bc08565632a8e9642d53 (patch)
treee4cd82b082e87346d0f9c55e37f6142437a70db8
parentadd datomic-pro-1.0.7469.zip (diff)
downloaddatomic-a78cb5f7845fb4bd0830bc08565632a8e9642d53.tar.gz
datomic-a78cb5f7845fb4bd0830bc08565632a8e9642d53.tar.xz
m
-rw-r--r--datomic-pro-1.0.7469/bin/bridge.clj2
-rwxr-xr-xdatomic-pro-1.0.7469/bin/classpath8
-rwxr-xr-xdatomic-pro-1.0.7469/bin/console4
-rw-r--r--datomic-pro-1.0.7469/bin/logback.xml65
-rwxr-xr-xdatomic-pro-1.0.7469/bin/maven-install6
-rwxr-xr-xdatomic-pro-1.0.7469/bin/run4
-rwxr-xr-xdatomic-pro-1.0.7469/bin/shell4
-rw-r--r--datomic-pro-1.0.7469/bin/shell.clj52
-rwxr-xr-xdatomic-pro-1.0.7469/bin/transactor39
-rw-r--r--datomic-pro-1.0.7469/create-db.bsh25
-rw-r--r--datomic-pro-1.0.7469/init.sql15
-rw-r--r--datomic-pro-1.0.7469/transactor.properties192
12 files changed, 416 insertions, 0 deletions
diff --git a/datomic-pro-1.0.7469/bin/bridge.clj b/datomic-pro-1.0.7469/bin/bridge.clj
new file mode 100644
index 0000000..f8ee570
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/bridge.clj
@@ -0,0 +1,2 @@
+(require '[datomic.slf4j.bridge :as bridge])
+(datomic.slf4j.bridge/install)
diff --git a/datomic-pro-1.0.7469/bin/classpath b/datomic-pro-1.0.7469/bin/classpath
new file mode 100755
index 0000000..60aee6a
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/classpath
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ -e "src/clj/datomic/db.clj" ]; then
+ echo $CLOJURE_JAR${CLOJURE_JAR+:}target/classes:build/src:bin:src/clj:test/src:samples/clj:`cat build/maven-classpath`:$DATOMIC_EXT_CLASSPATH
+else
+ s="`echo *transactor*.jar`:lib/*"
+ echo resources:${s// /:}:samples/clj:bin:$DATOMIC_EXT_CLASSPATH
+fi
diff --git a/datomic-pro-1.0.7469/bin/console b/datomic-pro-1.0.7469/bin/console
new file mode 100755
index 0000000..caeb51d
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/console
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -euo pipefail
+
+exec java -server -Xmx1g -cp 'lib/console/*:lib/*' clojure.main -i "bin/bridge.clj" --main datomic.console "$@"
diff --git a/datomic-pro-1.0.7469/bin/logback.xml b/datomic-pro-1.0.7469/bin/logback.xml
new file mode 100644
index 0000000..009e1c3
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/logback.xml
@@ -0,0 +1,65 @@
+<configuration>
+
+ <!-- prevent per-message overhead for jul logging calls, e.g. Hornet -->
+ <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
+ <resetJUL>true</resetJUL>
+ </contextListener>
+
+ <appender name="MAIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <fileNamePattern>${DATOMIC_LOG_DIR:-log}/%d{yyyy-MM-dd}.log</fileNamePattern>
+ <maxHistory>72</maxHistory>
+ </rollingPolicy>
+ <prudent>true</prudent> <!-- multi jvm safe, slower -->
+ <encoder>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-10contextName %logger{36} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <logger name="datomic.cast2slf4j" level="DEBUG"/>
+
+ <!-- uncomment to log storage access -->
+ <!-- <logger name="datomic.kv-cluster" level="DEBUG"/> -->
+
+ <!-- uncomment to log transactor heartbeat -->
+ <!-- <logger name="datomic.lifecycle" level="DEBUG"/> -->
+
+ <!-- uncomment to log transactions (transactor side) -->
+ <!-- <logger name="datomic.transaction" level="DEBUG"/> -->
+
+ <!-- uncomment to log transactions (peer side) -->
+ <!-- <logger name="datomic.peer" level="DEBUG"/> -->
+
+ <!-- uncomment to log the transactor log -->
+ <!-- <logger name="datomic.log" level="DEBUG"/> -->
+
+ <!-- uncomment to log peer connection to transactor -->
+ <!-- <logger name="datomic.connector" level="DEBUG"/> -->
+
+ <!-- uncomment to log storage gc -->
+ <!-- <logger name="datomic.garbage" level="DEBUG"/> -->
+
+ <!-- uncomment to log indexing jobs -->
+ <!-- <logger name="datomic.index" level="DEBUG"/> -->
+
+ <!-- these namespsaces create a ton of log noise -->
+ <logger name="org.apache.activemq.audit" level="WARN"/>
+ <logger name="httpclient" level="INFO"/>
+ <logger name="org.apache.commons.httpclient" level="INFO"/>
+ <logger name="org.apache.http" level="INFO"/>
+ <logger name="org.jets3t" level="INFO"/>
+ <logger name="com.amazonaws" level="INFO"/>
+ <logger name="com.amazonaws.request" level="WARN"/>
+ <logger name="sun.rmi" level="INFO"/>
+ <logger name="datomic.spy.memcached" level="INFO"/>
+ <logger name="com.ning.http.client.providers.netty" level="INFO"/>
+ <logger name="org.eclipse.jetty" level="INFO"/>
+ <logger name="org.hornetq.core.client.impl" level="INFO"/>
+ <logger name="org.apache.tomcat.jdbc.pool" level="INFO"/>
+
+ <logger name="datomic.cast2slf4j" level="DEBUG"/>
+
+ <root level="info">
+ <appender-ref ref="MAIN"/>
+ </root>
+</configuration>
diff --git a/datomic-pro-1.0.7469/bin/maven-install b/datomic-pro-1.0.7469/bin/maven-install
new file mode 100755
index 0000000..376411b
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/maven-install
@@ -0,0 +1,6 @@
+#!/bin/bash
+echo "Installing peer-1.0.7469" in local maven repository...
+mvn install:install-file -DgroupId=com.datomic -DartifactId=peer -Dfile=peer-1.0.7469.jar -DpomFile=pom.xml
+
+echo Installing memcache-asg-java-client-1.1.0.36.jar in local maven repository...
+mvn install:install-file -DgroupId=com.datomic -DartifactId=memcache-asg-java-client -Dfile=lib/memcache-asg-java-client-1.1.0.36.jar -Dversion=1.1.0.36 -Dpackaging=jar \ No newline at end of file
diff --git a/datomic-pro-1.0.7469/bin/run b/datomic-pro-1.0.7469/bin/run
new file mode 100755
index 0000000..7aa808a
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -euo pipefail
+
+exec java -server -Xmx1g -Xms1g -cp 'bin:datomic.clj:lib/*' clojure.main -i bin/bridge.clj "$@"
diff --git a/datomic-pro-1.0.7469/bin/shell b/datomic-pro-1.0.7469/bin/shell
new file mode 100755
index 0000000..748763a
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/shell
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -euo pipefail
+
+exec java -server -Xmx1g -cp 'lib/*' jline.ConsoleRunner clojure.main bin/shell.clj "$@"
diff --git a/datomic-pro-1.0.7469/bin/shell.clj b/datomic-pro-1.0.7469/bin/shell.clj
new file mode 100644
index 0000000..0686284
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/shell.clj
@@ -0,0 +1,52 @@
+;; Copyright (c) Metadata Partners, LLC.
+;; All rights reserved.
+
+(import 'bsh.Interpreter)
+(import 'java.io.InputStreamReader)
+
+(require '[clojure.string :as str]
+ '[datomic.slf4j.bridge :as bridge])
+
+(bridge/install)
+
+;; make an interpreter wired to console
+(def in (InputStreamReader. System/in))
+(def out (System/out))
+(def err (System/err))
+
+(def bsh (Interpreter. in out err true))
+
+;; import API and keyword constants
+(.eval bsh "import datomic.Entity;")
+(.eval bsh "import datomic.Connection;")
+(.eval bsh "import datomic.Database;")
+(.eval bsh "import datomic.Datom;")
+(.eval bsh "import datomic.Peer;")
+(.eval bsh "import datomic.TxReport;")
+(.eval bsh "import datomic.Util;")
+(.eval bsh "import datomic.impl.Shell;")
+(.eval bsh "import java.io.*;")
+(.eval bsh "import java.util.*;")
+
+;;(.eval bsh "pause() { System.out.println(\"Press enter to continue...\"); (new java.util.Scanner).nextLine(); };")
+
+(if *command-line-args*
+ ;; run script file
+ (do
+ (let [script (first *command-line-args*)
+ args (to-array (rest *command-line-args*))]
+ (.set bsh "args" args)
+ (.source bsh script)))
+ ;; run interactive
+ (do
+ ;; setup banner and prompt
+ (.eval bsh "printBanner() { print(\"Datomic Java Shell\"); print (\"Type Shell.help(); for help.\");}")
+ (.eval bsh "getBshPrompt() { return \"datomic % \"; }")
+ ;; turn on show so results are visible w/o print
+ (.setShowResults bsh true)
+ ;; start Datomic loading
+ (future (require 'datomic.peer))
+ ;; let it run
+ (.run bsh)))
+
+
diff --git a/datomic-pro-1.0.7469/bin/transactor b/datomic-pro-1.0.7469/bin/transactor
new file mode 100755
index 0000000..5cdd394
--- /dev/null
+++ b/datomic-pro-1.0.7469/bin/transactor
@@ -0,0 +1,39 @@
+#!/bin/bash
+cd `dirname $0`/..
+
+if [ "$1" == "" ]; then
+ echo "Usage: $0 properties-file"
+ exit -1
+fi
+
+while [ $# -gt 1 ]
+do
+ case "$1" in
+ -Xmx*)
+ XMX=$1
+ ;;
+ -Xms*)
+ XMS=$1
+ ;;
+ *)
+ JAVA_OPTS="$JAVA_OPTS $1"
+ ;;
+ esac
+ shift
+done
+
+# defaults
+if [ "$XMX" == "" ]; then
+ XMX=-Xmx1g
+fi
+if [ "$XMS" == "" ]; then
+ XMS=-Xms1g
+fi
+if [ "$JAVA_OPTS" == "" ]; then
+ JAVA_OPTS='-XX:+UseG1GC -XX:MaxGCPauseMillis=50'
+fi
+
+echo "Launching with Java options -server $XMS $XMX $JAVA_OPTS"
+exec java -server -cp `bin/classpath` $XMX $XMS $JAVA_OPTS clojure.main --main datomic.launcher "$@"
+
+
diff --git a/datomic-pro-1.0.7469/create-db.bsh b/datomic-pro-1.0.7469/create-db.bsh
new file mode 100644
index 0000000..e70851b
--- /dev/null
+++ b/datomic-pro-1.0.7469/create-db.bsh
@@ -0,0 +1,25 @@
+db_name = System.getenv("DATOMIC_DB");
+if (db_name == null || db_name.isEmpty()) {
+ db_name = "app";
+}
+db_uri = "datomic:sql://" + db_name + "?jdbc:sqlite:/usr/storage/sqlite.db";
+for (int i = 0; i < 20; i++) {
+ Thread.sleep(3000);
+ System.out.println("Testing connection to database '" + db_name + "'...");
+ try {
+ if (Peer.createDatabase(db_uri)) {
+ System.out.println("Created database '" + db_name + "'");
+ }
+ try {
+ new File("/usr/datomic-pro/db_ready").createNewFile();
+ } catch (Exception e) {
+ System.out.println("Could not create file /usr/datomic-pro/db_ready: " + e.getMessage());
+ }
+ System.out.println("Connect using DB URI datomic:sql://" + db_name + "?jdbc:sqlite:<LOCAL/PATH/TO/sqlite.db>");
+ System.out.println(" e.g. datomic:sql://app?jdbc:sqlite:./storage/sqlite.db if you mounted ./storage");
+ System.exit(0);
+ } catch (Exception e) {
+ // System.out.println(e.getMessage());
+ }
+}
+System.out.println("WARNING: Could not create or connect to database " + db_name + " after 10s.");
diff --git a/datomic-pro-1.0.7469/init.sql b/datomic-pro-1.0.7469/init.sql
new file mode 100644
index 0000000..5c5ef49
--- /dev/null
+++ b/datomic-pro-1.0.7469/init.sql
@@ -0,0 +1,15 @@
+PRAGMA foreign_keys = ON;
+PRAGMA journal_mode = WAL;
+PRAGMA synchronous = NORMAL;
+PRAGMA mmap_size = 134217728; -- 128 megabytes
+PRAGMA journal_size_limit = 67108864; -- 64 megabytes
+PRAGMA cache_size = 2000;
+
+-- datomic schema
+CREATE TABLE IF NOT EXISTS datomic_kvs (
+ id TEXT NOT NULL,
+ rev INTEGER,
+ map TEXT,
+ val BYTEA,
+ CONSTRAINT pk_id PRIMARY KEY (id)
+);
diff --git a/datomic-pro-1.0.7469/transactor.properties b/datomic-pro-1.0.7469/transactor.properties
new file mode 100644
index 0000000..f716bd9
--- /dev/null
+++ b/datomic-pro-1.0.7469/transactor.properties
@@ -0,0 +1,192 @@
+###################################################################
+
+# protocol=dev
+protocol=sql
+host=localhost
+port=4334
+
+
+
+## OPTIONAL #######################################################
+## The dev: and free: protocols typically use two ports
+## starting with the selected :port, but you can specify the
+## second (h2) port explicitly, e.g. for virtualization environs
+## that do not issue contiguous ports.
+
+# h2-port=4335
+
+
+###################################################################
+# See https://docs.datomic.com/on-prem/storage.html
+
+sql-driver-class=org.sqlite.JDBC
+sql-url=jdbc:sqlite:storage.db
+# sql-url=jdbc:postgresql://localhost:5432/datomic
+# sql-user=datomic
+# sql-password=datomic
+
+## The Postgres driver is included with Datomic. For other SQL
+## databases, you will need to install the driver on the
+## transactor classpath, by copying the file into lib/,
+## and place the driver on your peer's classpath.
+# sql-driver-class=org.postgresql.Driver
+
+## Driver specified params, as semicolon-separated pairs.
+# Optional
+# sql-driver-params=<param1=val1&param2=val2...>
+
+## The query used to validate JDBC connection.
+# Optional
+# sql-validation-query=select 1
+
+
+
+###################################################################
+## Security settings for embedded storage (free and dev).
+
+
+## == Passwords ==
+## Datomic free/dev has an embedded storage engine with default
+## passwords. You can supply the 'admin' password explicitly with
+## 'storage-admin-password', and rotate that later by moving it to
+## 'old-storage-admin-password', supplying a new
+## 'storage-admin-password'.
+# storage-admin-password=
+# old-storage-admin-password=
+
+## Peers access storage via the 'datomic' user. You can set/rotate
+## the password for 'datomic' using 'storage-datomic-password' and
+## 'old-storage-datomic-password' as per above.
+## NOTE: If you set the password for 'datomic' peers must connect
+## using the same password in the connect URI.
+## See https://docs.datomic.com/on-prem/clojure/index.html#datomic.api/connect.
+# storage-datomic-password=
+# old-storage-datomic-password=
+
+## == Peer access ==
+## You can control network access to storage by peers via
+## 'storage-access', options are 'local' (the default) and 'remote'.
+## NOTE: To enable remote access, you must explicitly specify
+## the admin and datomic passwords above.
+# storage-access=local
+
+
+
+###################################################################
+# See https://docs.datomic.com/on-prem/capacity.html
+
+# Launching with Java options -server -Xms1g -Xmx1g -XX:+UseG1GC -XX:MaxGCPauseMillis=50
+
+## Recommended settings for -Xmx4g production usage.
+# memory-index-threshold=32m
+# memory-index-max=512m
+# object-cache-max=1g
+
+## Recommended settings for -Xmx1g usage, e.g. dev laptops.
+memory-index-threshold=32m
+memory-index-max=256m
+object-cache-max=128m
+
+
+
+## OPTIONAL #######################################################
+
+
+## Set to false to disable SSL between the peers and the transactor.
+# Default: true
+# encrypt-channel=true
+
+## Data directory is used for dev: and free: storage, and
+## as a temporary directory for all storages.
+# data-dir=data
+
+## Transactor will log here, see bin/logback.xml to configure logging.
+# log-dir=log
+
+## Transactor will write process pid here on startup
+# pid-file=transactor.pid
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/valcache.html
+## Valcache configuration.
+## Set these valcache properties to a directory on an SSD to enable valcache
+
+# valcache-path=
+# valcache-max-gb=
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/storage.html
+## Memcached configuration.
+
+# memcached=host:port,host:port,...
+# memcached-username=datomic
+# memcached-password=datomic
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/capacity.html
+
+
+## Soft limit on the number of concurrent writes to storage.
+# Default: 4, Miniumum: 2
+# write-concurrency=4
+
+## Soft limit on the number of concurrent reads to storage.
+# Default: 2 times write-concurrency, Miniumum: 2
+# read-concurrency=8
+
+## Parallelism in index jobs.
+# Default: 1, Maximum: 8
+# index-parallelism=1
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/aws.html
+## Optional settings for rotating logs to S3
+# (Can be auto-generated by bin/datomic ensure-transactor.)
+
+# aws-s3-log-bucket-id=
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/aws.html
+## Optional settings for Cloudwatch metrics.
+# (Can be auto-generated by bin/datomic ensure-transactor.)
+
+# aws-cloudwatch-region=
+
+## Pick a unique name to distinguish transactor metrics from different systems.
+# aws-cloudwatch-dimension-value=your-system-name
+
+
+
+## OPTIONAL #######################################################
+# See https://docs.datomic.com/on-prem/ha.html
+
+
+## The transactor will write a heartbeat into storage on this interval.
+## A standby transactor will take over if it sees the heartbeat go
+## unwritten for 2x this interval. If your transactor load leads to
+## long gc pauses, you can increase this number to prevent the standby
+## transactor from unnecessarily taking over during a long gc pause.
+# Default: 5000, Miniumum: 5000
+# heartbeat-interval-msec=5000
+
+
+
+## OPTIONAL #######################################################
+
+
+## The transactor will use this partition for new entities that
+## do not explicitly specify a partition.
+# Default: :db.part/user
+# default-partition=:db.part/user
+
+