Code Monkey home page Code Monkey logo

Comments (2)

DanSimon avatar DanSimon commented on July 3, 2024

So I didn't realize this, but the redis interface has both get and getOption methods. So technically you can already do it either way with redis.

Personally I feel like the way the memcached client does it makes sense for redis (having get return an option and just get rid of getOption), but not for http, where "get" is not really key/value get.

This does bring up a bigger issue of how clients handle responses in a way that's consistent across protocols. In particular, "should protocol errors be encoded as exceptions in failed Futures/Callbacks?" . And a followup question is given a protocol, what kinds of responses are considered errors?

For question 1, I think it depends. For example, I definitely think a memcached get miss should be returned as a None option, not as something like NoDataException, but maybe a 404 for a http get should be a NotFoundException?

For question 2, again I think there's no simple answer, but I do believe we can try to categorize every type of error across protocols:

  1. Failures in which the client should retry (probably on a different host): connection errors, remote server errors, rate-limiting
  2. Failures in which retrying the request will probably not change the outcome
    a. malformed request
    b. authentication / authorization problem
  3. Failures which indicate attempting to read non-existant data
  4. Any other response explicitly marked as an error message (memcached and redis have this, not http)
  5. Others?

Once we've properly categorized responses, then we can determine which ones should become exceptions, and maybe decide if we can have some common exceptions shared across protocols.

from colossus.

benblack86 avatar benblack86 commented on July 3, 2024

I think for the particular example I raised, updating the Redis client so get returns an option would make me happy. I'll work on that first.

I'm going to punt on the extra questions as I don't think there is a simple answer :)

from colossus.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.