h*4/w      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0.3.0.2Memcached Types(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-InferredimemcacheMemcached response packet.memcacheThe status (success or error) of a Memcached operation returned in a . memcacheOperation successful. memcacheKey not found. memcacheKey exists when not expected. memcache#Value too large to store at server. memcache Invalid arguments for operation.memcache5Key-Value pair not stored at server (internal error).memcache8Value not numeric when increment or decrement requested.memcache&Server doesn't know requested command.memcacheServer out of memory.memcacheSASL authentication failed.memcache(SASL authentication requires more steps.KmemcacheRaw request is custom requests, dangerous as no corresponding raw response...]memcache"Memcached packet header (for both * and ).fmemcachePassword for authentication.gmemcacheUsername for authentication.hmemcache-SASL Authentication information for a server.nmemcache Noop request.omemcacheNoop response.hijklgfWXYTUVSRQPONML ]^e_`abcdmZ[\*+,-.789:;<=>?@ABCDEFGHIJK563412/0n !"#$%&'()ohijklgfWXYTUVSRQPONML ]^e_`abcdmZ[\*+,-.789:;<=>?@ABCDEFGHIJK563412/0n !"#$%&'()oErrors Handling(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferred7 smemcache;Errors related to Memcached protocol and bytes on the wire.memcache$Received an unknown response packet.memcacheUnknown Memcached operation.memcache%Unknown Memcached status field value.memcache?Unexpected length of a Memcached field (extras, key, or value).memcache;Response packet is for a different operation than expected.memcache5Network socket closed without receiving enough bytes.memcache Errors that occur on the client.memcache(All servers are currently marked failed.memcache+Timeout occurred sending request to server.memcache1All exceptions that a Memcached client may throw.memcacheMemcached operation error.memcacheError occuring on client side.memcache5Errors occurring communicating with Memcached server.memcacheConvert a status to  exception.memcacheCreate a properly formatted  protocol error.  Connection Handling(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferredmemcache'Send a request to the Memcached server.memcacheRetrieve a single response from the Memcached server. FIXME: read into buffer to minimize read syscallsmemcache-Serialize a response to a ByteString Builder.memcache,Serialize a request to a ByteString Builder.memcache'Deserialize a Header from a ByteString.memcacheDeserialize a Response body.memcache9Deserialize the body of a Response that contains nothing.memcacheDeserialize the body of a Get Response (Extras [flags] & Value).memcacheDeserialize the body of a GetK Response (Extras [flags] & Key & Value).memcache>Deserialize the body of a Incr/Decr Response (Value [Word64]).memcacheDeserialize the body of a general response that just has a value (no key or extras).memcacheDeserialize the body of a general response that just has a key and value (no extras).memcache#Deserialize a Response status code.memcacheCheck the length of a header field is as expected, throwing a ProtocolError exception if it is not.*+,-.*+,-.SASL Authentication(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferreddmemcache,Perform SASL authentication with the server.memcache"Perform SASL PLAIN authentication.memcacheList available SASL authentication methods. We could call this but as we only support PLAIN as does the Memcached server, we simply assume PLAIN authentication is supprted and try that.hijklgfhijklgfServer Handling(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferred%& memcacheMemcached server connection.memcache$ID of server for consistent hashing.memcacheConnection pool to server.memcacheHostname of server.memcachePort number of server.memcacheCredentials for server.memcache+When did the server fail? 0 if it is alive.memcache)Create a new Memcached server connection.memcacheSend and receive a single request/response pair to the Memcached server.memcache9Run a function with access to an server socket for using  and .memcacheClose the server connection. If you perform another operation after this, the connection will be re-established.Cluster Handling(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferred%&!memcacheMemcached cluster.memcache microsecondsmemcache microsecondsmemcache?Options specifies how a Memcached cluster should be configured.memcacheNumber of times to retry an operation on failure. If consecutive failures exceed this value for a server, we mark it as down and failover to a different server for the next operation. Default is 2.memcacheAfter an operation has failed, how long to wait before retrying it while still within the  count?Default is 200ms.memcacheHow long to wait after a server has been marked down, before trying to use it again.Default is 1500ms.memcacheHow long to wait for an operation to complete before considering it failed.Default is 750ms.memcache3Figure out which server to talk to for a given key. Default is .memcache;ServerSpec specifies a server configuration for connection.memcache!Hostname of server to connect to.memcache!Port number server is running on.memcacheAuthentication values to use for SASL authentication with this server.memcacheNumber of times to retry an operation before considering it failed.memcache;Establish a new connection to a group of Memcached servers.memcacheCheck if server is alive.memcacheFigure out which server to talk to for this key. I.e., the distribution method. We use consistent hashing based on the CHORD approach.memcacheRun a Memcached operation against a particular server, handling any failures that occur, retrying the specified number of times.memcacheRun a Memcached operation against a particular server, handling any failures that occur, retrying the specified number of times.memcacheRun a Memcached operation against any single server in the cluster, handling any failures that occur, retrying the specified number of times.memcacheRun a Memcached operation against all servers in the cluster, handling any failures that occur, retrying the specified number of times.memcacheRun a Memcached operation against all servers in the cluster, handling any failures that occur, retrying the specified number of times. Similar to / but allows more flexible interaction with the % than a single request and response.memcacheRun an IO operation multiple times if an exception is thrown, marking the server as dead if it fails more than the allowed number of retries.Memcached Client(c) David Terei, 2016BSDcode@davidterei.comstableGHC Safe-Inferred.memcache*StatResults are a list of key-value pairs.memcacheA Memcached client, connected to a collection of Memcached servers.memcache;Establish a new connection to a group of Memcached servers.memcache5Gracefully close a connection to a Memcached cluster.memcache4Retrieve the value for the given key from Memcached.memcacheGet-and-touch: Retrieve the value for the given key from Memcached, and also update the stored key-value pairs expiration time at the server. Use an expiration value of 0 to store forever.memcacheUpdate the expiration time of a stored key-value pair, returning its version identifier. Use an expiration value of 0 to store forever.memcacheStore a new (or overwrite exisiting) key-value pair, returning its version identifier. Use an expiration value of 0 to store forever.memcacheStore a key-value pair, but only if the version specified by the client matches the Version of the key-value pair at the server. The version identifier of the stored key-value pair is returned, or if the version match fails, Nothing) is returned. Use an expiration value of 0 to store forever.memcacheStore a new key-value pair, returning it's version identifier. If the key-value pair already exists, then fail (return ). Use an expiration value of 0 to store forever.memcacheUpdate the value of an existing key-value pair, returning it's new version identifier. If the key doesn't already exist, the fail and return Nothing. Use an expiration value of 0 to store forever.memcacheIncrement a numeric value stored against a key, returning the incremented value and the version identifier of the key-value pair. Use an expiration value of 0 to store forever.memcacheDecrement a numeric value stored against a key, returning the decremented value and the version identifier of the key-value pair. Use an expiration value of 0 to store forever.memcacheAppend a value to an existing key-value pair, returning the new version identifier of the key-value pair when successful.memcachePrepend a value to an existing key-value pair, returning the new version identifier of the key-value pair when successful.memcacheDelete a key-value pair at the server, returning true if successful.memcacheRemove (delete) all currently stored key-value pairs from the cluster. The expiration value can be used to cause this flush to occur in the future rather than immediately.memcacheReturn statistics on the stored key-value pairs at each server in the cluster. The optional key can be used to select a different set of statistics from the server than the default. Most Memcached servers support "items", "slabs" or  "settings".memcacheVersion returns the version string of the Memcached cluster. We just query one server and assume all servers in the cluster are the same version.hijklgf hijklgf   !"#$%&'()*+,-./0123456789:;<<==>>??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeffghijklmnopqrstuvwxyz{|}~m'memcache-0.3.0.2-7imTuaMKBwcKIcMXdrtNGDDatabase.Memcache.ClientDatabase.Memcache.SocketDatabase.Memcache.TypesDatabase.Memcache.ErrorsDatabase.Memcache.SASLDatabase.Memcache.ServerDatabase.Memcache.Clustermemcache1data-default-class-0.1.2.0-5FK3vpOLcdkKGIel7pORbQData.Default.Classdef&network-3.1.4.0-HoKRNWNM3gfJemTmJCv2ToNetwork.Socket.TypesSocketResponseResresOp resStatus resOpaqueresCasStatusNoErrorErrKeyNotFound ErrKeyExistsErrValueTooLargeErrInvalidArgsErrItemNotStoredErrValueNonNumericErrUnknownCommandErrOutOfMemory SaslAuthFailSaslAuthContinue OpResponseResGetResGetKResSetResAdd ResReplace ResDelete ResIncrement ResDecrement ResAppend ResPrependResTouchResGATResGATKResFlushResNoop ResVersionResStatResQuit ResSASLList ResSASLStart ResSASLStepRequestReqreqOp reqOpaquereqCasSERawSETouchSEIncrSESet OpRequestReqGetReqSetReqAdd ReqReplace ReqDelete ReqIncrement ReqDecrement ReqAppend ReqPrependReqTouchReqGATReqFlushReqNoop ReqVersionReqStatReqQuit ReqSASLList ReqSASLStart ReqSASLStepReqRawVersionFlags ExpirationDeltaInitialExtrasValueKeyKNoKey IncludeKeyQLoudQuietPktType PktRequest PktResponseHeaderopkeyLenextraLenstatusbodyLenopaquecasPasswordUsernameAuthenticationAuthNoAuthusernamepasswordmEMCACHE_HEADER_SIZEemptyReqemptyRes $fEqSERaw $fShowSERaw $fEqResponse$fShowResponse $fEqHeader $fShowHeader $fEqStatus $fShowStatus$fEqOpResponse$fShowOpResponse $fEqRequest $fShowRequest $fEqOpRequest$fShowOpRequest $fEqSETouch $fShowSETouch $fEqSEIncr $fShowSEIncr $fEqSESet $fShowSESet$fEqK$fShowK$fEqQ$fShowQ $fEqPktType $fShowPktType$fEqAuthentication$fShowAuthentication ProtocolError UnknownPkt UnknownOp UnknownStatus BadLengthWrongOp UnexpectedEOF protocolError ClientErrorNoServersReadyTimeout MemcacheErrorOpError throwStatuswrongOp$fExceptionMemcacheError$fEqMemcacheError$fShowMemcacheError$fEqProtocolError$fShowProtocolError$fEqClientError$fShowClientErrorsendrecv szResponse szRequestdzHeader dzResponse authenticateServersidfailed newServersendRecv withSocketclose $fOrdServer $fEqServer $fShowServerClusterOptionsoptsServerRetriesoptsFailRetryDelayoptsDeadRetryDelayoptsServerTimeoutoptsGetServerForKey ServerSpecssHostssPortssAuthRetries newClusterkeyedOpanyOpallOpallOp'$fDefaultServerSpec$fDefaultOptions$fEqServerSpec$fShowServerSpec StatResultsClient newClientquitgetgattouchsetaddreplace increment decrementappendprependdeleteflushstatsversiondzGenericResponse dzGetResponsedzGetKResponsedzNumericResponsedzValueResponsedzKeyValueResponsedzStatus chkLength saslAuthPlain saslListMechspooladdrportauth cFailDelaycTimeoutgetServerForKeyDefault serverAliveserverOpretryOpbase GHC.MaybeNothing