Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Renamed client-builder APIs, and updated tests.

  • Loading branch information...
commit d66f5c04a4e098cc232d1bb43381063253a42016 1 parent a898c82
@otabat authored
View
94 src/couchbase_clj/client_builder.clj
@@ -36,12 +36,12 @@
(defprotocol ICouchbaseCljClientBuilder
(get-factory-builder [clj-client-builder]
"Get the CouchbaseConnectionFactoryBuilder object.")
- (set-auth-descriptor [clj-client-builder dsc]
+ (set-auth-descriptor! [clj-client-builder dsc]
"Set the auth descriptor to enable authentication on new connections.
dsc is an AuthDescriptor object.")
- (set-daemon [clj-client-builder b]
+ (set-daemon! [clj-client-builder b]
"If true, the IO thread should be a daemon thread.")
- (set-failure-mode [clj-client-builder k]
+ (set-failure-mode! [clj-client-builder k]
"Set the failure mode as a keyword value.
Default values is :redistribute.
Other values are :retry, :cancel.
@@ -52,36 +52,36 @@
couchbase node that will be back quickly, and your app is written to not
wait very long for async command completion.
In cancel mode, all operations are automatically cancelled")
- (set-hash-alg [clj-client-builder k]
+ (set-hash-alg! [clj-client-builder k]
"Set the hashing algorithm as a keyword value.
Default value is :native-hash.
Other values are :ketama-hash, :crc-hash,
:fnv1-64-hash, :fnv1a-64-hash, :fnv1-32-hash, :fnv1a-32-hash.")
- (set-max-reconnect-delay [clj-client-builder delay]
+ (set-max-reconnect-delay! [clj-client-builder delay]
"Set maximum number of milliseconds to wait between reconnect attempts.
Default value is 30000.
You can set this value lower when there is intermittent
and frequent connection failures.")
- ;(set-min-reconnect-interval [clj-client-builder interval]
+ ;(set-min-reconnect-interval! [clj-client-builder interval]
; "Set the default minimum reconnect interval in millisecs.
;Default values is 1100
;This value means that if a reconnect is needed,
;it won't try to reconnect more frequently than default value.
;The internal connections take up to 500ms per request.
;You can set this to higher to try reconnecting less frequently.")
- (set-obs-poll-interval [clj-client-builder interval]
+ (set-obs-poll-interval! [clj-client-builder interval]
"Set the polling interval for Observe operations.
Default value is 100.
Set this higher or lower depending on whether the polling needs
to happen less or more frequently depending on the tolerance limits
for the Observe operation as compared to other operations.")
- (set-obs-poll-max [clj-client-builder poll]
+ (set-obs-poll-max! [clj-client-builder poll]
"Set the maximum times to poll the master and replica(s) to meet
the desired durability requirements.
Default value is 400.
You could set this value higher if the Observe operations do not complete
after the normal polling.")
- (set-op-queue-max-block-time [clj-client-builder time]
+ (set-op-queue-max-block-time! [clj-client-builder time]
"Set the maximum time to block waiting for op queue operations to complete,
in milliseconds.
Default value is 10000.
@@ -90,7 +90,7 @@
more undesirable than failing the request.
However, this value could be lowered for operations
not to block for this time.")
- (set-op-timeout [clj-client-builder timeout]
+ (set-op-timeout! [clj-client-builder timeout]
"Set the time for an operation to Timeout.
Default values is 2500.
You can set this value higher when there is heavy network traffic
@@ -98,84 +98,84 @@
This is used as a default timeout value for sync and async operations.
For async operations, it is internally used as a default timeout value to get
the result from Future objects.")
- (set-read-buffer-size [clj-client-builder size]
+ (set-read-buffer-size! [clj-client-builder size]
"Set the read buffer size.
Default value is 16384.")
- (set-should-optimize [clj-client-builder b]
+ (set-should-optimize! [clj-client-builder b]
"Set the optimize behavior for the network.
Default values is false.
You can set this value to be true if the performance should be optimized
for the network as in cases where there are some known issues with the network
that may be causing adverse effects on applications.
Currently it is ignored.")
- (set-timeout-exception-threshold [clj-client-builder timeout]
+ (set-timeout-exception-threshold! [clj-client-builder timeout]
"Set the maximum timeout exception threshold.
Default threshold is 998.
Minimum threshold is 2 and is calculated by timeout - 2.
For this reason, specify timeout equal to theshold + 2,
ex: (set-timeout-exception-threshold client_builder_object 1000)")
- (set-transcoder [clj-client-builder transcoder]
+ (set-transcoder! [clj-client-builder transcoder]
"Set the default transcoder.
transcoder is a transcoder object.
Default transcoder is SerializingTranscoder.")
- (set-use-nagle-algorithm [clj-client-builder b]
+ (set-use-nagle-algorithm! [clj-client-builder b]
"Set to true if you'd like to enable the Nagle algorithm."))
(deftype CouchbaseCljClientBuilder [^CouchbaseConnectionFactoryBuilder cfb]
ICouchbaseCljClientBuilder
(get-factory-builder [clj-client-builder] cfb)
- (set-auth-descriptor [clj-client-builder dsc]
+ (set-auth-descriptor! [clj-client-builder dsc]
(.setAuthDescriptor cfb dsc))
- (set-daemon [clj-client-builder b]
+ (set-daemon! [clj-client-builder b]
(.setDaemon cfb b))
- (set-failure-mode [clj-client-builder k]
+ (set-failure-mode! [clj-client-builder k]
(.setFailureMode cfb (failure-mode k)))
- (set-hash-alg [clj-client-builder k]
+ (set-hash-alg! [clj-client-builder k]
(.setHashAlg cfb (hash-alg k)))
- (set-max-reconnect-delay [clj-client-builder delay]
+ (set-max-reconnect-delay! [clj-client-builder delay]
(.setMaxReconnectDelay cfb delay))
- ;(set-min-reconnect-interval [clj-client-builder interval]
+ ;(set-min-reconnect-interval! [clj-client-builder interval]
; (.setReconnectThresholdTime cfb interval TimeUnit/MILLISECONDS))
- (set-obs-poll-interval [clj-client-builder interval]
+ (set-obs-poll-interval! [clj-client-builder interval]
(.setObsPollInterval cfb interval))
- (set-obs-poll-max [clj-client-builder poll]
+ (set-obs-poll-max! [clj-client-builder poll]
(.setObsPollMax cfb poll))
- (set-op-queue-max-block-time [clj-client-builder time]
+ (set-op-queue-max-block-time! [clj-client-builder time]
(.setOpQueueMaxBlockTime cfb time))
- (set-op-timeout [clj-client-builder timeout]
+ (set-op-timeout! [clj-client-builder timeout]
(.setOpTimeout cfb timeout))
- (set-read-buffer-size [clj-client-builder size]
+ (set-read-buffer-size! [clj-client-builder size]
(.setReadBufferSize cfb size))
- (set-should-optimize [clj-client-builder b]
+ (set-should-optimize! [clj-client-builder b]
(.setShouldOptimize cfb b))
- (set-timeout-exception-threshold [clj-client-builder timeout]
+ (set-timeout-exception-threshold! [clj-client-builder timeout]
(.setTimeoutExceptionThreshold cfb timeout))
- (set-transcoder [clj-client-builder transcoder]
+ (set-transcoder! [clj-client-builder transcoder]
(.setTranscoder cfb transcoder))
- (set-use-nagle-algorithm [clj-client-builder b]
+ (set-use-nagle-algorithm! [clj-client-builder b]
(.setUseNagleAlgorithm cfb b)))
(def
^{:doc "A key/value conversion map of client options
to corresponding set functions."}
method-map
- {:auth-descriptor set-auth-descriptor
- :daemon set-daemon
- :failure-mode set-failure-mode
- :hash-alg set-hash-alg
+ {:auth-descriptor set-auth-descriptor!
+ :daemon set-daemon!
+ :failure-mode set-failure-mode!
+ :hash-alg set-hash-alg!
;; TODO: Observers disabled for now
- ;:initial-observers set-initial-observers
- :max-reconnect-delay set-max-reconnect-delay
- ;:min-reconnect-interval set-min-reconnect-interval
- :obs-poll-interval set-obs-poll-interval
- :obs-poll-max set-obs-poll-max
- :op-queue-max-block-time set-op-queue-max-block-time
- :op-timeout set-op-timeout
- :read-buffer-size set-read-buffer-size
- :should-optimize set-should-optimize
- :timeout-exception-threshold set-timeout-exception-threshold
- :transcoder set-transcoder
- :use-nagle-algorithm set-use-nagle-algorithm})
+ ;:initial-observers set-initial-observers!
+ :max-reconnect-delay set-max-reconnect-delay!
+ ;:min-reconnect-interval set-min-reconnect-interval!
+ :obs-poll-interval set-obs-poll-interval!
+ :obs-poll-max set-obs-poll-max!
+ :op-queue-max-block-time set-op-queue-max-block-time!
+ :op-timeout set-op-timeout!
+ :read-buffer-size set-read-buffer-size!
+ :should-optimize set-should-optimize!
+ :timeout-exception-threshold set-timeout-exception-threshold!
+ :transcoder set-transcoder!
+ :use-nagle-algorithm set-use-nagle-algorithm!})
(defn- dispatch
[builder kv]
@@ -197,7 +197,7 @@
(client-client-builder {:hash-alg :native-hash :failure-mode :redistribute})
After creating, you can set options.
- ex: (set-op-timeout clj-client-builder timeout)
+ ex: (set-op-timeout! clj-client-builder timeout)
All options can be looked at method-map Var.
You can get the internal CouchbaseConnectionFactoryBuilder
View
245 test/couchbase_clj/test/client_builder.clj
@@ -6,7 +6,8 @@
[com.couchbase.client
CouchbaseClient
CouchbaseConnectionFactory
- CouchbaseConnectionFactoryBuilder])
+ CouchbaseConnectionFactoryBuilder]
+ [couchbase_clj.client_builder CouchbaseCljClientBuilder])
(:use [clojure.test])
(:require [couchbase-clj.client :as cb-client]
[couchbase-clj.client-builder :as cb-client-builder]
@@ -15,6 +16,15 @@
;(use-fixtures :once tf/setup-client tf/flush-data)
(use-fixtures :once tf/setup-client)
+(def base-opts {:bucket tf/bucket
+ :username tf/bucket-username
+ :password tf/bucket-password
+ :uris (map #(URI. %) tf/uris)})
+
+(def base-opts-with-hash-alg-and-failure-mode
+ (merge base-opts {:hash-alg :native-hash
+ :failure-mode :redistribute}))
+
(deftest str->uri-test
(testing "Convert string to URI object."
(is (instance? URI (cb-client-builder/str->uri "http://localhost/")))
@@ -28,50 +38,53 @@
(is (instance? CouchbaseConnectionFactoryBuilder
(cb-client-builder/get-factory-builder cb))))))
-(deftest set-auth-descriptor-test
+(deftest set-auth-descriptor!-test
(testing "Set auth-descriptor option to a client."
- (let [cf (cb-client-builder/build
- {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :auth-descriptor (AuthDescriptor.
- (into-array [ "plain" ])
- (PlainCallbackHandler. "" ""))})]
+ (let [auth-descriptor (AuthDescriptor. (into-array [ "plain" ])
+ (PlainCallbackHandler. "" ""))
+ cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:auth-descriptor auth-descriptor}))]
+ (cb-client-builder/set-auth-descriptor! cb auth-descriptor)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (instance? AuthDescriptor (.getAuthDescriptor cf))))))
-(deftest set-daemon-test
+(deftest set-daemon!-test
(testing "Set daemon option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :daemon true})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode {:daemon true}))]
+ (cb-client-builder/set-daemon! cb true)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.isDaemon cf) true)))))
-(deftest set-failure-mode-test
+(deftest set-failure-mode!-test
(testing "Set failure-mode option to a client."
- (let [m {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash}
- cf1 (cb-client-builder/build (assoc m :failure-mode :redistribute))
- cf2 (cb-client-builder/build (assoc m :failure-mode :retry))
- cf3 (cb-client-builder/build (assoc m :failure-mode :cancel))
- cf4 (cb-client-builder/build (assoc m :failure-mode :else))]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf1 (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:failure-mode :redistribute}))
+ cf2 (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:failure-mode :retry}))
+ cf3 (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:failure-mode :cancel}))
+ cf4 (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:failure-mode :else}))]
+ (cb-client-builder/set-failure-mode! cb :redistribute)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getFailureMode cf1) FailureMode/Redistribute))
(is (= (.getFailureMode cf2) FailureMode/Retry))
(is (= (.getFailureMode cf3) FailureMode/Cancel))
(is (= (.getFailureMode cf4) FailureMode/Redistribute)))))
-(deftest set-hash-alg-test
+(deftest set-hash-alg!-test
(testing "Set hash-alg option to a client."
- (let [m {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :failure-mode :redistribute}
+ (let [m (merge base-opts {:failure-mode :redistribute})
+ cb (cb-client-builder/create-client-builder {})
cf1 (cb-client-builder/build (assoc m :hash-alg :native-hash))
cf2 (cb-client-builder/build (assoc m :hash-alg :ketama-hash))
cf3 (cb-client-builder/build (assoc m :hash-alg :crc-hash))
@@ -80,6 +93,8 @@
cf6 (cb-client-builder/build (assoc m :hash-alg :fnv1-32-hash))
cf7 (cb-client-builder/build (assoc m :hash-alg :fnv1a-32-hash))
cf8 (cb-client-builder/build (assoc m :hash-alg :else))]
+ (cb-client-builder/set-hash-alg! cb :ketama-hash)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getHashAlg cf1) DefaultHashAlgorithm/NATIVE_HASH))
(is (= (.getHashAlg cf2) DefaultHashAlgorithm/KETAMA_HASH))
(is (= (.getHashAlg cf3) DefaultHashAlgorithm/CRC_HASH))
@@ -89,18 +104,18 @@
(is (= (.getHashAlg cf7) DefaultHashAlgorithm/FNV1A_32_HASH))
(is (= (.getHashAlg cf8) DefaultHashAlgorithm/NATIVE_HASH)))))
-(deftest set-max-reconnect-delay-test
+(deftest set-max-reconnect-delay!-test
(testing "Set max-reconnect-delay option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :max-reconnect-delay 500})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:max-reconnect-delay 500}))]
+ (cb-client-builder/set-max-reconnect-delay! cb 1000)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getMaxReconnectDelay cf) 500)))))
;; TODO: Test failed, not working.
-;(deftest set-min-reconnect-interval-test
+;(deftest set-min-reconnect-interval!-test
; (testing "Set min-reconnect-interval option to a client."
; (let [cf (cb-client-builder/build {:bucket tf/bucket
; :password tf/bucket-password
@@ -111,78 +126,79 @@
; (is (= (.getMinReconnectInterval cf) 2000)))))
; APIs not provided?
-;(deftest set-obs-poll-interval-test)
-;(deftest set-obs-poll-max-test)
+;(deftest set-obs-poll-interval!-test)
+;(deftest set-obs-poll-max!-test)
-(deftest set-op-queue-max-block-time-test
+(deftest set-op-queue-max-block-time!-test
(testing "Set op-queue-max-block-time option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :op-queue-max-block-time 15000})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:op-queue-max-block-time 15000}))]
+ (cb-client-builder/set-op-queue-max-block-time! cb 1000)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getOpQueueMaxBlockTime cf) 15000)))))
-(deftest set-op-timeout-test
+(deftest set-op-timeout!-test
(testing "Set op-timeout option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :op-timeout 10000})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:op-timeout 10000}))]
+ (cb-client-builder/set-op-timeout! cb 1000)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getOperationTimeout cf) 10000)))))
-(deftest set-read-buffer-size-test
+(deftest set-read-buffer-size!-test
(testing "Set read-buffer-size option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :read-buffer-size 10000})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:read-buffer-size 10000}))]
+ (cb-client-builder/set-read-buffer-size! cb 1000)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getReadBufSize cf) 10000)))))
-(deftest set-should-optimize-test
+(deftest set-should-optimize!-test
(testing "Set should-optimize option to a client."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :should-optimize false})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:should-optimize false}))]
+ (cb-client-builder/set-should-optimize! cb false)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.shouldOptimize cf) false)))))
-(deftest set-timeout-exception-threshold-test
+(deftest set-timeout-exception-threshold!-test
(testing "Set timeout-exception-threshold option to a client builder."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :timeout-exception-threshold 10000})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:timeout-exception-threshold 10000}))]
+ (cb-client-builder/set-timeout-exception-threshold! cb 1000)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.getTimeoutExceptionThreshold cf) 9998)))))
-(deftest set-transcoder-test
+(deftest set-transcoder!-test
(testing "Set use-nagle-algorithm option to a client builder."
- (let [cl (cb-client/create-client {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :transcoder (SerializingTranscoder.)})]
+ (let [transcoder (SerializingTranscoder.)
+ cb (cb-client-builder/create-client-builder {})
+ cl (cb-client/create-client
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:transcoder transcoder}))]
+ (cb-client-builder/set-transcoder! cb transcoder)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (instance? SerializingTranscoder
(.getTranscoder (cb-client/get-client cl)))))))
-(deftest set-use-nagle-algorithm-test
+(deftest set-use-nagle-algorithm!-test
(testing "Set use-nagle-algorithm option to a client builder."
- (let [cf (cb-client-builder/build {:bucket tf/bucket
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :hash-alg :native-hash
- :failure-mode :redistribute
- :use-nagle-algorithm true})]
+ (let [cb (cb-client-builder/create-client-builder {})
+ cf (cb-client-builder/build
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:use-nagle-algorithm true}))]
+ (cb-client-builder/set-use-nagle-algorithm! cb true)
+ (is (instance? CouchbaseCljClientBuilder cb))
(is (= (.useNagleAlgorithm cf) true)))))
(deftest create-client-builder-test
@@ -199,35 +215,30 @@
(cb-client-builder/create-client-builder
{:hash-alg :native-hash
:failure-mode :redistribute}))
- cf (cb-client-builder/create-factory{:bucket tf/bucket
- :username tf/bucket-username
- :password tf/bucket-password
- :uris (map #(URI. %) tf/uris)
- :factory-builder fb})]
+ cf (cb-client-builder/create-factory
+ (merge base-opts-with-hash-alg-and-failure-mode
+ {:factory-builder fb}))]
(is (instance? CouchbaseConnectionFactory cf)))))
(deftest build-test
(testing "Building of CouchbaseConnectionFactory with default value insertion."
(let [cf (cb-client-builder/build
- {:bucket tf/bucket
- :username tf/bucket-username
- :password tf/bucket-password
- :uris tf/uris
- :auth-descriptor (AuthDescriptor.
- (into-array [ "plain" ])
- (PlainCallbackHandler. "" ""))
- :daemon true
- :failure-mode :retry
- :hash-alg :crc-hash
- :max-reconnect-delay 500
- ;:min-reconnect-interval 2000
- :obs-poll-interval 1000
- :obs-poll-max 30
- :op-queue-max-block-time 20000
- :op-timeout 20000
- :read-buffer-size 17000
- :should-optimize true
- :timeout-exception-threshold 33333
- :transcoder (SerializingTranscoder.)
- :use-nagle-algorithm true})]
+ (merge base-opts
+ {:auth-descriptor (AuthDescriptor.
+ (into-array [ "plain" ])
+ (PlainCallbackHandler. "" ""))
+ :daemon true
+ :failure-mode :retry
+ :hash-alg :crc-hash
+ :max-reconnect-delay 500
+ ;:min-reconnect-interval 2000
+ :obs-poll-interval 1000
+ :obs-poll-max 30
+ :op-queue-max-block-time 20000
+ :op-timeout 20000
+ :read-buffer-size 17000
+ :should-optimize true
+ :timeout-exception-threshold 33333
+ :transcoder (SerializingTranscoder.)
+ :use-nagle-algorithm true}))]
(is (instance? CouchbaseConnectionFactory cf)))))
Please sign in to comment.
Something went wrong with that request. Please try again.