Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 46 additions & 5 deletions src/taoensso/faraday.clj
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,17 @@
Condition
ConsumedCapacity
ComparisonOperator
ContinuousBackupsDescription
CreateGlobalSecondaryIndexAction
CreateTableRequest
UpdateContinuousBackupsRequest
UpdateContinuousBackupsResult
CreateTableResult
DeleteItemRequest
DeleteItemResult
DeleteRequest
DescribeContinuousBackupsRequest
DescribeContinuousBackupsResult
DescribeStreamRequest
DescribeStreamResult
DeleteTableRequest
Expand All @@ -55,6 +60,7 @@
GlobalSecondaryIndex
GlobalSecondaryIndexDescription
GlobalSecondaryIndexUpdate
PointInTimeRecoverySpecification
Projection
ProvisionedThroughput
ProvisionedThroughputDescription
Expand Down Expand Up @@ -412,7 +418,7 @@

QueryResult (as-map [r] (am-query|scan-result r))
ScanResult (as-map [r] (am-query|scan-result r
{:scanned-count (.getScannedCount r)}))
{:scanned-count (.getScannedCount r)}))

BatchGetItemResult
(as-map [r]
Expand Down Expand Up @@ -453,16 +459,22 @@
(let [schema (as-map (.getKeySchema d))
defs (as-map (.getAttributeDefinitions d))]
(merge-with merge
(reduce-kv (fn [m k v] (assoc m (:name v) {:key-type (:type v)}))
{} schema)
(reduce-kv (fn [m k v] (assoc m (:name v) {:data-type (:type v)}))
{} defs)))})
(reduce-kv (fn [m k v] (assoc m (:name v) {:key-type (:type v)}))
{} schema)
(reduce-kv (fn [m k v] (assoc m (:name v) {:data-type (:type v)}))
{} defs)))})

DescribeTableResult (as-map [r] (as-map (.getTable r)))
CreateTableResult (as-map [r] (as-map (.getTableDescription r)))
UpdateTableResult (as-map [r] (as-map (.getTableDescription r)))
DeleteTableResult (as-map [r] (as-map (.getTableDescription r)))

ContinuousBackupsDescription
(as-map [d] {:status (.getContinuousBackupsStatus d)})

DescribeContinuousBackupsResult (as-map [r] (as-map (.getContinuousBackupsDescription r)))
UpdateContinuousBackupsResult (as-map [r] (as-map (.getContinuousBackupsDescription r)))

Projection
(as-map [p]
{:projection-type (.getProjectionType p)
Expand Down Expand Up @@ -1710,3 +1722,32 @@
(if (sequential? x) [] (empty x)) x))

:else x))))

(defn- point-in-time-recovery-specification [{:keys [enable-recovery?]}]
(doto (PointInTimeRecoverySpecification.)
(.setPointInTimeRecoveryEnabled enable-recovery?)))

(defn- update-continuous-backups-request
^UpdateContinuousBackupsRequest [table-name opts]
(doto (UpdateContinuousBackupsRequest.)
(.setTableName (name table-name))
(.setPointInTimeRecoverySpecification
(point-in-time-recovery-specification opts))))

(defn update-continuous-backups
"Updates Continuous Backups on a table with options:
:enable-recovery? - <#{true false}>"
[client-opts table-name opts]
(as-map (.updateContinuousBackups (db-client client-opts)
(update-continuous-backups-request table-name opts))))

(defn- describe-continuous-backups-request
^DescribeContinuousBackupsRequest [table-name]
(doto (DescribeContinuousBackupsRequest.) (.setTableName (name table-name))))

(defn describe-continuous-backups
" Checks the status of continuous backups and point in time recovery on the specified table. Returns a map of DescribeContinuousBackupsResult"
[client-opts table-name]
(try (as-map (.describeContinuousBackups (db-client client-opts)
(describe-continuous-backups-request table-name)))
(catch ResourceNotFoundException _ nil)))
8 changes: 8 additions & 0 deletions test/taoensso/faraday/tests/main.clj
Original file line number Diff line number Diff line change
Expand Up @@ -1139,6 +1139,14 @@
:throughput {:read 1 :write 1 :last-decrease nil :last-increase nil :num-decreases-today nil}}]
(:gsindexes fin-idx)))))))

(deftest point-in-time-recovery
(testing "Describe Point-in-Time Recovery and Backups Before Update"
(is (= {:status "DISABLED"} (far/describe-continuous-backups *client-opts* ttable))))
(testing "Update Point-in-Time Recovery and Backups"
(is (= {:status "ENABLED"} (far/update-continuous-backups *client-opts* ttable {:enable-recovery? true}))))
(testing "Describe Point-in-Time Recovery and Backups After Update"
(is (= {:status "ENABLED"} (far/describe-continuous-backups *client-opts* ttable)))))

(deftest querying-indexes
(testing "We can scan with an index, and do projections"
(do-with-temp-table
Expand Down